sql >> Database >  >> RDS >> PostgreSQL

Kan tabel niet kopiëren naar een andere database met pg_dump

Ik heb geprobeerd een database te maken met Encoding:UTF8 met een tabel en voeg de twee UTF-8-gecodeerde tekens in die de COPY-opdracht probeert in te voegen en het werkt bij gebruik van INSERT.

CREATE DATABASE test
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'English_United States.1252'
       LC_CTYPE = 'English_United States.1252'
       CONNECTION LIMIT = -1;

CREATE TABLE x
(
  first_two_letters character(3)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE x
  OWNER TO postgres;

INSERT INTO x(
            first_two_letters)
    VALUES ('سر');

Volgens http://rishida.net/tools/conversion/ voor de mislukte COPY zijn de Unicode-codepunten:

dat zijn twee tekens , wat betekent dat u ze moet kunnen opslaan in een kolom die is gedefinieerd als teken (3), waarin tekenreeksen met een lengte van maximaal 3 tekens (geen bytes) worden opgeslagen.

en als we proberen te INSERT, lukt het:

 INSERT INTO x( 
                first_two_letters) 
        VALUES (U&'\0633\0631');

Uit de pgdump-documentatie je kunt INSERT in plaats van COPY door de --inserts optie te gebruiken

Probeer dit in plaats daarvan te gebruiken voor Stap 1:

pg_dump -U postgres -t OldSchema."TableToCopy" --inserts OldDatabase > Table.sql

Ik heb ook geprobeerd om van een tabel naar een bestand te KOPIREN en COPY te gebruiken om te importeren en voor mij werkt het.

Weet u zeker dat de codering van uw client- en serverdatabase UTF8 is?

Exporteer eerst de tabel met de naam "x" van schema "public" op database "test" naar een SQL-bestand met platte tekst:

pg_dump -U postgres -t public."x" test > x.sql

waarmee het x.sql-bestand wordt gemaakt dat het volgende bevat:

--
-- PostgreSQL database dump
--
SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: x; Type: TABLE; Schema: public; Owner: postgres; Tablespace: 
--

CREATE TABLE x (
    first_two_letters character(3)
);


ALTER TABLE public.x OWNER TO postgres;

--
-- Data for Name: x; Type: TABLE DATA; Schema: public; Owner: postgres
--

COPY x (first_two_letters) FROM stdin;
سر 
\.


--
-- PostgreSQL database dump complete
--

Ten tweede, importeer met:
psql -U postgres -d test -f x.sql



  1. Bepaal Oracle null ==null

  2. Operand type clash:int is incompatibel met datum + De INSERT-instructie is in strijd met de FOREIGN KEY-beperking

  3. Hoe Oracle Clob bij te werken met behulp van JDBC

  4. Kolomtelling komt niet overeen met waardetelling in rij 1 JAVA mysql