Usar o comando COPY com o Aurora PostgreSQL Limitless Database
É possível usar a funcionalidade \copypsql
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 \copypsql
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
eCOPY ... 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
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
postgres_limitless=> \copy test_table TO '/tmp/test_table.csv' DELIMITER ',' CSV HEADER;