sql >> データベース >  >> RDS >> PostgreSQL

pg_dumpを使用してテーブルを別のデータベースにコピーできません

    Encoding:UTF8 with tableを使用してデータベースを作成し、COPYコマンドが挿入しようとしている2つのUTF-8エンコード文字を挿入しようとしましたが、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コードポイントは次のとおりです。

    2文字です 、つまり、最大3文字(バイトではない)の長さの文字列を格納するcharacter(3)として定義された列にそれらを格納できる必要があります。

    INSERTを実行しようとすると、成功します:

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

    pgdumpのドキュメント から --insertsオプションを使用すると、COPYの代わりにINSERTを実行できます

    ステップ1の代わりにこれを使用してみてください:

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

    また、テーブルからファイルにCOPYを実行し、COPYを使用してインポートしようとしましたが、私にとっては機能します。

    クライアントとサーバーのデータベースエンコーディングがUTF8であると確信していますか?

    まず、データベース「test」のスキーマ「public」からプレーンテキストのSQLファイルに「x」という名前のテーブルをエクスポートします。

    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. データベース列に複数のアイテムを保存するにはどうすればよいですか?

    2. 画面にサムネイルを出力できません左上に少し壊れた画像があるきれいな白い画面が表示されます

    3. PHP/MySQLでのファイルのダウンロード時間

    4. EntityFrameworkFluent構文またはインライン構文を使用した再帰CTEの記述