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;

参考资料:

https://www.postgresql.org/docs/13/sql-copy.html

文章评论

0条评论