

# Aurora PostgreSQL Limitless Database での COPY コマンドの使用
<a name="limitless-load.copy"></a>

`psql` ユーティリティの [\$1copy](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-COPY) 機能を使用して、Aurora PostgreSQL Limitless Database との間でデータをインポートおよびエクスポートできます。

## COPY コマンドを使用して Aurora PostgreSQL Limitless Database にデータをロードする
<a name="limitless-load.copy-to"></a>

Aurora PostgreSQL Limitless Database は、データをインポートするための `psql` ユーティリティの [\$1copy](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-COPY) 機能と互換性があります。

Aurora PostgreSQL と同様に、Limitless Database では以下はサポートされていません。
+ DB インスタンスへの直接 SSH アクセス – データファイル (.csv 形式など) を DB インスタンスホストにコピーして、ファイルから `COPY` を実行することはできません。
+ DB インスタンスでのローカルファイルの使用 – `COPY ... FROM STDIN` と `COPY ... TO STDOUT` を使用します。

PostgreSQL の `COPY` コマンドには、ローカルファイル (`FROM/TO`) を操作し、クライアントとサーバー間の接続 (`STDIN/STDOUT`) を使用してデータを送信するためのオプションがあります。詳細については、PostgreSQL ドキュメントの「[COPY](https://www.postgresql.org/docs/current/sql-copy.html)」を参照してください。

PostgreSQL `psql` ユーティリティの `\copy` コマンドは、`psql` クライアントを実行するコンピュータ上のローカルファイルで動作します。接続先のリモート (Limitless Database など) サーバーで、それぞれの `COPY ... FROM STDIN` または `COPY ... FROM STDOUT` コマンドを呼び出します。ローカルファイルから `STDIN` にデータを読み取るか、`STDOUT` から書き込みます。

### データを複数のファイルに分割する
<a name="limitless-load.copy-split"></a>

データは Aurora PostgreSQL Limitless Database の複数のシャードに保存されます。`\copy` を使用してデータのロードを高速化するには、データを複数のファイルに分割できます。次に、個別の `\copy` コマンドを並行して実行して、データファイルごとに個別にインポートします。

例えば、CSV 形式の入力データファイルがあり、インポートする行が 300 万行あるとします。このファイルを 20 万行ずつ含むチャンク (15 チャンク) に分割できます。

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

これにより、`data_14.csv` を通じてファイル `data_00.csv` が作成されます。その後、15 の並列 `\copy` コマンドを使用してデータをインポートできます。次に例を示します。

```
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
```

この手法を使用すると、1 つの `\copy` コマンドを使用する場合と同じ量のデータが約 10 倍速くインポートされます。

## COPY コマンドを使用して Limitless Database データをファイルにコピーする
<a name="limitless-load.copy-from"></a>

次の例に示すように、[\$1copy](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-COPY) コマンドを使用して、無制限のテーブルからファイルにデータをコピーできます。

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