PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Không thể sao chép bảng sang cơ sở dữ liệu khác với pg_dump

Tôi đã cố gắng tạo cơ sở dữ liệu với Mã hóa:UTF8 với một bảng và chèn hai ký tự được mã hóa UTF-8 mà lệnh COPY đang cố chèn và nó hoạt động khi sử dụng 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 ('سر');

Theo http://rishida.net/tools/conversion/ đối với việc SAO CHÉP không thành công, các điểm mã Unicode là:

hai ký tự , có nghĩa là bạn có thể lưu trữ chúng trong một cột được xác định là ký tự (3), cột này lưu trữ các chuỗi có độ dài tối đa 3 ký tự (không phải byte).

và nếu chúng tôi cố gắng CHÈN, nó sẽ thành công:

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

Từ tài liệu pgdump bạn có thể CHÈN thay vì SAO CHÉP bằng cách sử dụng tùy chọn --inserts

Hãy thử sử dụng điều này thay thế cho Bước 1:

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

Tôi cũng đã cố SAO CHÉP từ một bảng sang một tệp và sử dụng SAO CHÉP để nhập và đối với tôi, nó hoạt động.

Bạn có chắc chắn mã hóa cơ sở dữ liệu máy khách và máy chủ của mình là UTF8 không?

Đầu tiên, xuất bảng có tên "x" từ lược đồ "công khai" trên cơ sở dữ liệu "thử nghiệm" sang tệp SQL văn bản thuần túy:

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

tạo tệp x.sql chứa:

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

Thứ hai, nhập với:
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. Trường tăng dần với ràng buộc không null và duy nhất trong PostgreSQL 8.3

  2. Sau khi cập nhật lên macOS Big Sur, tôi không thể kết nối với cơ sở dữ liệu PostgreSQL của mình bằng MAMP

  3. java.lang.ClassNotFoundException:org.postgresql.Driver

  4. postgres:Truy vấn 'select * from user' thực sự đang làm gì?

  5. PostgreSQL:VACCUM FULL so với pg_dump và khôi phục