sql >> Databasteknik >  >> RDS >> PostgreSQL

Kan inte kopiera tabellen till en annan databas med pg_dump

Jag har försökt skapa en databas med kodning:UTF8 med en tabell och infoga de två UTF-8-kodade tecknen som COPY-kommandot försöker infoga och det fungerar när du använder 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 ('سر');

Enligt http://rishida.net/tools/conversion/ för den misslyckade COPY är Unicode-kodpunkterna:

som är två tecken , vilket innebär att du bör kunna lagra dem i en kolumn definierad som tecken(3), som lagrar strängar upp till 3 tecken (inte byte) i längd.

och om vi försöker INFOGA, lyckas det:

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

Från pgdump-dokumentationen du kan INSERT istället för COPY genom att använda --inserts alternativet

Försök att använda detta istället för steg 1:

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

Jag har också försökt KOPIERA från en tabell till en fil och använda COPY för att importera och för mig fungerar det.

Är du säker på att din klient- och serverdatabaskodning är UTF8?

Exportera först tabellen med namnet "x" från schemat "public" på databasen "test" till en vanlig SQL-fil:

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

som skapar x.sql-filen som innehåller:

--
-- 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
--

För det andra, importera med:
psql -U postgres -d test -f x.sql



  1. Räkna Antal konsekutiv förekomst av värden i tabell

  2. Hur man väljer data från en tabell från en annan databas i SQL Server?

  3. PHP isset() med flera parametrar

  4. sök efter flera ord med mysql MATCH MOT