PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Tidak dapat menyalin tabel ke database lain dengan pg_dump

Saya telah mencoba membuat database dengan Encoding:UTF8 dengan tabel dan memasukkan dua karakter yang disandikan UTF-8 yang coba dimasukkan perintah COPY dan berfungsi saat menggunakan 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 ('سر');

Menurut http://rishida.net/tools/conversion/ untuk COPY yang gagal, poin kode Unicode adalah:

yang merupakan dua karakter , yang berarti Anda harus dapat menyimpannya dalam kolom yang didefinisikan sebagai character(3), yang menyimpan string hingga 3 karakter (bukan byte).

dan jika kita coba INSERT, berhasil:

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

Dari dokumentasi pgdump Anda dapat INSERT daripada COPY dengan menggunakan opsi --inserts

Coba gunakan ini sebagai gantinya untuk Langkah 1:

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

Saya juga mencoba COPY dari tabel ke file dan menggunakan COPY untuk mengimpor dan bagi saya itu berhasil.

Apakah Anda yakin penyandian basis data klien dan server Anda adalah UTF8?

Pertama, ekspor tabel bernama "x" dari skema "publik" pada database "test" ke file SQL teks biasa:

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

yang membuat file x.sql yang berisi:

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

Kedua, impor dengan:
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. Menginstal permata pg; KESALAHAN:Gagal membuat ekstensi asli permata

  2. Bagaimana cara merender hasil postgresql di ejs menggunakan node pg?

  3. Entah bagaimana melakukan `where booleanvalue=false` pada Sql Server dan PostgreSQL?

  4. Bagaimana cara memodelkan kluster failover PostgreSQL dengan Docker/Kubernetes?

  5. Jalankan kueri dengan LIMIT/OFFSET dan dapatkan juga jumlah total baris