COPY
是一个用于将数据批量导入/导出到文件或(从 PostgreSQL 9.3 开始)程序的 DML 命令。
COPY
一直存在于 PostgreSQL 中。
限制
COPY
仅限于主机操作系统上运行 PostgreSQL 的操作系统用户允许的操作。
从 PostgreSQL 11 开始,COPY
可供超级用户和以下 预定义角色 的成员使用
pg_read_server_files
pg_write_server_files
pg_execute_server_program
在 PostgreSQL 10 及更早版本中,COPY
的使用仅限于超级用户。
进度报告
从 PostgreSQL 14 开始,进度报告视图 pg_stat_progress_copy
提供有关 COPY
操作进度的信息。
psql
psql
提供了 斜杠命令 \copy
,它允许对客户端系统执行 COPY 操作,克服了 SQL COPY
命令仅限于本地服务器的限制。
变更历史
开发中
- PostgreSQL 17
- PostgreSQL 16
- PostgreSQL 15
- PostgreSQL 14
- 通过改进的缓冲提高了性能(提交 0a0727cc)
- 通过
pg_stat_progress_copy
进行进度跟踪(提交 8a4f618e)
- PostgreSQL 12
- PostgreSQL 11
- PostgreSQL 10
COPY view FROM
现在可以插入到使用INSTEAD OF INSERT
触发器定义的视图中(提交 279c439c)
- PostgreSQL 9.6
COPY
现在可以复制INSERT
/UPDATE
/DELETE ... RETURNING
查询的输出(提交 92e38182)
- PostgreSQL 9.4
- PostgreSQL 9.3
- PostgreSQL 9.1
- 添加了
ENCODING
选项(提交 3cba8240)
- 添加了
- PostgreSQL 8.2
- 添加了
COPY (SELECT ...) TO ...
语法(提交 85188ab8)
- 添加了
- PostgreSQL 8.0
- 添加了
CSV
选项(提交 862b20b3)
- 添加了
- PostgreSQL 7.4
- PostgreSQL 7.3
- PostgreSQL 7.2
- PostgreSQL 7.1
- 二进制复制模式的新文件格式(提交 676cf18c)
- PostgreSQL 7.0
- PostgreSQL 6.3
- 报告失败时的行号(提交 deea69b9)
示例
COPY
的基本用法示例
postgres=# COPY foo FROM STDIN; Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself, or an EOF signal. >> 1 >> 2 >> 3 >> 4 >> \. COPY 4
参考文献
- PostgreSQL 文档: COPY
有用链接
- PostgreSQL COPY 命令 - 2023年6月 Shivayan Mukherjee / SQL Server Central 博客文章