One - One Code All

Blog Content

用 PostgreSQL 的 COPY 导入导出 CSV

PostgreSQL   2016-07-03 10:01:49

下面例子是把 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 优化过。


总结

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

  2. 普通用户使用\COPY命令。


  3. -- 导出数据
    psql -h  -p  -U  -d  -c "COPY (select * from outer_risk_result where score>0 ) to STDOUT with csv header" > outer_risk_result-1-3.csv
    
    -- 导入新数据
    psql -h  -p  -U  -d  -c "COPY outer_risk_result FROM STDIN with csv header" < outer_risk_result.csv


 



上一篇:python的dataframe判断某列元素为空,或者判断某个值为空
下一篇:Elasticsearch集群监控指标学习

The minute you think of giving up, think of the reason why you held on so long.