Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ GaussDB(DWS)/ Preguntas frecuentes/ Importación y exportación de datos/ ¿Cómo puedo implementar la importación de tolerancia a fallos entre diferentes bibliotecas de codificación
Actualización más reciente 2023-10-12 GMT+08:00

¿Cómo puedo implementar la importación de tolerancia a fallos entre diferentes bibliotecas de codificación

Para importar datos de la base de datos A (UTF8) a la base de datos B (GBK), puede haber un error de falta de coincidencia de conjunto de caracteres que hace que la importación de datos falle.

Para importar una pequeña cantidad de datos, ejecute el comando \COPY. El procedimiento es el siguiente:

  1. Crear las bases de datos A y B. El formato de codificación de la base de datos A es UTF8, y el de la base de datos B es GBK.

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

  2. Ver la lista de la base de datos. Puede ver las bases de datos creadas A y B.

     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. Cambie a la base de datos A e introduzca la contraseña de usuario. Cree una tabla denominada test01 e inserte datos en la tabla.

     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. Ejecute el comando \COPY para exportar datos de la biblioteca UTF8 en formato Unicode al archivo test01.dat.

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

  5. Cambie a la base de datos B y cree una tabla con el mismo nombre 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. Ejecute el comando \COPY para importar el archivo test01.dat a la base de datos B.

    1
    \copy test01 from '/opt/test01.dat' with (ENCODING 'Unicode' ,COMPATIBLE_ILLEGAL_CHARS 'true');
    
    • El parámetro de tolerancia a errores COMPATIBLE_ILLEGAL_CHARS especifica que se toleran caracteres no válidos durante la importación de datos. Los caracteres no válidos se convierten y, a continuación, se importan a la base de datos. No se muestra ningún mensaje de error. La importación no se interrumpe.
    • El formato BINARY no es compatible. Cuando se importan datos de dicho formato, se producirá el error "cannot specify bulkload compatibility options in BINARY mode" (no se pueden especificar opciones de compatibilidad de carga masiva en modo BINARY).
    • El parámetro solo es válido para la importación de datos mediante la opción COPY FROM.

  7. Ver datos en la tabla test01 de la base de datos 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. Después de realizar las operaciones anteriores, los datos se importan de la base de datos A (UTF8) a la base de datos B (GBK).