PostgreSQL copy 命令使用示例
PostgreSQL 提供了 copy 命令用于在数据库表与文件之间拷贝数据,通过 copy 命令可以把一个表数据导出到文件中,也可以把文件中的数据导入到表里面。
1. copy 命令语法
COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | PROGRAM 'command' | STDIN } [ [ WITH ] ( option [, ...] ) ] [ WHERE condition ] COPY { table_name [ ( column_name [, ...] ) ] | ( query ) } TO { 'filename' | PROGRAM 'command' | STDOUT } [ [ WITH ] ( option [, ...] ) ] where option can be one of: FORMAT format_name FREEZE [ boolean ] DELIMITER 'delimiter_character' NULL 'null_string' HEADER [ boolean ] QUOTE 'quote_character' ESCAPE 'escape_character' FORCE_QUOTE { ( column_name [, ...] ) | * } FORCE_NOT_NULL ( column_name [, ...] ) FORCE_NULL ( column_name [, ...] ) ENCODING 'encoding_name'
- format 支持的格式包括 csv,text,binary,默认为 text,一般 csv 用的比较多,csv 的格式可以直接用 excel 打开。
- header 表示导出/导入的文件是否带有字段名称。
- filename 是导入/导出的文件名,其存储在数据库服务器,而不是客户端。
2. 表中数据 copy 到文件
将表 t 中的所有数据 copy 到文件中:
copy t to '/tmp/1.csv' with (format csv);
只 copy 表 t 中的部分字段:
copy t(name,age) to '/tmp/1.csv' with (format csv);
copy 出来的数据支持 where 条件过滤:
copy (select * from t where id > 2) to '/tmp/1.csv' with (format csv);
copy 出来的文件带有字段名称:
copy t to '/tmp/1.csv' with (format csv,header true);
3. 文件中的数据 copy 到表
csv 文件导入到表中:
copy t from '/tmp/2.csv' with (format csv);
csv 文件导入表中的部分字段:
copy t(name,age) from '/tmp/1.csv' with (format csv);
csv 文件导入表中,支持 where 条件过滤:
copy t(name,age) from '/tmp/1.csv' with(format csv) where age>10;
带有字段名称的文件数据导入表:
copy t from '/tmp/1.csv' with (format csv, header true) where age > 10;
参考资料:
文章评论