Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ GaussDB(DWS)/ Perguntas frequentes/ Importação e exportação de dados/ Como implementar a importação de tolerância a falhas entre diferentes bibliotecas de codificação
Atualizado em 2024-05-09 GMT+08:00

Como implementar a importação de tolerância a falhas entre diferentes bibliotecas de codificação

Para importar dados do banco de dados A (UTF8) para o banco de dados B (GBK), pode haver um erro de incompatibilidade de conjunto de caracteres que faz com que a importação de dados falhe.

Para importar uma pequena quantidade de dados, execute o comando \COPY. O procedimento é o seguinte:

  1. Crie bancos de dados A e B. O formato de codificação do banco de dados A é UTF8 e o do banco de dados B é GBK.

    1
    2
    postgres=> CREATE DATABASE A ENCODING 'UTF8' template = template0;
    postgres=> CREATE DATABASE B ENCODING 'GBK' template = template0;
    

  2. Exiba a lista do banco de dados. Você pode visualizar os bancos de dados A e B criados.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    postgres=> \l
                               List of databases
       Name    |  Owner  | Encoding  | Collate | Ctype | Access privileges
    -----------+---------+-----------+---------+-------+-------------------
     a         | dbadmin | UTF8      | C       | C     |
     b         | dbadmin | GBK       | C       | C     |
     gaussdb   | Ruby    | SQL_ASCII | C       | C     |
     postgres  | Ruby    | SQL_ASCII | C       | C     |
     template0 | Ruby    | SQL_ASCII | C       | C     | =c/Ruby          +
               |         |           |         |       | Ruby=CTc/Ruby
     template1 | Ruby    | SQL_ASCII | C       | C     | =c/Ruby          +
               |         |           |         |       | Ruby=CTc/Ruby
     xiaodi    | dbadmin | UTF8      | C       | C     |
    (7 rows)
    

  3. Alterne para o banco de dados A e digite a senha do usuário. Crie uma tabela chamada test01 e insira os dados na tabela.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    postgres=> \c a
    Password for user dbadmin:
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, bits: 128)
    You are now connected to database "a" as user "dbadmin".
    
    a=> CREATE TABLE test01
     (
         c_customer_sk             integer,
         c_customer_id             char(5),
         c_first_name              char(6),
         c_last_name               char(8)
     )
     with (orientation = column,compression=middle)
     distribute by hash (c_last_name);
    CREATE TABLE
    a=> INSERT INTO test01(c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', 'Grace');
    INSERT 0 1
    a=> INSERT INTO test01 VALUES (456, 'good');
    INSERT 0 1
    

  4. Execute o comando \COPY para exportar dados da biblioteca UTF8 no formato Unicode para o arquivo test01.dat.

    1
    \copy test01 to '/opt/test01.dat' with (ENCODING 'Unicode');
    

  5. Mude para o banco de dados B e crie uma tabela com o mesmo nome test01.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    a=> \c b
    Password for user dbadmin:
    SSL connection (protocol: TLSv1.3, cipher: TLS_AES_128_GCM_SHA256, bits: 128)
    You are now connected to database "b" as user "dbadmin".
    
    b=> CREATE TABLE test01
     (
         c_customer_sk             integer,
         c_customer_id             char(5),
         c_first_name              char(6),
         c_last_name               char(8)
     )
     with (orientation = column,compression=middle)
     distribute by hash (c_last_name);
    

  6. Execute o comando \COPY para importar o arquivo test01.dat para o banco de dados B.

    1
    \copy test01 from '/opt/test01.dat' with (ENCODING 'Unicode' ,COMPATIBLE_ILLEGAL_CHARS 'true');
    
    • O parâmetro de tolerância de erro COMPATIBLE_ILLEGAL_CHARS especifica que caracteres inválidos são tolerados durante a importação de dados. Caracteres inválidos são convertidos e, em seguida, importados para o banco de dados. Nenhuma mensagem de erro é exibida. A importação não é interrompida.
    • O formato BINARY não é suportado. Quando os dados desse formato são importados, o erro "cannot specify bulkload compatibility options in BINARY mode" ocorrerá.
    • O parâmetro é válido somente para importação de dados usando a opção COPY FROM.

  7. Veja os dados na tabela test01 no banco de dados B.

    1
    2
    3
    4
    5
    6
    b=> select * from test01;
     c_customer_sk | c_customer_id | c_first_name | c_last_name
    ---------------+---------------+--------------+-------------
              3769 | hello         | Grace        |
               456 | good          |              |
    (2 rows)
    

  8. Depois que as operações anteriores são executadas, os dados são importados do banco de dados A (UTF8) para o banco de dados B (GBK).