COPY — 在檔案和表格之間複製資料
COPYtable_name
[ (column_name
[, ...] ) ] FROM { 'filename
' | PROGRAM 'command
' | STDIN } [ [ WITH ] (option
[, ...] ) ] [ WHEREcondition
] COPY {table_name
[ (column_name
[, ...] ) ] | (query
) } TO { 'filename
' | PROGRAM 'command
' | STDOUT } [ [ WITH ] (option
[, ...] ) ] whereoption
can be one of: FORMATformat_name
FREEZE [boolean
] DELIMITER 'delimiter_character
' NULL 'null_string
' DEFAULT 'default_string
' HEADER [boolean
| MATCH ] QUOTE 'quote_character
' ESCAPE 'escape_character
' FORCE_QUOTE { (column_name
[, ...] ) | * } FORCE_NOT_NULL { (column_name
[, ...] ) | * } FORCE_NULL { (column_name
[, ...] ) | * } ON_ERRORerror_action
ENCODING 'encoding_name
' LOG_VERBOSITYverbosity
COPY
在 PostgreSQL 表格和標準檔案系統檔案之間移動資料。COPY TO
將表格的內容複製到檔案,而 COPY FROM
將資料從檔案複製自表格(將資料附加到表格中已有的內容)。COPY TO
也可以複製 SELECT
查詢的結果。
如果指定了欄位清單,則 COPY TO
僅將指定欄位中的資料複製到檔案。對於 COPY FROM
,檔案中的每個欄位會依序插入到指定的欄位中。未在 COPY FROM
欄位清單中指定的表格欄位將收到它們的預設值。
使用檔案名稱的 COPY
指示 PostgreSQL 伺服器直接從檔案讀取或寫入檔案。該檔案必須可由 PostgreSQL 使用者(伺服器執行的使用者 ID)存取,且名稱必須從伺服器的角度指定。當指定 PROGRAM
時,伺服器會執行給定的指令,並從程式的標準輸出讀取,或寫入程式的標準輸入。該指令必須從伺服器的角度指定,並且可由 PostgreSQL 使用者執行。當指定 STDIN
或 STDOUT
時,資料會透過用戶端和伺服器之間的連線傳輸。
每個執行 COPY
的後端都將在 pg_stat_progress_copy
檢視表中報告其進度。詳情請參閱 第 27.4.3 節。
預設情況下,如果在處理過程中遇到錯誤,COPY
將會失敗。對於需要盡最大努力載入整個檔案的使用案例,可以使用 ON_ERROR
子句來指定一些其他的行為。
table_name
現有表格的名稱(可選擇包含結構描述限定詞)。
column_name
要複製的欄位的可選清單。如果未指定欄位清單,將複製表格的所有欄位,除了產生的欄位。
query
一個 SELECT
、VALUES
、INSERT
、UPDATE
、DELETE
或 MERGE
指令,其結果將被複製。請注意,查詢周圍需要括號。
對於 INSERT
、UPDATE
、DELETE
和 MERGE
查詢,必須提供 RETURNING
子句,且目標關係不能有條件規則、ALSO
規則,或擴展到多個語句的 INSTEAD
規則。
filename
輸入或輸出檔案的路徑名稱。輸入檔案名稱可以是絕對路徑或相對路徑,但輸出檔案名稱必須是絕對路徑。Windows 使用者可能需要使用 E''
字串,並將路徑名稱中使用的任何反斜線加倍。
PROGRAM
要執行的指令。在 COPY FROM
中,從指令的標準輸出讀取輸入,而在 COPY TO
中,輸出寫入到指令的標準輸入。
請注意,該指令是由 shell 叫用的,因此,如果您需要傳遞來自不受信任來源的任何引數,您必須小心地剝離或跳脫任何可能對 shell 具有特殊含義的特殊字元。為了安全起見,最好使用固定的指令字串,或至少避免在其中包含任何使用者輸入。
STDIN
指定輸入來自用戶端應用程式。
STDOUT
指定輸出傳送到用戶端應用程式。
boolean
指定是否應開啟或關閉所選選項。您可以寫入 TRUE
、ON
或 1
以啟用該選項,並寫入 FALSE
、OFF
或 0
以停用它。也可以省略 boolean
值,在這種情況下,假定為 TRUE
。
FORMAT
選擇要讀取或寫入的資料格式:text
、csv
(逗號分隔值) 或 binary
。預設值為 text
。
FREEZE
請求複製已凍結行的資料,就像執行 VACUUM FREEZE
指令後一樣。這旨在作為初始資料載入的效能選項。只有在目前子交易中已建立或截斷要載入的表格,沒有開啟的游標,且此交易沒有保留較舊的快照時,才會凍結行。目前無法在分割的表格上執行 COPY FREEZE
。此選項僅允許在 COPY FROM
中使用。
請注意,一旦資料成功載入,所有其他連線階段將能夠立即看到資料。這違反了 MVCC 可見性的正常規則,使用者應注意這可能導致的潛在問題。
DELIMITER(分隔符)
指定檔案中每一列(行)內分隔各個欄位的字元。預設情況下,文字格式為 Tab 字元,CSV
格式為逗號。這必須是單個單一位元組字元。使用 binary
格式時,不允許使用此選項。
NULL
指定代表空值的字串。預設情況下,文字格式為 \N
(反斜線-N),CSV
格式為不帶引號的空字串。在您不希望區分空值和空字串的情況下,您可能更喜歡即使在文字格式中使用空字串。使用 binary
格式時,不允許使用此選項。
當使用 COPY FROM
時,任何與此字串匹配的資料項目將被儲存為空值,因此您應該確保使用與 COPY TO
相同的字串。
DEFAULT(預設值)
指定代表預設值的字串。每次在輸入檔案中找到該字串時,將使用相應欄位的預設值。此選項僅允許在 COPY FROM
中使用,且僅當不使用 binary
格式時。
HEADER(標頭)
指定檔案包含一個標頭行,其中包含檔案中每個欄位的名稱。 在輸出時,第一行包含表格中的欄位名稱。 在輸入時,當此選項設定為 true
(或等效的布林值) 時,第一行將被丟棄。 如果此選項設定為 MATCH
,則標頭行中欄位的數量和名稱必須與表格的實際欄位名稱相同,依序排列;否則會引發錯誤。 使用 binary
格式時,不允許使用此選項。MATCH
選項僅對 COPY FROM
指令有效。
QUOTE(引號)
指定在引號括住資料值時要使用的引號字元。 預設值為雙引號。 這必須是單個單一位元組字元。 僅當使用 CSV
格式時,才允許使用此選項。
ESCAPE(跳脫字元)
指定應出現在與 QUOTE
值匹配的資料字元之前的字元。 預設值與 QUOTE
值相同 (因此,如果引號字元出現在資料中,則會重複兩次)。 這必須是單個單一位元組字元。 僅當使用 CSV
格式時,才允許使用此選項。
FORCE_QUOTE(強制引號)
強制對每個指定欄位中的所有非 NULL
值使用引號括住。NULL
輸出永遠不會被引號括住。 如果指定 *
,則所有欄位中的非 NULL
值都會被引號括住。 此選項僅允許在 COPY TO
中使用,且僅當使用 CSV
格式時。
FORCE_NOT_NULL(強制非空)
不要將指定欄位的值與空字串匹配。 在空字串為空的預設情況下,這表示即使未用引號括住,也會將空值讀取為零長度的字串而不是空值。 如果指定 *
,則該選項將套用到所有欄位。 此選項僅允許在 COPY FROM
中使用,且僅當使用 CSV
格式時。
FORCE_NULL(強制空值)
將指定欄位的值與空字串匹配,即使它已被引號括住,如果找到匹配項,則將該值設定為 NULL
。 在空字串為空的預設情況下,這會將帶引號的空字串轉換為 NULL。 如果指定 *
,則該選項將套用到所有欄位。 此選項僅允許在 COPY FROM
中使用,且僅當使用 CSV
格式時。
ON_ERROR(發生錯誤時)
指定在將欄位的輸入值轉換為其資料類型時遇到錯誤時的行為方式。 error_action
值為 stop
表示終止指令,而 ignore
表示丟棄輸入列並繼續處理下一列。 預設值為 stop
。
ignore
選項僅適用於當 FORMAT
為 text
或 csv
時的 COPY FROM
。
如果在 COPY FROM
結束時至少丟棄了一列,則會發出包含被忽略列數的 NOTICE
訊息。 當 LOG_VERBOSITY
選項設定為 verbose
時,會針對每個丟棄的列發出一個包含輸入檔案行和輸入轉換失敗的欄位名稱的 NOTICE
訊息。
ENCODING(編碼)
指定檔案以 encoding_name
編碼。 如果省略此選項,則使用目前的用戶端編碼。 請參閱下面的「注意事項」以取得更多詳細資訊。
LOG_VERBOSITY(日誌詳細程度)
指定 COPY
指令發出的訊息量: default
或 verbose
。 如果指定 verbose
,則會在處理期間發出其他訊息。
當 ON_ERROR
選項設定為 ignore
時,目前在 COPY FROM
指令中使用。
WHERE
可選的 WHERE
子句具有以下一般形式
WHERE condition
其中 condition
是任何評估結果為 boolean
類型的運算式。 任何不滿足此條件的列都不會插入到表格中。 如果將實際列值替換為任何變數引用時返回 true,則該列滿足該條件。
目前,不允許在 WHERE
運算式中使用子查詢,並且評估不會看到 COPY
本身所做的任何變更 (當運算式包含對 VOLATILE
函式的呼叫時,這很重要)。
成功完成後,COPY
指令會傳回以下形式的指令標籤
COPY count
此 count
為複製的列數。
只有在指令不是 COPY ... TO STDOUT
或等效的 psql 元指令 \copy ... to stdout
時,psql 才會列印此指令標籤。 這是為了防止將指令標籤與剛列印的資料混淆。
COPY TO
只能用於一般資料表,不能用於檢視表,且不會複製子資料表或子分割區的列。例如,COPY
複製的列與 table
TOSELECT * FROM ONLY
相同。語法 table
COPY (SELECT * FROM
可用於轉儲繼承階層、分割資料表或檢視表中的所有列。table
) TO ...
COPY FROM
可以用於一般、外部或分割資料表,或具有 INSTEAD OF INSERT
觸發器的檢視表。
您必須對 COPY TO
讀取其值的資料表擁有 SELECT 權限,以及對 COPY FROM
將值插入的資料表擁有 INSERT 權限。只要對指令中列出的欄位擁有欄位權限即可。
如果資料表啟用了列級安全,則相關的 SELECT
策略將應用於 COPY
陳述式。目前,對於具有列級安全的資料表,不支援 table
TOCOPY FROM
。請改用等效的 INSERT
陳述式。
COPY
指令中指定名稱的檔案由伺服器直接讀取或寫入,而不是由客戶端應用程式讀取或寫入。因此,它們必須位於或可由資料庫伺服器機器存取,而不是客戶端。它們必須可由 PostgreSQL 使用者(伺服器執行的使用者 ID)存取和讀取或寫入,而不是客戶端。同樣地,使用 PROGRAM
指定的指令會直接由伺服器執行,而不是由客戶端應用程式執行,且必須可由 PostgreSQL 使用者執行。COPY
指定檔案或指令僅允許資料庫超級使用者或被授予角色 pg_read_server_files
、pg_write_server_files
或 pg_execute_server_program
的使用者使用,因為它允許讀取或寫入伺服器有權存取的任何檔案或執行程式。
不要將 COPY
與 psql 指令 \copy
混淆。\copy
會呼叫 COPY FROM STDIN
或 COPY TO STDOUT
,然後在 psql 客戶端可存取的檔案中提取/儲存資料。因此,當使用 \copy
時,檔案可存取性和存取權限取決於客戶端而不是伺服器。
建議 COPY
中使用的檔名始終指定為絕對路徑。在 COPY TO
的情況下,伺服器會強制執行此操作,但對於 COPY FROM
,您可以選擇從相對路徑指定的檔案中讀取。該路徑將相對於伺服器進程的工作目錄(通常是叢集的資料目錄)進行解釋,而不是客戶端的工作目錄。
使用 PROGRAM
執行指令可能會受到作業系統存取控制機制(例如 SELinux)的限制。
COPY FROM
將會呼叫目標資料表上的任何觸發器和檢查約束。但是,它不會呼叫規則。
對於識別欄位,COPY FROM
指令將始終寫入輸入資料中提供的欄位值,就像 INSERT
選項 OVERRIDING SYSTEM VALUE
一樣。
COPY
的輸入和輸出會受到 DateStyle
的影響。為了確保可移植到可能使用非預設 DateStyle
設定的其他 PostgreSQL 安裝,在使用 COPY TO
之前,應將 DateStyle
設定為 ISO
。避免使用將 IntervalStyle
設定為 sql_standard
轉儲資料也是一個好主意,因為負的間隔值可能會被具有不同 IntervalStyle
設定的伺服器誤解。
輸入資料根據 ENCODING
選項或目前的客戶端編碼進行解釋,輸出資料以 ENCODING
或目前的客戶端編碼進行編碼,即使資料沒有通過客戶端,而是由伺服器直接讀取或寫入檔案。
COPY FROM
指令會在進行過程中將輸入列實際插入到資料表中。如果指令失敗,這些列將處於已刪除狀態;這些列將不可見,但仍會佔用磁碟空間。如果失敗發生在大型複製操作中,這可能會浪費大量的磁碟空間。應使用 VACUUM
來恢復浪費的空間。
FORCE_NULL
和 FORCE_NOT_NULL
可以同時用於同一欄位。這會導致將帶引號的 null 字串轉換為 null 值,並將未帶引號的 null 字串轉換為空字串。
當使用 text
格式時,讀取或寫入的資料是一個文字檔案,每行對應一個資料表列。列中的欄位由分隔符號字元分隔。欄位值本身是由輸出函數產生的字串,或可接受給每個屬性的資料類型的輸入函數。指定的 null 字串用於代替 null 的欄位。如果輸入檔案的任何行包含的欄位多於或少於預期,COPY FROM
將引發錯誤。
資料結尾可以用僅包含反斜線句點(\.
)的單行表示。從檔案讀取時,不需要資料結尾標記,因為檔案結尾可以很好地提供服務;只有在使用 3.0 之前的客戶端協定將資料複製到或從客戶端應用程式複製時才需要它。
反斜線字元(\
)可以用於 COPY
資料中,以引用可能被視為列或欄位分隔符號的資料字元。特別是,以下字元 必須 在它們作為欄位值的一部分出現時前面加上反斜線:反斜線本身、換行符號、歸位符號和目前的分隔符號字元。
指定的 null 字串由 COPY TO
發送,而不新增任何反斜線;相反地,COPY FROM
在移除反斜線之前,會將輸入與 null 字串進行比對。因此,諸如 \N
之類的 null 字串不會與實際資料值 \N
混淆(後者將表示為 \\N
)。
COPY FROM
會識別以下特殊反斜線序列
序列 | 代表 |
---|---|
\b |
退格 (ASCII 8) |
\f |
換頁 (ASCII 12) |
\n |
換行 (ASCII 10) |
\r |
歸位 (ASCII 13) |
\t |
Tab (ASCII 9) |
\v |
垂直 Tab (ASCII 11) |
\ digits |
反斜線後面加上一到三個八進位數字,指定具有該數字程式碼的位元組 |
\x digits |
反斜線 x 後面加上一到兩個十六進位數字,指定具有該數字程式碼的位元組 |
目前,COPY TO
永遠不會發出八進位或十六進位數字反斜線序列,但它確實對這些控制字元使用上面列出的其他序列。
未在上表中提及的任何其他帶反斜線的字元都將被視為代表它自己。但是,請注意不要不必要地新增反斜線,因為這可能會意外產生與資料結尾標記 (\.
) 或 null 字串 (預設為 \N
) 相符的字串。這些字串將在任何其他反斜線處理完成之前被識別。
強烈建議產生 COPY
資料的應用程式,將資料換行符號和歸位符號分別轉換為 \n
和 \r
序列。 目前,可以使用反斜線和歸位符號來表示資料歸位符號,並使用反斜線和換行符號來表示資料換行符號。 然而,這些表示方式在未來的版本中可能不被接受。 如果 COPY
檔案在不同的機器之間傳輸(例如,從 Unix 到 Windows 或反之亦然),它們也很容易損壞。
所有反斜線序列都會在編碼轉換後進行解釋。 以八進制和十六進制數字反斜線序列指定的位元組必須在資料庫編碼中形成有效的字元。
COPY TO
將以 Unix 風格的換行符號 (“\n
”) 終止每一行。 在 Microsoft Windows 上運行的伺服器會改為輸出歸位/換行 (“\r\n
”),但僅適用於 COPY
到伺服器檔案;為了跨平台的一致性,無論伺服器平台為何,COPY TO STDOUT
始終發送 “\n
”。COPY FROM
可以處理以換行符號、歸位符號或歸位/換行符號結尾的行。 為了降低由於未反斜線處理的換行符號或打算作為資料的歸位符號而導致錯誤的風險,如果輸入中的行尾符號不完全相同,COPY FROM
將會發出警告。
此格式選項用於匯入和匯出逗號分隔值 (CSV
) 檔案格式,該格式被許多其他程式(例如試算表)使用。 它產生並識別常見的 CSV
逸出機制,而不是 PostgreSQL 標準文字格式使用的逸出規則。
每條記錄中的值由 DELIMITER
字元分隔。 如果該值包含分隔符字元、QUOTE
字元、NULL
字串、歸位符號或換行符號,則整個值將以 QUOTE
字元作為前綴和後綴,並且在該值中出現的任何 QUOTE
字元或 ESCAPE
字元都會以逸出字元作為前綴。 您也可以使用 FORCE_QUOTE
在輸出特定欄位中非 NULL
值時強制加上引號。
CSV
格式沒有標準方法來區分 NULL
值和空字串。PostgreSQL 的 COPY
通過使用引號來處理此問題。NULL
作為 NULL
參數字串輸出,且不帶引號,而與 NULL
參數字串匹配的非 NULL
值則帶有引號。 例如,使用預設設定,NULL
被寫為不帶引號的空字串,而空字串資料值則寫為雙引號 (""
)。 讀取值遵循類似的規則。 您可以使用 FORCE_NOT_NULL
來防止特定欄位的 NULL
輸入比較。 您也可以使用 FORCE_NULL
將帶引號的 null 字串資料值轉換為 NULL
。
由於反斜線不是 CSV
格式中的特殊字元,因此 \。
(即資料結束標記)也可能作為資料值出現。 為避免任何誤解,作為一行中的單個條目出現的 \。
資料值在輸出時會自動加上引號,而在輸入時,如果加上引號,則不會被解釋為資料結束標記。 如果您正在載入另一個應用程式建立的檔案,該檔案具有單個未加引號的欄位,並且可能具有 \。
的值,您可能需要在輸入檔案中引用該值。
在 CSV
格式中,所有字元都很重要。 以空格或 DELIMITER
以外的任何字元包圍的帶引號的值將包含這些字元。 如果您從一個將 CSV
行用空格填充到某個固定寬度的系統匯入資料,這可能會導致錯誤。 如果出現這種情況,您可能需要在將資料匯入 PostgreSQL 之前預先處理 CSV
檔案以刪除尾隨空格。
CSV
格式既可以識別也可以產生包含嵌入式歸位符號和換行符號的帶引號值的 CSV
檔案。 因此,這些檔案不像文字格式檔案那樣嚴格地每行一個表格行。
許多程式會產生奇怪且偶爾會出現反常的 CSV
檔案,因此檔案格式更多的是一種慣例而不是標準。 因此,您可能會遇到一些無法使用此機制匯入的檔案,並且 COPY
可能會產生其他程式無法處理的檔案。
binary
格式選項會使所有資料以二進位格式而不是文字格式儲存/讀取。 它比文字和 CSV
格式快一些,但二進位格式的檔案在機器架構和 PostgreSQL 版本之間的移植性較差。 此外,二進位格式非常依賴資料類型; 例如,從 smallint
欄位輸出二進位資料並將其讀入 integer
欄位將不起作用,即使在文字格式中可以正常工作。
binary
檔案格式由檔案標頭、零個或多個包含行資料的元組以及檔案尾端組成。 標頭和資料以網路位元組順序排列。
7.4 之前的 PostgreSQL 版本使用不同的二進位檔案格式。
檔案標頭由 15 個位元組的固定欄位組成,後跟一個可變長度的標頭擴展區域。 固定欄位為
11 位元組序列 PGCOPY\n\377\r\n\0
— 請注意,零位元組是簽名的必要組成部分。 (該簽名的設計旨在方便識別已被非 8 位元乾淨傳輸損壞的檔案。 此簽名將被行尾轉換過濾器、丟棄的零位元組、丟棄的高位元或奇偶校驗變更所更改。)
32 位元整數位元遮罩,用於表示檔案格式的重要方面。 位元從 0(LSB)編號到 31(MSB)。 請注意,此欄位以網路位元組順序(最高有效位元優先)儲存,檔案格式中使用的所有整數欄位也是如此。 位元 16–31 保留用於表示重要的檔案格式問題; 如果讀取器在此範圍內發現設定了意外的位元,則應中止。 位元 0–15 保留用於表示向後相容的格式問題; 讀取器應簡單地忽略在此範圍內設定的任何意外位元。 目前僅定義了一個標記位元,其餘位元必須為零
如果為 1,則 OID 包含在資料中; 如果為 0,則不包含。 Oid 系統欄位在 PostgreSQL 中不再支援,但格式仍然包含該指示。
32 位元整數,標頭其餘部分的長度(以位元組為單位),不包括自身。 目前,此值為零,並且第一個元組緊隨其後。 未來對格式的變更可能會允許在標頭中存在其他資料。 讀取器應靜默地跳過它不知道如何處理的任何標頭擴展資料。
標頭擴展區域預計包含一系列自我識別的區塊。 標記欄位不打算告訴讀取器擴展區域中的內容。 標頭擴展內容的具體設計留待以後的版本。
此設計允許向後相容的標頭新增(新增標頭擴展區塊或設定低位元標記位元)和非向後相容的變更(設定高位元標記位元以指示此類變更,並根據需要將支援資料新增至擴展區域)。
每個資料列 (tuple) 都以一個 16 位元的整數開始,用來計數該資料列中的欄位數量。(目前,資料表中的所有資料列都會有相同的計數,但這不一定永遠都是如此。)接著,針對資料列中的每個欄位,會重複出現一個 32 位元的長度字組,後面跟著該長度所指定的欄位資料位元組。(長度字組本身不包含在長度內,並且可以為零。)作為一個特例,-1 表示 NULL 欄位值。在 NULL 的情況下,沒有值位元組。
欄位之間沒有對齊填充或任何其他額外資料。
目前,二進位格式檔案中的所有資料值都假設為二進位格式(格式代碼為一)。預計未來的擴展可能會新增一個標頭欄位,允許指定每個欄位的格式代碼。
要確定實際資料列資料的適當二進位格式,您應該參考 PostgreSQL 原始碼,尤其是每個欄位資料類型中的 *send
和 *recv
函數(通常這些函數位於原始碼發布的 src/backend/utils/adt/
目錄中)。
如果檔案中包含 OID,則 OID 欄位會緊接在欄位計數字組之後。它是一個普通的欄位,只是它不包含在欄位計數中。請注意,目前版本的 PostgreSQL 不支援 oid 系統欄位。
檔案結尾由一個包含 -1 的 16 位元整數字組組成。這很容易與資料列的欄位計數字組區分開來。
如果欄位計數字組既不是 -1 也不是預期的欄位數,讀取器應報告錯誤。這提供了一個額外的檢查,以防止以某種方式與資料失去同步。
以下範例使用垂直線 (|
) 作為欄位分隔符號,將資料表複製到客戶端
COPY country TO STDOUT (DELIMITER '|');
將資料從檔案複製到 country
資料表中
COPY country FROM '/usr1/proj/bray/sql/country_data';
僅將名稱以 'A' 開頭的國家複製到檔案中
COPY (SELECT * FROM country WHERE country_name LIKE 'A%') TO '/usr1/proj/bray/sql/a_list_countries.copy';
要複製到壓縮檔案,您可以透過外部壓縮程式將輸出導向
COPY country TO PROGRAM 'gzip > /usr1/proj/bray/sql/country_data.gz';
以下是一些適合從 STDIN
複製到資料表中的資料範例
AF AFGHANISTAN AL ALBANIA DZ ALGERIA ZM ZAMBIA ZW ZIMBABWE
請注意,每一行上的空白實際上是一個 Tab 字元。
以下是以二進位格式輸出的相同資料。資料是在透過 Unix 實用程式 od -c
篩選後顯示的。該資料表有三個欄位;第一個欄位的類型為 char(2)
,第二個欄位的類型為 text
,第三個欄位的類型為 integer
。所有列在第三個欄位中都有一個空值。
0000000 P G C O P Y \n 377 \r \n \0 \0 \0 \0 \0 \0 0000020 \0 \0 \0 \0 003 \0 \0 \0 002 A F \0 \0 \0 013 A 0000040 F G H A N I S T A N 377 377 377 377 \0 003 0000060 \0 \0 \0 002 A L \0 \0 \0 007 A L B A N I 0000100 A 377 377 377 377 \0 003 \0 \0 \0 002 D Z \0 \0 \0 0000120 007 A L G E R I A 377 377 377 377 \0 003 \0 \0 0000140 \0 002 Z M \0 \0 \0 006 Z A M B I A 377 377 0000160 377 377 \0 003 \0 \0 \0 002 Z W \0 \0 \0 \b Z I 0000200 M B A B W E 377 377 377 377 377 377
SQL 標準中沒有 COPY
陳述式。
以下語法在 PostgreSQL 9.0 版之前使用,並且仍然支援
COPYtable_name
[ (column_name
[, ...] ) ] FROM { 'filename
' | STDIN } [ [ WITH ] [ BINARY ] [ DELIMITER [ AS ] 'delimiter_character
' ] [ NULL [ AS ] 'null_string
' ] [ CSV [ HEADER ] [ QUOTE [ AS ] 'quote_character
' ] [ ESCAPE [ AS ] 'escape_character
' ] [ FORCE NOT NULLcolumn_name
[, ...] ] ] ] COPY {table_name
[ (column_name
[, ...] ) ] | (query
) } TO { 'filename
' | STDOUT } [ [ WITH ] [ BINARY ] [ DELIMITER [ AS ] 'delimiter_character
' ] [ NULL [ AS ] 'null_string
' ] [ CSV [ HEADER ] [ QUOTE [ AS ] 'quote_character
' ] [ ESCAPE [ AS ] 'escape_character
' ] [ FORCE QUOTE {column_name
[, ...] | * } ] ] ]
請注意,在此語法中,BINARY
和 CSV
被視為獨立的關鍵字,而不是 FORMAT
選項的參數。
以下語法在 PostgreSQL 7.3 版之前使用,並且仍然支援
COPY [ BINARY ]table_name
FROM { 'filename
' | STDIN } [ [USING] DELIMITERS 'delimiter_character
' ] [ WITH NULL AS 'null_string
' ] COPY [ BINARY ]table_name
TO { 'filename
' | STDOUT } [ [USING] DELIMITERS 'delimiter_character
' ] [ WITH NULL AS 'null_string
' ]
如果您在文件中發現任何不正確、與特定功能的使用體驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。