一、copy概述

  • copy 命令用于表与文件(和标准输出,标准输入)之间的相互拷贝
  • copy to由表至文件,copy from由文件至表
  • copy 命令是到数据库服务端找文件,以超级用户执行导入导出权限,适合数据库管理员操作;
  • \copy命令在客户端执行导入客户端的数据文件,权限要求没那么高,适合开发,测试人员使用
  • copy与\copy 命令都能实现数据文件与表的数据传递,两者都在psql环境下执行

二、copy基本语法+示例

1、语法参数说明:

# 导出命令(copy to的导出速度非常快):COPY { table_name [ ( column_name [, ...] ) ] | ( query) }    TO { 'filename' | PROGRAM 'command' | STDOUT }    [ [ WITH ] (option [, ...] ) ] # 导入命令:COPY table_name [ ( column_name [, ...] ) ]    FROM { 'filename' | PROGRAM 'command' | STDIN }    [ [ WITH ] ( option [, ...] ) ]
  • table_name:现存表的名字(可以有模式修饰)
  • column_name:可选的待拷贝字段列表。如果没有声明字段列表,那么将使用所有字段
  • Query:一个必须用圆括弧包围的SELECT或VALUES命令,其结果将被拷贝
  • Filename:输入或输出文件的路径名。输入文件名可以是绝对或是相对的路径,但输出文件名必须是绝对路径。 Windows用户可能需要使用E”字符串和双反斜线作为路径名称
  • PROGRAM:需执行的程序名。在COPY FROM命令中,输入是从程序的标准输出中读取,而在COPY TO中,命令的输出会作为程序的标准输入。
    注意:
    程序一般是在命令行界面下执行,当用户需要传递一些变量给程序时,如果这些变量的来源不是可靠的,用户必须小心过滤处理那些对命令行界面来说是有特殊意义的字符。基于安全的原因,最好是使用固定的命令字符串,或者至少是应避免直接使用用户输入(应先过滤特殊字符)
  • STDOUT:声明输入将写入客户端应用
  • WITH(FORMAT):选择被读或者写的数据格式:text、csv(逗号分隔值),或者binary。 默认是text

2、将数据库查询结果导出csv

# 命令:COPY { table_name [ ( column_name [, ...] ) ] | ( query) }    TO { 'filename' | PROGRAM 'command' | STDOUT }    [ [ WITH ] (option [, ...] ) ] # 示例:COPY user TO '/tmp/data/test.csv' WITH csv;# 导出指定的属性:COPY user(name,password) TO '/tmp/data/test.csv' WITH csv;# 使用select 语句:COPY (select * from user where   id=) TO '/tmp/data/test.csv' WITH csv;# 指定要导出哪些字段:COPY (select name,age from user) TO '/tmp/data/test.csv'WITH csv header;

3、将文件导入到表中(导入csv)

# 命令:COPY table_name [ ( column_name [, ...] ) ]    FROM { 'filename' | PROGRAM 'command' | STDIN }    [ [ WITH ] ( option [, ...] ) ]# 示例:导入命令基本与导出一样,只是将TO 改为 FROMCOPY user_1 FROM '/tmp/data/test.csv' WITH csv;# 如果导出的时候,指定了header属性,那么在导入的时候,也需要指定:COPY user_1(name, age) FROM '/tmp/data/test.csv' WITH csv header;