使用 COPY 命令搭配 Aurora PostgreSQL Limitless Database - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 COPY 命令搭配 Aurora PostgreSQL Limitless Database

您可以使用 psql 公用程式中的 \copy 功能,將資料匯入 Aurora PostgreSQL Limitless Database 並從中匯出資料

使用 COPY 命令將資料載入 Aurora PostgreSQL Limitless Database

Aurora PostgreSQL Limitless Database 與 psql 公用程式中的 \copy 功能相容,可用於匯入資料。

在 Limitless Database 中 (如同在 Aurora PostgreSQL 中),不支援下列項目:

  • 直接 SSH 存取資料庫執行個體:您無法將資料檔案 (例如 .csv 格式) 複製到資料庫執行個體主機,並從檔案執行 COPY

  • 在資料庫執行個體上使用本機檔案:使用 COPY ... FROM STDINCOPY ... TO STDOUT

PostgreSQL 中的 COPY 命令具有使用本機檔案 (FROM/TO) 以及使用用戶端與伺服器 (STDIN/STDOUT) 之間連線傳輸資料的選項。如需詳細資訊,請參閱 PostgreSQL 文件中的 COPY

PostgreSQL psql 公用程式中的 \copy 命令適用於執行 psql 用戶端所在電腦上的本機檔案。其會在您連線的遠端 (例如 Limitless Database) 伺服器上調用個別 COPY ... FROM STDINCOPY ... 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_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

使用此技術,與使用單一 \copy 命令相比,匯入相同數量的資料大約快 10 倍。

使用 COPY 命令將 Limitless Database 資料複製到檔案

如下列範例所示,您可以使用 \copy 命令,將資料從無限制資料表複製到檔案:

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