PostgreSQL copy 命令使用示例

2023年 8月 15日 69.7k 0

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

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论