Postgres copy命令导入导出数据

Postgres copy命令导入导出数据前言最近有需要对数据进行迁移的需求 由于 postgres 性能的关系 单表 3000W 的数据量查询起来有一些慢 需要对大表进行切割 拆成若干个子表 涉及到原有数据要迁移到子表的需求 起初的想法是使用存储过程 使用 selectinsert 方式进行 但是数据量大的时候耗时有点久 于是需要想别的办法 就发现了 postgres 本身支持的 copy 命令 copy 命令 COPY 在 PostgreSQL

前言

最近有需要对数据进行迁移的需求,由于postgres性能的关系,单表3000W的数据量查询起来有一些慢,需要对大表进行切割,拆成若干个子表,涉及到原有数据要迁移到子表的需求。起初的想法是使用存储过程,使用select insert方式进行,但是数据量大的时候耗时有点久,于是需要想别的办法,就发现了postgres本身支持的copy命令。

copy命令

COPY在PostgreSQL表和文件之间交换数据。 COPY TO把一个表的所有内容都拷贝到一个文件,而COPY FROM从一个文件里拷贝数据到一个表里(把数据附加到表中已经存在的内容里)。 COPY TO还能拷贝SELECT查询的结果。

如果声明了一个字段列表,COPY将只在文件和表之间拷贝已声明字段的数据。 如果表中有任何不在字段列表里的字段,那么COPY FROM将为那些字段插入缺省值。

带文件名的COPY指示PostgreSQL服务器直接从文件中读写数据。 如果声明了文件名,那么服务器必须可以访问该文件,而且文件名必须从服务器的角度声明。 如果使用了PROGRAM选项,则服务器会从指定的这个程序进行输入或是写入该程序作为输出。 如果使用了STDIN 或STDOUT选项,那么数据将通过客户端和服务器之间的连接来传输。

常用参数说明:

table_name
现存表的名字(可以有模式修饰)

column_name
可选的待拷贝字段列表。如果没有声明字段列表,那么将使用所有字段

query
一个必须用圆括弧包围的SELECT或VALUES命令,其结果将被拷贝

filename
输入或输出文件的路径名。输入文件名可以是绝对或是相对的路径,但输出文件名必须是绝对路径。 Windows用户可能需要使用E”字符串和双反斜线作为路径名称

PROGRAM
需执行的程序名。在COPY FROM命令中,输入是从程序的标准输出中读取,而在COPY TO中,命令的输出会作为程序的标准输入。

注意,程序一般是在命令行界面下执行,当用户需要传递一些变量给程序时,如果这些变量的来源不是可靠的,用户必须小心过滤处理那些对命令行界面来说是有特殊意义的字符。 基于安全的原因,最好是使用固定的命令字符串,或者至少是应避免直接使用用户输入(应先过滤特殊字符)

STDOUT
声明输入将写入客户端应用

FORMAT
选择被读或者写的数据格式:text、csv(逗号分隔值),或者binary。 默认是text

导出CSV:

命令:

COPY { table_name [ ( column_name [, ...] ) ] | ( query ) } TO { 'filename' | PROGRAM 'command' | STDOUT } [ [ WITH ] ( option [, ...] ) ]

copy to的导出速度非常之快,经测试10W的数据量只需要3秒左右的时间

示例:

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) TO '/tmp/data/test.csv' WITH csv;

也可以指定要导出哪些字段:

COPY (select name,age from user) TO '/tmp/data/test.csv' WITH csv header;

导入CSV:

命令:

COPY table_name [ ( column_name [, ...] ) ] FROM { 'filename' | PROGRAM 'command' | STDIN } [ [ WITH ] ( option [, ...] ) ]

示例:

COPY user_1 FROM '/tmp/data/test.csv' WITH csv;

导入命令基本与导出一样,只是将TO 改为 FROM

如果导出的时候,指定了header属性,那么在导入的时候,也需要指定:

COPY user_1(name, age) FROM '/tmp/data/test.csv' WITH csv header;

注意事项:

ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

普通用户进行执行,需要在copy前面加入 “\”,即 \copy即可

\COPY ( select coalesce(integer_array, '{}')::integer[] as integer_array from table ) TO '/tmp/data.csv' with csv header;

更多详细信息,可以查看官方文档:

http://www.postgres.cn/docs/9.3/sql-copy.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215005.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午2:55
下一篇 2026年3月18日 下午2:55


相关推荐

  • 查看idea激活码(最新序列号破解)

    查看idea激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    107
  • c语言中的实型变量语法,在C语言中的实型变量分为两种类型

    c语言中的实型变量语法,在C语言中的实型变量分为两种类型在 C 语言中的实型变量分为两种类型第二章练习题一 填空题 1 在 C 语言中的实型变量分为两种类型 它们是 float 型和 型 2 若有定义 charc 010 则变量 c 中包含的字符个数为 3 已知字母 a 的 ASCII 码为十进制数 97 且设 ch 为整型变量 则表达式 ch a 8 3 的值为 4 在 C 语言中 以 16 位 PC 机为例 一个 float 型数据在内存中所占的字节数

    2026年3月17日
    2
  • NHibernate提示表is not mapped

    NHibernate提示表is not mapped一定要将 hbm xml 映射文件设置成嵌入的资源 下面是 mysql 的映射文件 lt xmlversion 1 0 encoding utf 8 gt lt hibernate mappingxmlns urn nhibernate mapping 2 2 gt lt classname wh db test model Test wh db test mo

    2025年10月13日
    6
  • pycharm永久激活码2021.5.3(最新序列号破解)

    pycharm永久激活码2021.5.3(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    95
  • 苹果绿设置zz

    苹果绿设置zz主要是在 linux 用了 google 的浏览器 不知道怎么设置 才找到了这篇文章 XP 系统设置方法 打开控制面板中的 显示 nbsp nbsp nbsp 选择外观 appearance 高级 advanced 然后在项目 items 那栏选窗口 windows 再点颜色 color 其它 others 然后把 Hue 色调 设为 85 Sat 饱和度 设为 90 Lum 亮度 设为 205 然后单击添加到自定义颜色 Addtocustomc 按 确定 一直确定 nbsp nbsp nbsp nbsp nbsp nbsp nbsp WIN7 系统设置方法 跟 XP

    2026年3月18日
    1
  • 实验报告:图书销售管理系统数据库SQL应用编程

    实验报告:图书销售管理系统数据库SQL应用编程实验目的针对图书销售管理数据库开发,了解SQL语言DDL、DML、DQL类型语句在数据库操作访问中的应用方法,培养数据库SQL编程访问能力。同时也掌握基本的数据库触发器、存储过程SQL编程方法,培养数据库后端编程能力。本实验完成图书销售管理系统数据库的SQL数据操作访问和后端数据处理功能。实验原理首先对图书销售管理系统进行数据需求分析,定义组成系统数据结构的实体、实体属性以及实体之间的关系。采用实体关系图(E-R模型图)方法来展示图书销售管理系统的概念数据模型与逻辑数据模型。利用PowerDes

    2022年6月1日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号