资讯专栏INFORMATION COLUMN

用 PostgreSQL 的 COPY 导入导出 CSV

FleyX / 2507人阅读

摘要:无意中看到了一篇讲数据批量导入的文章,才注意到的命令。的直接可以干这个事情,而且导出速度是非常快的。总结还有一些其他配置,比如把输入输出源指定成和命令,或者指定的等等。合理使用能大大提高效率。

TL;DR

无意中看到了一篇讲 数据批量导入 的文章,才注意到 PostgreSQL 的 COPY 命令。简而言之,它用来在文件和数据库之间复制数据,效率非常高,并且支持 CSV 。

导出 CSV

以前做类似的事情都是用程序语言写,比如用程序读取数据库的数据,然后用 CSV 模块写入文件,当数据量大的时候还要控制不要一次读太多,比如一次读 5000 条,处理完再读 5000 条之类。

PostgreSQL 的 COPY TO 直接可以干这个事情,而且导出速度是非常快的。下面例子是把 products 表导出成 CSV :

COPY products
TO "/path/to/output.csv"
WITH csv;

可以导出指定的属性:

COPY products (name, price)
TO "/path/to/output.csv"
WITH csv;

也可以配合查询语句,比如最常见的 SELECT

COPY (
  SELECT name, category_name
  FROM products
  LEFT JOIN categories ON categories.id = products.category_id
)
TO "/path/to/output.csv"
WITH csv;
导入 CSV

跟上面的导出差不多,只是把 TO 换成 FROM ,举例:

COPY products
FROM "/path/to/input.csv"
WITH csv;

这个命令做导入是非常高效的,在开头那篇博客作者的测试中,COPY 只花了 INSERT 方案 1/3 的时间,而后者还用 prepare statement 优化过。

总结

COPY 还有一些其他配置,比如把输入输出源指定成 STDIN/STDOUT 和 shell 命令,或者指定 CSV 的 header 等等。这里不再赘述。数据库也有很多细节可挖,有些简单却非常实用。合理使用能大大提高效率。

参考资料

Friends Don’t Let Friends Use Loops
PostgreSQL: COPY

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/17582.html

相关文章

  • PostgreSQL COPY 导入导出 CSV

    摘要:无意中看到了一篇讲数据批量导入的文章,才注意到的命令。的直接可以干这个事情,而且导出速度是非常快的。总结还有一些其他配置,比如把输入输出源指定成和命令,或者指定的等等。合理使用能大大提高效率。 TL;DR 无意中看到了一篇讲 数据批量导入 的文章,才注意到 PostgreSQL 的 COPY 命令。简而言之,它用来在文件和数据库之间复制数据,效率非常高,并且支持 CSV 。 导出 CS...

    ethernet 评论0 收藏0
  • title: postGreSQL 插件 timescaleDB 安装使 date: 2019-0

    摘要:基本环境操作系统安装安装和安装时序数据库插件部署实践时空数据库德哥官网安装文档设置实验下载测试数据创建数据库解压下载文件创建表结构导入数据查询测试注释数据库启动连接数据库创 基本环境 操作系统: centOS 7 postGreSQL : 10 timescaleDB : 1.0 + postGreSQL安装 Centos7 安装Postgresql10.5和PostGIS times...

    Kylin_Mountain 评论0 收藏0
  • 【mongoDB运维篇②】备份与恢复(导入导出)

    摘要:导入导出可以操作的是本地的服务器也可以是远程的服务器所以都有如下通用选项主机端口用户名密码导出库名表名列名查询条件导出的文件名导出格式便于和传统数据库交换数据导出库下面的表从哪里导出导出的文档数导出库下 导入/导出可以操作的是本地的mongodb服务器,也可以是远程的服务器所以,都有如下通用选项: -h host 主机 --port port 端口 -u username 用...

    lakeside 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<