在 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;