更新时间:2026-10-21 GMT+08:00
分享

数据导入导出工具概览

表1 数据导入导出工具概览

工具名称

工具简介

COPY

数据库数据批量导入导出语法接口,COPY可用于表级数据的导入和导出,以及查询结果集的导出。详细信息请参见COPY。

\COPY

gsql客户端中用作表级数据批量导入导出的元命令,它基于COPY xxx FROM stdin/stdout用法,并通过libpq进行了报文封装,目的是能将数据存放在gsql客户端机器上。详细信息请参见表3。

gs_dump

数据库逻辑备份工具。导出单个数据库下的相关信息,用户可以自定义导出一个数据库下全部或其中的部分对象(模式、表、视图等)的定义及数据。详细信息请参见gs_dump导出数据库信息。

gs_dumpall

数据库逻辑备份工具。导出所有数据库下的相关信息,它可以导出实例下所有数据库中的对象定义及数据,包括默认数据库的数据、自定义数据库的数据、以及所有数据库公共的全局对象。详细信息请参见gs_dumpall导出所有数据库信息。

gs_restore

数据库逻辑恢复工具。对gs_dump导出生成的文件进行导入的工具。详细信息请参见gs_restore导入数据。

实例级导入导出

对于想要逻辑备份整个数据库实例的用户,推荐使用gs_dumpall工具进行备份,它可以导出实例下所有数据库的数据,包括默认数据库的数据、自定义数据库的数据、以及所有数据库公共的全局对象的定义。

  • gs_dumpall不会对数据库运行参数进行备份及恢复。
  • gs_dumpall仅支持纯文本格式导出。所以只能使用gsql恢复gs_dumpall导出的转储内容。
  • 恢复后,建议在每个数据库上运行ANALYZE,为优化器提供有用的统计数据信息。

备份时推荐以初始用户/具备sysadmin权限的用户执行如下命令

nohup gs_dumpall -U root -W ******** -f /data/backup/bkp2.sql -p 8000 > /data/backup/dumpall_backup.log &

恢复时推荐以初始用户/具备sysadmin权限的用户执行如下命令

nohup gsql -d postgres -p 8000 -U root -W ******** -f /data/backup/bkp2.sql -a > /data/backup/dumpall_restore.log &

数据库级导入导出

对于想要逻辑备份单个database的用户,推荐使用gs_dump工具进行备份。gs_dump支持四种不同的使用归档格式,不同的归档格式适用场景如下,用户可以根据自身适用情况选择合适的归档格式。

表2 导出文件格式

格式名称

-F的参数值

说明

建议

对应导入工具

纯文本归档格式

p

纯文本脚本文件包含SQL语句和命令。命令可以由gsql命令行终端程序执行,用于重新创建数据库对象并加载表数据。

小型数据库,或者需要对导出的sql文件进行修改,推荐纯文本格式。

使用gsql工具恢复数据库对象前,可根据需要使用文本编辑器编辑纯文本导出文件。

自定义归档格式

c

一种二进制文件。支持从导出文件中恢复所有或所选数据库对象。

中型或大型数据库,需要将备份结果输出到单个文件中,推荐自定义归档格式。

使用gs_restore可以选择要从自定义归档/目录归档/tar归档导出文件中导入相应的数据库对象。

目录归档格式

d

该格式会创建一个目录,该目录包含两类文件,一类是包含数据库对象的目录文件,另一类是每个表和blob对象对应的数据文件。

中型或大型数据库,需要将数据库对象与数据分目录存储导出,推荐使用目录归档格式。

tar归档格式

t

tar归档文件支持从导出文件中恢复所有或所选数据库对象。tar归档格式不支持压缩且对于单个文件大小应小于8GB。

小型数据库,需要将归档结果导出并打包,可以使用tar归档格式。

  • gs_dump不会对所有数据库公共的全局对象(角色、表空间及对应权限)进行备份和恢复。因此恢复时请确保目标库/新实例上的全局对象已经创建。
  • gs_dump和gs_restore不支持跨数据库兼容模式的导入导出,请确保源库与目标库的数据库兼容模式及兼容性配置参数保持一致。
  • 禁止修改-F c/d/t 格式导出的文件和内容,否则可能无法恢复成功。对于-F p 格式导出的文件,如有需要修改替换,可根据需要谨慎编辑导出文件。
  • 恢复后,建议在数据库上运行ANALYZE,为优化器提供有用的统计数据信息。

备份时推荐以初始用户/具备sysadmin权限的用户执行如下命令,源库为my_database,导出时包含数据和对象定义

-- 纯文本归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F p -f /data/backup/my_database_backup.sql > /data/backup/my_database_backup.log &
-- 自定义归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F c -f /data/backup/my_database_backup.dmp > /data/backup/my_database_backup.log &
-- 目录归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F d -f /data/backup/my_database_backup > /data/backup/my_database_backup.log &
-- tar归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F t -f /data/backup/my_database_backup.tar > /data/backup/my_database_backup.log &

恢复时需要先创建好与源库属性相同的目标库,且库内没有任何内容

-- 通过以下gsql元命令,查看数据库属性信息
\l+
-- 根据查询到的属性信息,创建目标数据库
create database my_database2 encoding='xxxxx' LC_COLLATE='xxxxx' LC_CTYPE ='xxxxx' TEMPLATE=xxx DBCOMPATIBILITY 'xxx';

再以初始用户/具备sysadmin权限的用户执行如下命令进行恢复

-- 纯文本归档格式
nohup gsql -d my_database2 -p 8000 -U root -W ******** -f /data/backup/my_database_backup.sql -a > /data/backup/my_database_restore.log &
-- 自定义归档格式
nohup gs_restore /data/backup/my_database_backup.dmp -d my_database2 -p 8000 -U root -W ******** -F c -v > /data/backup/my_database_restore.log &
-- 目录归档格式
nohup gs_restore /data/backup/my_database_backup -d my_database2 -p 8000 -U root -W ******** -F d -v > /data/backup/my_database_restore.log &
-- tar归档格式
nohup gs_restore /data/backup/my_database_backup.tar -d my_database2 -p 8000 -U root -W ******** -F t -v > /data/backup/my_database_restore.log &

模式级导入导出

对于想要备份单个schema下的用户,推荐使用gs_dump工具并配合-n参数进行备份,可以连续使用多个-n备份多个schema。

备份时推荐以初始用户/具备sysadmin权限的用户执行如下命令,源库为my_database,导出时会包含数据和对象定义。

-- 纯文本归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F p -f /data/backup/my_schema_backup.sql -n my_schema > /data/backup/my_schema_backup.log &
-- 自定义归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F c -f /data/backup/my_schema_backup.dmp -n my_schema > /data/backup/my_schema_backup.log &
-- 目录归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F d -f /data/backup/my_schema_backup -n my_schema > /data/backup/my_schema_backup.log &
-- tar归档格式
nohup gs_dump my_database -U root -W ******** -p 8000 -F t -f /data/backup/my_schema_backup.tar -n my_schema > /data/backup/my_schema_backup.log &

恢复时需要先创建好与源库属性相同的目标库,且库内没有目标模式

-- 通过以下gsql元命令,查看数据库属性信息
\l+
-- 根据查询到的属性信息,创建目标数据库
create database my_database2 encoding='xxxxx' LC_COLLATE='xxxxx' LC_CTYPE ='xxxxx' TEMPLATE=xxx DBCOMPATIBILITY 'xxx';

再以初始用户/具备sysadmin权限的用户执行如下命令进行恢复

-- 纯文本归档格式
nohup gsql -d my_database2 -p 8000 -U root -W ******** -f /data/backup/my_schema_backup.sql -a > /data/backup/my_schema_restore.log &
-- 自定义归档格式
nohup gs_restore /data/backup/my_database_backup.dmp -d my_database2 -p 8000 -U root -W ******** -F c -v -n my_schema > /data/backup/my_schema_restore.log &
-- 目录归档格式
nohup gs_restore /data/backup/my_database_backup -d my_database2 -p 8000 -U root -W ******** -F d -v -n my_schema > /data/backup/my_schema_restore.log &
-- tar归档格式
nohup gs_restore /data/backup/my_database_backup.tar -d my_database2 -p 8000 -U root -W ******** -F t -v -n my_schema > /data/backup/my_schema_restore.log &

表级导入导出

对于表级的导入与导出,能够使用的工具很多,可基于以下场景切入选择合适的工具。

  1. 用户需要导出单个表的定义和表内数据到同一个文件中。推荐使用gs_dump工具的纯文本归档,并配合-t参数使用,可以连续使用-t备份多张表。

    备份时推荐以初始用户/具备sysadmin权限的用户执行如下命令,源库为my_database,目标表为my_schema下的my_table。

    nohup gs_dump my_database -U root -W ******** -p 8000 -F p -f /data/backup/my_table_backup.sql -t my_schema.my_table > /data/backup/my_table_backup.log &

    恢复时需要先创建好与源库属性相同的目标库,且库内已有目标模式,没有目标表,再以初始用户/具备sysadmin权限的用户执行如下命令进行恢复

    nohup gsql -d my_database2 -p 8000 -U root -W ******** -f /data/backup/my_table_backup.sql -a > /data/backup/my_table_restore.log &
  2. 用户仅需要导出单个表的定义,不需要表内数据。

    推荐使用gs_dump工具的纯文本归档,配合-s参数使用,命令如下

    nohup gs_dump my_database -U root -W ******** -p 8000 -F p -f /data/backup/my_table_backup.sql -t my_schema.my_table -s > /data/backup/my_table_backup.log &

    恢复时需要先创建好与源库属性相同的目标库,且库内已有目标模式,没有目标表,再以初始用户/具备sysadmin权限的用户执行如下命令进行恢复

    nohup gsql -d my_database2 -p 8000 -U root -W ******** -f /data/backup/my_table_backup.sql -a > /data/backup/my_table_restore.log &
  3. 用户需要导出单个表的数据,不需要表定义。
    1. 将数据导出到数据库节点上,推荐直接使用COPY命令
      • 普通场景下,出于数据库安全考虑,当参数enable_copy_server_files关闭时,只允许初始用户执行COPY FROM FILENAME或COPY TO FILENAME命令,当参数enable_copy_server_files打开时,允许具有SYSADMIN权限的用户或继承了内置角色gs_role_copy_files权限的用户执行,但默认禁止对数据库配置文件,密钥文件,证书文件和审计日志执行COPY FROM FILENAME或COPY TO FILENAME,以防止用户越权查看或修改敏感文件。enable_copy_server_files打开时,系统管理员可以通过guc参数safe_data_path设置普通用户可以导入导出的路径的白名单,未设置此guc参数时候(默认情况),不对普通用户使用的路径进行拦截。
      • 当数据库部署在沙箱内时,COPY指定的文件为沙箱内的路径,而不是沙箱外的路径。

      推荐使用如下命令将数据导出成标准的CSV格式,此文件路径为数据库节点上的路径。

      COPY my_schema.my_table TO '/data/backup/my_table.csv' CSV;

      再通过如下命令将数据导入到目标表中。

      COPY my_schema.my_table2 FROM '/data/backup/my_table.csv' CSV;
    2. 将数据导出到客户端上,推荐直接使用\COPY元命令

      使用如下命令将数据导出成标准的CSV格式,此文件路径为客户端上的路径。

      \COPY my_schema.my_table TO '/data/backup/my_table.csv' CSV;

      再通过如下命令将数据导入到目标表中。

      \COPY my_schema.my_table2 FROM '/data/backup/my_table.csv' CSV;
  4. 用户需要自定义导入导出时数据的格式,例如分隔符换行符等

    推荐使用COPY或\COPY。

相关文档