postgresql数据处理
COPY命令
1.需要具备超级用户权限
2.从数据库服务端主机读取或写入文件数据
3.SQL命令
基本用法
COPY tbale_name[(column_name)] FROM {'filename'|PROGRAM 'command'|STDIN} [WITH (option)]
COPY {table_name[(column_name)]|(query)} TO {'filename'|PROGRAM 'command'|STDOUT}[[WITH(option)]
option的选项
选项 | 描述 |
---|---|
format format_name | csv,text |
oids boolean | 复制带上oid |
freeze | 冻结数据,然后执行vacuum freeze |
delimiter ‘delimiter_character’ | 分割符 |
null ‘null_string’ | 指定null的值,默认为的\N |
header boolean | 带上表字段名称 |
quote ‘quote_character’ | 引用字符 |
encoding ‘encoding_name’ | 指定编码字符 |
stdin | 客户端程序输入流 |
stdout | 客户端输出流 |
导出整个表数
COPY schema.tb_aa TO '/tmp/tb_aa.csv' delimiter ',' WITH csv header encoding 'GBK';
COPY schema.tb_aa TO '/tmp/tb_aa.csv' delimiter ',' quto '"' WITH csv header encoding 'GBK';
导出指定条件数据
COPY (select * from tb_aa where id <=10) TO '/tmp/tb_aa.csv' WITH csv header;
##导入数据
ERROR: invalid input syntax for integer: “id,user_id,status,update_time,create_time”
CONTEXT: COPY tb_aa, line 1, column id: “id,user_id,status,update_time,create_time”
导入数据不包含标题行,仅实用于csv格式
COPY tb_aa FROM '/tmp/tb_aa.csv' csv header;
\copy命令
1.普通用户权限
2.从psql客户端主机读取或写入文件数据
3.元命令
导出指定的数据或者整个表
\copy tb_aa to '/tmp/tb_aa2.csv' with csv header;
\copy tb_aa to '/tmp/tb_aa2.csv' with csv header delimiter ',';
COPY和\copy性能比较:
1.COPY性能比\copy的高
2.COPY适合数据量比较大的表,\copy适合数据量比较小的表
通过-f导入sql文本
psql -h -p database user -f /tmp/aa.sql