Postgres copy命令导入导出数据的操作方法

 更新时间:2024年08月08日 16:59:02   作者:wtopps  
最近有需要对数据进行迁移的需求,由于postgres性能的关系,单表3000W的数据量查询起来有一些慢,需要对大表进行切割,拆成若干个子表,涉及到原有数据要迁移到子表的需求,这篇文章主要介绍了Postgres copy命令导入导出数据的操作方法,需要的朋友可以参考下

前言

最近有需要对数据进行迁移的需求,由于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;

注意事项:

第一点:
copy命令必须在plsql命令行执行,执行用户必须为superuser,否则会提示:

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即可

第二点:
如果导出的字段,有integer[]类型,直接导出,再导入的话,会有问题,解决办法是需要在导出的时候,进行处理:

\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

到此这篇关于Postgres copy命令导入导出数据的文章就介绍到这了,更多相关Postgres copy导入导出数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • 一文详解PostgreSQL复制参数

    一文详解PostgreSQL复制参数

    PostgreSQL 作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可以参考下
    2025-05-05
  • Postgresql 截取字符串的案例

    Postgresql 截取字符串的案例

    这篇文章主要介绍了Postgresql 截取字符串的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • PostgreSQL存储过程用法实战详解

    PostgreSQL存储过程用法实战详解

    这篇文章主要介绍了PostgreSQL存储过程用法,结合具体实例详细分析了PostgreSQL数据库存储过程的定义、使用方法及相关操作注意事项,并附带一个完整实例供大家参考,需要的朋友可以参考下
    2018-08-08
  • Postgresql的select优化操作(快了200倍)

    Postgresql的select优化操作(快了200倍)

    这篇文章主要介绍了Postgresql的select优化操作(快了200倍),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • postgresql数据库设置id自增的基本方法举例例子解析

    postgresql数据库设置id自增的基本方法举例例子解析

    这篇文章主要给大家介绍了关于postgresql数据库设置id自增的基本方法举例,文章介绍了在PostgreSQL中实现自增ID的两种方法,分别是使用序列和触发器,序列方法简单直接,而触发器和函数方法则提供了更大的灵活性,需要的朋友可以参考下
    2024-11-11
  • PostgreSQL如何修改默认端口号

    PostgreSQL如何修改默认端口号

    文章主要内容是关于在升级PostgreSQL过程中遇到的问题,以及解决这些问题的方法,升级过程中,由于端口号设置不正确,导致psql连接到旧版本的服务器,从而引发语法错误,解决方法是在连接数据库时指定正确的端口号,或者修改默认端口号
    2024-12-12
  • 设置PostgreSQL表字段为自增主键的方法

    设置PostgreSQL表字段为自增主键的方法

    本文主要介绍了如何在数据库中复制表结构及数据,并设置新表的自增主键,同时,文章讨论了利用 PostgreSQL 的窗口函数 ROW_NUMBER() 实现去重的方法,即保留重复记录中的一条,其他设置为无效或删除,此外,还提到了复制表时需要手动添加约束和索引,需要的朋友可以参考下
    2025-10-10
  • 解决PostgreSQL数据迁移过程中的数据类型不匹配问题

    解决PostgreSQL数据迁移过程中的数据类型不匹配问题

    在数据迁移的过程中,经常会遇到源数据库和目标数据库之间的数据类型不匹配的情况,对于 PostgreSQL 数据库来说,处理这种数据类型不匹配问题需要一些特定的策略和技巧,需要的朋友可以参考下
    2024-07-07
  • PostgreSQL 16 搭配 PgVector:Windows 11 完整安装教程

    PostgreSQL 16 搭配 PgVector:Windows 11&nbs

    PgVector助力PostgreSQL实现向量数据库功能,简化AI检索架构;支持多种向量类型与距离算法,轻松实现多媒体检索与个性化推荐;适合Windows及Linux环境部署,感兴趣的朋友跟随小编一起看看吧
    2026-05-05
  • PostgreSQL常用字符串函数与示例说明小结

    PostgreSQL常用字符串函数与示例说明小结

    文章介绍了PostgreSQL中常用字符串函数的使用方法,包括空值处理、字符串位置查询、长度计算、大小写转换、去除空格、连接、替换、匹配、拆分和截取等操作,感兴趣的朋友跟随小编一起看看吧
    2024-11-11

最新评论