PostgreSQL CSV 导入导出教程
批量数据交换用 COPY:服务端 COPY 读写服务器文件(需要超级用户或角色权限),psql 的 \copy 读写客户端文件(日常更常用)。
本篇内容
- COPY 导入 CSV(服务端)
- \copy 导入导出(客户端)
- 表导出为 CSV
- 常见选项:HEADER / DELIMITER / NULL / 编码
导入 CSV
-- 服务端 COPY:文件路径相对于服务器数据目录,需要 pg_read_server_files 权限
COPY users (name, email, age)
FROM '/var/lib/postgresql/data/users.csv'
WITH (FORMAT csv, HEADER true, NULL '');
-- psql 客户端命令:文件路径相对于你本地 shell 的当前目录
\copy users (name, email, age) FROM 'users.csv' WITH (FORMAT csv, HEADER true)
导出 CSV
-- 服务端导出
COPY users TO '/tmp/users.csv' WITH (FORMAT csv, HEADER true);
-- 客户端导出(本地直接拿到文件)
\copy (SELECT id, name, email FROM users WHERE status = 1) TO 'active_users.csv' WITH (FORMAT csv, HEADER true)
待补充(TODO)
- 补充:导入失败的部分提交与错误行定位(LOG ERRORS)
- 补充:大文件导入的性能手段(先删索引/约束、结束后重建、调 maintenance_work_mem)
- 补充:字段内含逗号/引号/换行的转义规则
- 补充:其他格式(text / binary)与程序化导入(JDBC COPY API)