

# 在 Aurora PostgreSQL Limitless Database 中使用 COPY 命令
<a name="limitless-load.copy"></a>

您可以使用 `psql` 实用程序中的 [\\copy](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` 实用程序中的 [\\copy](https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMANDS-COPY) 功能兼容。

与 Aurora PostgreSQL 一样，在 Limitless Database 中，不支持以下操作：
+ 从 SSH 直接访问数据库实例 – 您无法将数据文件（例如 .csv 格式的文件）复制到数据库实例主机并从该文件运行 `COPY`。
+ 在数据库实例上使用本地文件 – 使用 `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 万行需要导入。您可以将文件拆分成多个块，每个块容纳 200,000 行（15 个块）：

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

这样就会生成 `data_00.csv` 至 `data_14.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
```

使用这种技术，导入相同数量数据的速度大约是使用单个 `\copy` 命令的 10 倍。

## 使用 COPY 命令将 Limitless Database 数据复制到文件
<a name="limitless-load.copy-from"></a>

您可以使用 [\\copy](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;
```