25人参与 • 2025-05-19 • MsSqlserver
postgresql 的 copy 命令是高效数据导入导出的核心工具,性能远超常规 insert 语句。以下是 copy 命令的深度解析:
命令类型 | 语法示例 | 执行位置 | 文件访问权限 |
---|---|---|---|
服务器端copy | copy table from '/path/file.csv'; | 数据库服务器 | 需要postgres系统用户权限 |
客户端copy | \copy table from 'file.csv'; | 客户端机器 | 使用客户端用户权限 |
功能 | copy from | copy to |
---|---|---|
数据加载速度 | 每秒万行级 | 每秒万行级 |
事务处理 | 单事务操作 | 单事务操作 |
二进制支持 | 是 | 是 |
错误处理 | 可跳过错误行 | - |
-- 导入时转换数据类型 copy users(id, name, reg_date) from '/data/users.csv' with (format csv, header, delimiter '|', null 'null', force_not_null (id, name), encoding 'utf8');
-- 导出查询结果 copy (select * from orders where order_date > '2025-01-01') to '/data/recent_orders.csv' with (format csv, header);
# 使用并行加载(拆分文件后) for i in {1..4}; do psql -c "copy large_table from '/data/part$i.csv' with (format csv)" & done wait
参数 | 推荐值 | 影响 |
---|---|---|
maintenance_work_mem | 1gb+ | 提高导入排序效率 |
max_wal_size | 4gb+ | 减少wal检查点 |
synchronous_commit | off | 禁用同步提交加速导入 |
-- 创建错误日志表 create table import_errors ( line_num integer, error_msg text, raw_data text ); -- 带错误记录的导入 begin; create temp table temp_import (like target_table); copy temp_import from '/data/source.csv' with (format csv, header); insert into target_table select * from temp_import on conflict do nothing; insert into import_errors select pg_copy_log(); commit;
# 导出二进制数据 pg_dump -t table_name -fc -f output.dump dbname # 二进制文件转换 pg_restore -l output.dump > output.list
-- 查看copy操作历史 select query, duration from pg_stat_statements where query like 'copy%' order by duration desc; -- 检查导入进度(postgresql 14+) select pid, query, pg_stat_get_progress_info('copy') from pg_stat_activity where backend_type = 'client backend';
copy命令是postgresql数据迁移的核心工具,掌握其高级用法可以显著提升etl效率。对于tb级数据迁移,建议:
更详细内容请查看官方文档:
https://www.postgresql.org/docs/17/sql-copy.html
谨记:心存敬畏,行有所止。
到此这篇关于postgresql 的 copy 命令的文章就介绍到这了,更多相关postgresql copy 命令内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论