Uso del comando COPY con Base de datos ilimitada de Aurora PostgreSQL - Amazon Aurora

Uso del comando COPY con Base de datos ilimitada de Aurora PostgreSQL

Puede utilizar la funcionalidad \copy de la utilidad psql para importar y exportar datos desde Base de datos ilimitada de Aurora PostgreSQL.

Uso del comando COPY para cargar datos en Base de datos ilimitada de Aurora PostgreSQL

Base de datos ilimitada de Aurora PostgreSQL admite la funcionalidad \copy de la utilidad psql para importar datos.

En Base de datos ilimitada y en Aurora PostgreSQL no se admite lo siguiente:

  • Acceso SSH directo a las instancias de base de datos: no puede copiar un archivo de datos (por ejemplo, en formato .csv) al host de la instancia de base de datos y ejecutar COPY desde el archivo.

  • Uso de archivos locales en la instancia de base de datos: utilice COPY ... FROM STDIN y COPY ... TO STDOUT.

El comando COPY en PostgreSQL tiene opciones para trabajar con archivos locales (FROM/TO) y transmitir datos mediante una conexión entre el cliente y el servidor (STDIN/STDOUT). Para obtener más información, consulte COPY en la documentación de PostgreSQL.

El comando \copy de la utilidad psql de PostgreSQL funciona con los archivos locales del equipo en el que ejecuta el cliente psql. Este invoca el comando COPY ... FROM STDIN o COPY ... FROM STDOUT correspondiente en el servidor remoto (por ejemplo, Base de datos ilimitada) al que se conecte. Lee los datos del archivo local en STDIN o escribe en él desde STDOUT.

Distribución de los datos en distintos archivos

Los datos se almacenan en varias particiones en Base de datos ilimitada de Aurora PostgreSQL. Para acelerar la carga de datos mediante \copy, puede dividir los datos en varios archivos. A continuación, importe cada archivo de datos de forma independiente ejecutando comandos \copy separados en paralelo.

Por ejemplo, tiene un archivo de datos de entrada en formato CSV con tres millones de filas para importar. Puede dividir el archivo en fragmentos que contengan 200 000 filas (quince fragmentos) cada uno:

split -l200000 data.csv data_ --additional-suffix=.csv -d

Esto da como resultado archivos desde data_00.csv a data_14.csv. A continuación, puede importar datos con quince comandos \copy paralelos, por ejemplo:

psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table from '/tmp/data_00.csv';" postgres_limitless & psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_01.csv';" postgres_limitless & ... psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_13.csv';" postgres_limitless & psql -h dbcluster.limitless-111122223333.aws-region.rds.amazonaws.com -U username -c "\copy test_table FROM '/tmp/data_14.csv';" postgres_limitless

Con esta técnica, se importa la misma cantidad de datos aproximadamente diez veces más rápido que con un solo comando \copy.

Uso del comando COPY para copiar datos de Base de datos ilimitada en un archivo

Puede usar el comando \copy para copiar datos de una tabla ilimitada en un archivo, tal como se muestra en el siguiente ejemplo:

postgres_limitless=> \copy test_table TO '/tmp/test_table.csv' DELIMITER ',' CSV HEADER;