Usar o comando COPY com o Aurora PostgreSQL Limitless Database - Amazon Aurora

Usar o comando COPY com o Aurora PostgreSQL Limitless Database

É possível usar a funcionalidade \copy no utilitário psql para importar e exportar dados do Aurora PostgreSQL Limitless Database

Usar o comando COPY para carregar dados no Aurora PostgreSQL Limitless Database

O Aurora PostgreSQL Limitless Database é compatível com a funcionalidade \copy no utilitário psql para importar dados.

No Limitless Database, assim como no Aurora PostgreSQL, não há compatibilidade com o seguinte:

  • Acesso SSH direto às instâncias de banco de dados: não é possível copiar um arquivo de dados (como no formato .csv) para o host da instância de banco de dados e executar COPY a partir do arquivo.

  • Usar arquivos locais na instância de banco de dados: use COPY ... FROM STDIN e COPY ... TO STDOUT.

O comando COPY no PostgreSQL tem opções para trabalhar com arquivos locais (FROM/TO) e transmitir dados usando uma conexão entre o cliente e o servidor (STDIN/STDOUT). Para obter mais informações, consulte COPY na documentação do PostgreSQL.

O comando \copy no utilitário psql do PostgreSQL funciona com arquivos locais no computador em que você executa o cliente psql. Ele invoca o respectivo comando COPY ... FROM STDIN ou COPY ... FROM STDOUT no servidor remoto (por exemplo, Limitless Database) ao qual você se conecta. Ele lê os dados do arquivo local para STDIN ou grava nele a partir de STDOUT.

Dividir dados em vários arquivos.

Os dados são armazenados em vários fragmentos no Aurora PostgreSQL Limitless Database. Para acelerar o carregamento de dados usando \copy, é possível dividir os dados em vários arquivos. Em seguida, importe de forma independente para cada arquivo de dados executando comandos \copy separados em paralelo.

Por exemplo, você tem um arquivo de dados de entrada no formato CSV com 3 milhões de linhas para importar. Você pode dividir o arquivo em partes, cada uma contendo 200.000 linhas (15 partes):

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

Isso resulta em arquivos data_00.csv a data_14.csv. Em seguida, é possível importar dados usando 15 comandos \copy paralelos, por exemplo:

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

Usando essa técnica, a mesma quantidade de dados é importada aproximadamente 10 vezes mais rápido do que usando um único comando \copy.

Usar o comando COPY para copiar dados do Limitless Database para um arquivo

É possível usar o comando \copy para copiar dados de uma tabela ilimitada para um arquivo, conforme mostrado no seguinte exemplo:

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