PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Не може да се копира таблица в друга база данни с pg_dump

Опитах се да създам база данни с Encoding:UTF8 с таблица и да вмъкна двата UTF-8 кодирани знака, които командата COPY се опитва да вмъкне и работи, когато използва 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 ('سر');

Според http://rishida.net/tools/conversion/ за неуспешното COPY кодовите точки на Unicode са:

които са два знака , което означава, че трябва да можете да ги съхранявате в колона, дефинирана като character(3), която съхранява низове с дължина до 3 знака (не байта).

и ако се опитаме да INSERT, то успява:

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

От документацията за pgdump можете да ВМЪКНЕТЕ вместо КОПИРАТЕ, като използвате опцията --inserts

Опитайте да използвате това вместо това за стъпка 1:

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

Също така се опитах да КОПИРАМ от таблица във файл и да използвам COPY за импортиране и при мен работи.

Сигурни ли сте, че кодирането на вашата клиентска и сървърна база данни е UTF8?

Първо, експортирайте таблицата с име "x" от схема "public" на база данни "test" в обикновен текстов SQL файл:

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

което създава файла x.sql, който съдържа:

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

Второ, импортирайте с:
psql -U postgres -d test -f x.sql



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Проблеми с паралелността при извличане на идентификатори на нововмъкнати редове с ibatis

  2. SQLalchemy не извършва промени при задаване на роля

  3. Извличане на най-често срещаните ключови думи от tsvector колона

  4. Как PostgreSQL налага ограничението UNIQUE / какъв тип индекс използва?

  5. разгънете postgresql масива в редове