PostgreSQL copy 命令教程詳解
報文介紹PostgreSQL copy 命令,通過示例展示把查詢結果匯出到csv檔案,匯入資料檔案至postgresql。
1. copy命令介紹
copy命令用於在postgreSql表和標準檔案系統直接傳輸資料。copy命令讓PostgreSQL 伺服器直接讀寫檔案,因此檔案必須讓PostgreSQL 使用者能夠訪問到。該命令使用的檔案是資料庫伺服器直接讀寫的檔案,不是客戶端應用的檔案,因此必須位於伺服器本地或被直接訪問的檔案,而不是客戶端位置。
copy to
命令拷貝表內容至檔案,也可以拷貝select的查詢結果;也就說,如果select後面列出部分欄位,則copy to
命令僅拷貝指定欄位的結果至檔案。準備使用copy to
COPY (SELECT * FROM country) TO ‘list_countries.copy';
copy from
拷貝檔案的資料到資料表。當使用copy from
,檔案中的每個欄位被i順序插入特定欄位。如果該命令中的表的列引數未指定則獲取它們的預設值。使用copy from
命令的表必須授予insert許可權。
不要混淆copy命令和psql中的 \copy
。\copy
呼叫 COPY FROM STDIN 或 COPY TO STDOUT
,然後返回資料或儲存可以被psql客戶端訪問的檔案資料。因此,當使用\copy時,檔案的可訪問性和訪問許可權取決於客戶端,而不是伺服器。
2. copy命令示例
2.1 從Postgresql匯出表
我們能拷貝表至控制檯,並使用豎線(|)作為欄位直接的分隔符:
copy customers to stdout(delimiter '|')
拷貝表至檔案,使用空格作為欄位直接的分隔符:
COPY customers TO '/database/data/test_data.copy' (DELIMITER ' ');
2.2 匯入檔案至Postgresql表
傳入檔案至已經存在的表:
COPY customers FROM '/database/data/test_data.copy' (DELIMITER ' ');
2.3 匯出查詢結果至檔案
匯出查詢結果至檔案:
COPY (SELECT * FROM customers WHERE name LIKE 'A%') TO '/data/test_data.copy';
如果需要壓縮資料,使用下面命令:
COPY customers TO PROGRAM 'gzip > /data/test_data.copy.gz';
如果僅匯出2列,使用下面命令:
COPY customers(col,col2) TO '/data/test_data.copy' DELIMITER ' ';
如果需要匯出二進位制檔案:
copy customers to 'e:/data.dat' with binary;
匯出csv檔案:
copy customers to 'e:/data.csv' with csv;
csv檔案還有一些其他引數:
DELIMITER – 資料行中分割每個欄位的分隔符。csv檔案一般使用逗號.
HEADER – 指定csv檔案的標題,如果不需要標題行,可以忽略HEADER.
COPY country FROM '/data/test_data.copy' WITH delimiter ',' CSV HEADER;
指定編碼:
COPY country FROM '/data/test_data.copy' WITH delimiter ',' CSV HEADER encoding 'utf-8';
3. 總結
本文介紹PostgreSQL中的copy命令,並通過示例展示了不同的應用場景。使用COPY載入大量行總是比使用INSERT快,COPY會進行一次設定,並且每行的開銷都非常低,尤其是在不涉及觸發器的情況下。
到此這篇關於PostgreSQL copy 命令教程詳解的文章就介紹到這了,更多相關PostgreSQL copy 命令內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!