

# Usar o comando COPY com o Aurora PostgreSQL Limitless Database
<a name="limitless-load.copy"></a>

É possível usar a funcionalidade [\$1copy](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-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
<a name="limitless-load.copy-to"></a>

O Aurora PostgreSQL Limitless Database é compatível com a funcionalidade [\$1copy](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-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](https://www.postgresql.org/docs/current/sql-copy.html) 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.
<a name="limitless-load.copy-split"></a>

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
<a name="limitless-load.copy-from"></a>

É possível usar o comando [\$1copy](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-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;
```