在 Aurora PostgreSQL Limitless Database 中使用 COPY 命令
您可以使用 psql
实用程序中的 \copy
使用 COPY 命令将数据加载到 Aurora PostgreSQL Limitless Database
Aurora PostgreSQL Limitless Database 与用于导入数据的 psql
实用程序中的 \copy
与 Aurora PostgreSQL 一样,在 Limitless Database 中,不支持以下操作:
-
从 SSH 直接访问数据库实例 – 您无法将数据文件(例如 .csv 格式的文件)复制到数据库实例主机并从该文件运行
COPY
。 -
在数据库实例上使用本地文件 – 使用
COPY ... FROM STDIN
和COPY ... TO STDOUT
。
PostgreSQL 中的 COPY
命令具有处理本地文件 (FROM/TO
) 和使用客户端与服务器之间的连接传输数据的选项 (STDIN/STDOUT
)。有关更多信息,请参阅 PostgreSQL 文档中的 COPY
PostgreSQL psql
实用程序中的 \copy
命令适用于运行 psql
客户端的计算机上的本地文件。它会在您连接到的远程(例如,Limitless Database)服务器上调用相应的 COPY ... FROM STDIN
或 COPY ... FROM STDOUT
命令。它从本地文件向 STDIN
读取数据,或从 STDOUT
向本地文件写入数据。
将数据拆分为多个文件
数据存储在 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 数据复制到文件
您可以使用 \copy
postgres_limitless=> \copy test_table TO '/tmp/test_table.csv' DELIMITER ',' CSV HEADER;