postgresql的copy命令用来在文件和表之间进行数据复制,复制效率很高。

官方提供了命令行的copy命令以及Java封装的copy,下文将分别介绍说明。

命令行copy

copy有两个命令:COPY FROM和COPY TO。

COPY TO用于把一个表的内容复制到一个文件;COPY FROM从文件复制数据到表中。

COPY TO中也可以指定查询,将查询结果写入文件。COPY FROM中,文件的字段按照顺序写入到指定列中。

语法

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 [, ...] ) ]其中 option 可以是下列之一: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'

参数说明

table_name:已有表的表名

column_name:要被复制的列列表

query:指定查询语句,将查询结果导出

file:输入或输出的文件名

PROGRAM:要执行的命令。COPY FROM中,输入从该命令的输出获取;COPY TO中,输出写入到该命令的标准输入。

STDIN:指定标准输入流

STDOUT:指定标准输出流

boolean:指定选项打开还是关闭。ture、false

FORMAT:选择要读取或者写入的数据格式:text、csv等

DELIMITER:指定分割每列的字符

NULL:指定表示一个空值的字符串。文本格式中默认是 \N(反斜线-N),CSV格式中默认 是一个未加引用的空串。

HEADER:指定文件包含标题行。

ENCODING:指定文件的编码,如果省略,将使用当前客户端编码

WHERE:COPY FROM时指定条件,不满足条件不会写入

注意

复制语句有:copy和\copy两种。

copy是服务器端来进行读取或写入,文件必须位于服务器端,且启动服务器的用户对文件可以读写。

\copy是客户端来进行读取或写入,是取决于客户端,文件位于客户端且启动客户端的用户对文件有访问权限。

示例

  • 导出表tb1的数据到tb1.csv中,带有标题行且列之间的分隔符为|
\copy ( select * from tb1) to '/home/export/tb1.csv' delimiter '|' csv header;
  • 导入数据到表tb1中
\copy tb1 from '/home/export/tb1.csv'
with (FORMAT csv, DELIMITER '|', HEADER true);

更多命令相关信息可查看官方文档

Java封装的copy

官方提供的org.postgresql.copy包下的相关类,可以通过Java的输入输出流将表进行数据导出或写入。

相关方法

主要是CopyManager提供的两个方法:copyOut和copyIn。

copyOut是将表的数据写入到标准输出流,传入文件输出流即可写入文件。

copyIn是从标准输入流导入数据,传入文件对应的输入流即可导入。

copyIn参数
sql:形如"copy tb1 from stdin"的sql,tb1是要导入数据的表名
Reader/InputStream:输入流,字节流/字符流
bufferSize:每次读入的字节buffer大小
copyOut参数
sql:形如"copy (select * from tb1) to stdout"的sql,括号里sql查询结果是要导出的数据
Writer/OutputStream:输出流,字节流/字符流

pom依赖

<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.2.16</version>
</dependency>

demo代码

package com.upupfeng.postgres;import org.postgresql.copy.CopyManager;
import org.postgresql.core.BaseConnection;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;public class PgConnection {private String dbUrl;private String user;private String password;public PgConnection(String dbUrl, String user, String password) {this.dbUrl = dbUrl;this.user = user;this.password = password;}// 获取数据库连接public Connection getConnection() throws ClassNotFoundException, SQLException {Class.forName("org.postgresql.Driver");return DriverManager.getConnection(dbUrl, user, password);}// 将表数据写入到文件public void copy2File(Connection conn, String sql, String path) throws SQLException, IOException {CopyManager copyManager = new CopyManager(conn.unwrap(BaseConnection.class));try (FileOutputStream fileOutputStream = new FileOutputStream(path)) {copyManager.copyOut(String.format("copy (%s) to stdout", sql), fileOutputStream);}}// 将文件数据写入表中public void copy2DB(Connection conn, String tableName, String path) throws IOException, SQLException {CopyManager copyManager = new CopyManager(conn.unwrap(BaseConnection.class));try (FileInputStream fileInputStream = new FileInputStream(path)) {copyManager.copyIn(String.format("copy %s from stdin", tableName), fileInputStream);}}public static void main(String[] args) throws Exception {String dbUrl = "jdbc:postgresql://192.168.168.200:5432/mwf_db";String user = "mwf";String password = "123456";String sql = "select * from tb1";String destPath = "D:\\tb1.csv";String srcPath = "D:\\tb1.csv";String table = "tb1";PgConnection pgConnection = new PgConnection(dbUrl, user, password);Connection connection = pgConnection.getConnection();pgConnection.copy2File(connection, sql, destPath);pgConnection.copy2DB(connection, table, srcPath);}}

参考

http://postgres.cn/docs/12/sql-copy.html

https://blog.csdn.net/wtopps/article/details/79097748

postgresql copy from、copy to相关推荐

  1. copy ctor、copy assignment(拷贝构造函数和拷贝赋值函数)

    这个很早就搞明白了,只是这里系统整理一下. 例1: #include<iostream> using namespace std; class Test {public:Test(int ...

  2. OC指示符assign、atomic、nonatomic、copy、retain、strong、week的解释

    在使用@property定义property时可以在@property与类型之间用括号添加一些额外的指示符,常用的指示符有assign.atomic.nonatomic.copy.retain.str ...

  3. strong、copy和mutableCopy详解

    写在前面 关于copy.mutableCopy和strong,一直想好好整理整理,但是因为各种原因搁置了.今天上班时发现老代码中因为这个问题出现了一个特别恶心的大坑,让我下定决心写下这篇博文.如果你认 ...

  4. 【iOS atomic、nonatomic、assign、copy、retain、weak、strong】的定义和区别详解

    一.atomic与nonatomic 1.相同点 都是为对象添加get和set方法 2.不同点 atomic为get方法加了一把安全锁(及原子锁),使得方法get线程安全,执行效率慢 nonatomi ...

  5. string中c_str()、data()、copy(p,n)函数的用法

    转载:http://www.cnblogs.com/qlwy/archive/2012/03/25/2416937.html 标准库的string类提供了3个成员函数来从一个string得到c类型的字 ...

  6. @synthesize@dynamic@private,@protected,@publicassign、weak、strong、retain、copy、nonatomic、atomic

    iOS属性修饰关键字 1. @private,@protected,@public,@package详解及使用 @privite:私有的,只有本类(不包括子类)自己拥有 @protected:受保护的 ...

  7. c++三大函数:拷贝构造(copy ctor)、拷贝赋值(copy op)、析构函数(dtor)

    Class的两个经典分类 Class without pointer member(s) complex Class with pointer member(s) string String clas ...

  8. 深度探索c++对象模型(5):ctor、dtor、copy

    一.无继承的对象构造: 类中包含的都是POD,则该类的ctor.dtor.copy都是trivial,初始化.拷贝.回收该类型对象,编译器不会产生对应的ctor.dtor.copy. 二.加入虚函数: ...

  9. xcopy、rd、COPY、MD、DEL、REN 命令祥解

    一.XCOPY.COPY.RD.MD.DEL.REN 命令祥解 copy C:\test.txt D:\ 把c盘的test.txt 复制到D盘 del C:\test.txt 删除c盘的test.tx ...

最新文章

  1. geoip2 php,Geoip geoip-api-php 库包使用 – 通过ip 找到国家
  2. 大规模分布式跟踪系统的理论
  3. C语言运算符优先级 (备忘)
  4. 全国胸最小的省是哪个,你知道吗?| 今日最佳
  5. mac 启动mysql多实例_实践:mysql单机多实例部署(mac)
  6. Javascript 仿Flash 图片切换 及 Flash 图片切换
  7. 江西冶金职业技术学院计算机,计算机基础知识江西冶金职业技术学院.ppt
  8. 机器学习笔记(四)---- 逻辑回归的多分类
  9. solr4.3纠错源码学习二——基于主索引
  10. For循环案例---九九乘法表
  11. 【浙江大学PAT真题练习乙级】1004 成绩排名 (20分) 真题解析
  12. Oracle_为分区表添加新分区
  13. 修改 tomcat 内存
  14. 如何注册、发布 CSDN博客
  15. java源文件在哪_java源文件由什么组成?
  16. 时间序列——深圳人口预测
  17. 详解浮点数的精度问题
  18. Chapter7 Cloud Infrastructure Mechanisms
  19. 20_django项目的部署和总结
  20. redis实现计时器

热门文章

  1. pdf压缩文件怎么压缩到最小
  2. [C语言/C++]判断月份对应天数
  3. 天数换算月份_excel表中,如何把日期数转换成月份数呢?
  4. 在线音乐播放系统的设计与实现(论文+源码)_kaic
  5. 战胜儿童乙肝,早治是关键
  6. 编译chm格式PHP手册
  7. sqlsession传参
  8. ua获取手机型号_js获取移动端设备信息(IMEM,IMIS,手机型号,系统版本,浏览器信息等)...
  9. 推荐一个免费电子书下载网站
  10. 交通工程专业的计算机论文,交通工程专业的论文