COPY命令介紹
copy是postgresql提供的一個專門用于快速導入導出數據的命令,通常用于從文件(TXT、CSV等)或標準輸入輸出中讀取或寫入數據。適合批量導入導出數據,速度快。
默認情況下,如果在處理過程中遇到錯誤,COPY將失敗。
COPY只能用于表,不能用于視圖!!!
COPY導入數據
例如有一個users.csv的文件,文件內容如下:
username,email,created_at
john_doe,john@example.com,2025-05-01
alice,alice@example.com,2025-04-30
使用如下命令可以將此文件導入表:
COPY table_name FROM 'file_path' WITH (FORMAT csv);
COPY users (username, email, created_at) FROM '/path/to/users.csv' WITH (FORMAT csv, DELIMITER ',', HEADER, NULL 'null');
COPY導出數據
使用如下命令可以導出表數據到文件:
COPY table_name TO 'file_path' WITH (FORMAT csv);
COPY users TO '/path/to/users_export.csv' WITH (FORMAT csv, HEADER, NULL 'null');
- FORMAT csv:表示文件格式為csv
- HEADER:導入數據時,表示文件的第一行為列名,如果第一行為數據行,則設置為 HEADER false;導出數據時,要導出列名稱,設置為True,否則設置為false
- DELIMITER ‘,’ :指定文件分隔符為","
- NULL ‘null’ :在導入數據是遇到null字符串時,將其當做NULL值插入到表中。在導出數據時,遇見NULL值將被轉換為null字符串寫入文件
COPY 導入幾何數據
如果要導入幾何數據到表Geometry列,對于導入的數據有格式要求。具體的格式要求見文章最下面。
查看pg數據庫中Geometry列支持的隱式轉換規則
--查看隱式轉換規則
SELECT castsource::regtype, casttarget::regtype, castfunc::regproc, castcontext
FROM pg_cast
WHERE casttarget = 'geometry'::regtype;
可以看到pg數據庫支持隱式轉換,將text轉換為geometry,但是text必須是標準的可以識別為幾何的字符串,例如:SRID=4326;POINT(10 20),必須指定SRID,否則隱式轉換失敗,報錯: ERROR: Geometry SRID (0) does not