报⽂介绍PostgreSQL copy 命令,通过⽰例展⽰把查询结果导出到csv⽂件,导⼊数据⽂件⾄postgresql。
1. copy命令介绍
copy命令⽤于在postgreSql表和标准⽂件系统直接传输数据。copy命令让PostgreSQL 服务器直接读写⽂件,因此⽂件必须让PostgreSQL ⽤户能够访问到。该命令使⽤的⽂件是数据库服务器直接读写的⽂件,不是客户端应⽤的⽂件,因此必须位于服务器本地或被直接访问的⽂件,⽽不是客户端位置。
copy to 命令拷贝表内容⾄⽂件,也可以拷贝select的查询结果;也就说,如果select后⾯列出部分字段,则copy to 命令仅拷贝
指定字段的结果⾄⽂件。准备使⽤copy to 命令的表必须授予select权限。该命令仅能在表上使⽤,不能⽤于视图;当我们需要拷贝视图内容时,可以给copy命令传⼊sql查询:
COPY (SELECT * FROM country) TO ‘list_countries.copy';
copy from拷贝⽂件的数据到数据表。当使⽤copy from,⽂件中的每个字段被i顺序插⼊特定字段。如果该命令中的表的列参数未
指定则获取它们的缺省值。使⽤copy from命令的表必须授予insert权限。
不要混淆copy命令和psql中的 \\copy。\\copy调⽤ COPY FROM STDIN 或 COPY TO STDOUT,然后返回数据或存储可以被psql客户端访问的⽂件数据。因此,当使⽤\\copy时,⽂件的可访问性和访问权限取决于客户端,⽽不是服务器。
2. copy命令⽰例
2.1 从Postgresql导出表
我们能拷贝表⾄控制台,并使⽤竖线(|)作为字段直接的分隔符:
copy customers to stdout(delimiter '|')
拷贝表⾄⽂件,使⽤空格作为字段直接的分隔符:
COPY customers TO '/database/data/test_data.copy' (DELIMITER ' ');
2.2 导⼊⽂件⾄Postgresql表传⼊⽂件⾄已经存在的表:
COPY customers FROM '/database/data/test_data.copy' (DELIMITER ' ');
2.3 导出查询结果⾄⽂件导出查询结果⾄⽂件:
COPY (SELECT * FROM customers WHERE name LIKE 'A%') TO '/data/test_data.copy';
如果需要压缩数据,使⽤下⾯命令:
COPY customers TO PROGRAM 'gzip > /data/test_data.copy.gz';
如果仅导出2列,使⽤下⾯命令:
COPY customers(col, col2) TO '/data/test_data.copy' DELIMITER ' ';
如果需要导出⼆进制⽂件:
copy customers to 'e:/data.dat' with binary;
导出csv⽂件:
copy customers to 'e:/data.csv' with csv;
csv⽂件还有⼀些其他参数:
DELIMITER – 数据⾏中分割每个字段的分隔符。csv⽂件⼀般使⽤逗号.HEADER – 指定csv⽂件的标题,如果不需要标题⾏,可以忽略HEADER.
COPY country FROM '/data/test_data.copy' WITH delimiter ',' CSV HEADER;
指定编码:
COPY country FROM '/data/test_data.copy' WITH delimiter ',' CSV HEADER encoding 'utf-8';
3. 总结
本⽂介绍PostgreSQL中的copy命令,并通过⽰例展⽰了不同的应⽤场景。使⽤COPY加载⼤量⾏总是⽐使⽤INSERT快,COPY会进⾏⼀次设置,并且每⾏的开销都⾮常低,尤其是在不涉及触发器的情况下。
到此这篇关于PostgreSQL copy 命令教程详解的⽂章就介绍到这了,更多相关PostgreSQL copy 命令内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务