vb_dump

工具介绍

vb_dump 是 VexDB用于导出数据库相关信息的一种逻辑备份工具,用户可以自定义导出一个数据库或其中的对象(模式、表、视图等),不支持导出回收站对象。支持导出的数据库可以是默认数据库 postgres,也可以是自定义数据库。

工具运行产生的日志位于 $GAUSSLOG/bin/vb_dump 目录下,每个日志最大 16 MB,最多保留 50 个。如果没有配置环境变量 $GAUSSLOG,则不会产生日志文件。

事务性导出

为保证数据一致性和完整性,vb_dump 会对需要转储的表设置共享锁。如果表在别的事务中设置了共享锁,vb_dump 会等待锁释放后锁定表。如果无法在指定时间内锁定某个表,转储会失败。用户可以通过指定 --lock-wait-timeout 选项,自定义等待锁超时时间。

例如,T1 时刻启动 vb_dump 导出 A 数据库,那么导出数据结果将会是 T1 时刻 A 数据库的数据状态,T1 时刻之后对 A 数据库的修改不会被导出。

导出格式

vb_dump 支持将数据库信息导出至纯文本格式的 SQL 脚本文件或其他归档文件中。

vb_dump可以创建四种不同的导出文件格式,通过-F或者--format=选项指定,如表1.导出文件格式所示:

表1 导出文件格式

格式名称 -F 的参数值 说明 建议 对应导入工具
纯文本格式 p 纯文本脚本文件包含 SQL 语句和命令。命令可以由 vsql 命令行终端程序执行,用于重新创建数据库对象并加载表数据。 小型数据库,一般推荐纯文本格式。 使用 vsql 工具恢复数据库对象前,可根据需要使用文本编辑器编辑纯文本导出文件
二进制归档格式 c 一种二进制文件。支持从导出文件中恢复所有或所选数据库对象。 中型或大型数据库,推荐二进制归档格式。 使用 vb_restore 可以选择要从二进制归档/目录归档/tar 归档导出文件中导入相应的数据库对象。
目录归档格式 d 该格式会创建一个目录,该目录包含两类文件,一类是目录文件,另一类是每个表和 blob 对象对应的数据文件。 -
tar 归档格式 t tar 归档文件支持从导出文件中恢复所有或所选数据库对象。tar 归档格式不支持压缩且对于单独表大小应小于8GB。 -
说明

可以使用vb_dump工具将文件压缩为目录归档或二进制归档导出文件,减少导出文件的大小。生成目录归档或二进制归档导出文件时,默认进行中等级别的压缩。vb_dump程序无法压缩已归档导出文件。

导出对象

vb_dump 会按顺序检查以下信息是否需要导出,并按照实际导出工作量的数目打印:

  • 模式
  • 用户自建表
  • 插件(Extensions)
  • 用户自建函数
  • 用户自建类型
  • 用户自建PL
  • 用户自建聚集函数(Aggregate Function)
  • 用户自建操作符
  • 用户自建操作符类(Operator Class)
  • 用户自建操作符族(Operator Family)
  • 用户自建全文检索Parser
  • 用户自建全文检索模板
  • 用户自建全文检索字典
  • 用户自建全文检索配置
  • 用户自建外部数据封装器(Foreign Data Wrapper)
  • 用户自建外部服务器(Foreign Server)
  • 默认权限
  • 用户自建排序规则
  • 用户自建转换规则
  • 用户自建强制转换
  • 表继承信息
  • 索引
  • 约束 支持导出无效索引和约束。在恢复数据时先重建索引和约束,再进行无效化处理,最后插入数据。支持的范围包括:
    • 索引:主键索引、UNIQUE索引;
    • 约束:主键约束、UNIQUE约束、CHECK约束、外键约束。
  • 外表约束(foreign table constraint)
  • 触发器
  • 事件
  • 重写规则(Rewrite Rules)
  • 行级安全策略
  • 导出表的安全策略
  • 用户自建包
  • 逻辑复制发布相关信息
  • 逻辑复制订阅相关信息
  • 事件触发器

注意事项

  • vb_dump 工具由安装 VexDB数据库的操作系统用户执行。
  • 支持在备库上执行 vb_dump,在主库和备库中 vb_dump 的用法完全相同。
  • 如果 VexDB有任何本地数据要添加到template1数据库,请谨慎将vb_dump的输出恢复到一个真正的空数据库中,否则可能会因为被添加对象的定义被复制,出现错误。要创建一个无本地添加的空数据库,需从 template0 而非 template1 复制,例如:
    CREATE DATABASE foo WITH TEMPLATE template0;
    
  • tar 归档形式的文件大小不得超过 8 GB(tar 文件格式的固有限制)。
  • 由 vb_dump 生成的转储文件不包含优化程序用来做执行计划决定的统计数据。因此,最好从某转储文件恢复之后运行 ANALYZE | ANALYSE 以确保最佳效果。转储文件不包含任何 ALTER DATABASE…SET 命令,这些设置由 vb_dumpall 转储,还有数据库用户和其他完成安装设置。
  • 禁止修改 -F c/d/t 格式导出的文件和内容,否则可能无法恢复成功。对于 -F p 格式导出的文件,如有需要,可根据需要谨慎编辑导出文件。
  • 不支持导出临时表。
  • 不支持导出物化视图的表数据。
  • 不支持加密导出存储过程和函数。
  • 不支持导出数据库中的定时任务。
  • vb_dump 工具在进行数据导出时生成的列不会被转储。
  • 纯文本格式的 SQL 脚本文件:包含将数据库恢复为其保存时的状态所需的SQL语句。通过 vsql运行该 SQL 脚本文件,可以恢复数据库。即使在其他主机和其他数据库产品上,只要对 SQL 脚本文件稍作修改,也可以用来重建数据库。
  • 归档格式文件:包含将数据库恢复为其保存时的状态所需的数据,可以是 tar 格式、目录归档格式或二进制归档格式,详见表1.导出文件格式。该导出结果必须与 vb_restore配合使用来恢复数据库,vb_restore 工具在导入时,系统允许用户选择需要导入的内容,甚至可以在导入之前对等待导入的内容进行排序。详见TOC文件选择性恢复

命令格式

vb_dump [OPTION]... [DBNAME]

通用参数包括:

General options:
  -f, --file=FILENAME                         output file or directory name
  -F, --format=c|d|t|p                        output file format (custom, directory, tar,
                                              plain text (default))
  -j, --jobs=NUM                              use this many parallel jobs to dump
  -v, --verbose                               verbose mode
  -V, --version                               output version information, then exit
  -Z, --compress=0-9                          compression level for compressed formats
  --lock-wait-timeout=TIMEOUT                 fail after waiting TIMEOUT for a table lock
  -?, --help                                  show this help, then exit

控制转储内容的参数包括:

Options controlling the output content:
  -a, --data-only                             dump only the data, not the schema
  -b, --blobs                                 include large objects in dump
  -c, --clean                                 clean (drop) database objects before recreating
  -C, --create                                include commands to create database in dump
  -E, --encoding=ENCODING                     dump the data in encoding ENCODING
  -g, --exclude-guc=GUC_PARAM                 do NOT dump the GUC_PARAM set
  -n, --schema=SCHEMA                         dump the named schema(s) only
  -N, --exclude-schema=SCHEMA                 do NOT dump the named schema(s)
  -o, --oids                                  include OIDs in dump
  -O, --no-owner                              skip restoration of object ownership in
                                              plain-text format
  -s, --schema-only                           dump only the schema, no data
  -q, --target=VERSION                        dump data format can compatible Gaussdb version (v1 or ..)
  -S, --sysadmin=NAME                         system admin user name to use in plain-text format
  -t, --table=TABLE                           dump the named table(s) only
  -T, --exclude-table=TABLE                   do NOT dump the named table(s)
  --include-table-file=FileName               dump the named table(s) only
  --exclude-table-file=FileName               do NOT dump the named table(s)
  --pipeline                                  use pipeline to pass the password,
                                              forbidden to use in terminal
  -x, --no-privileges/--no-acl                do not dump privileges (grant/revoke)
  --column-inserts/--attribute-inserts        dump data as INSERT commands with column names
  --disable-dollar-quoting                    disable dollar quoting, use SQL standard quoting
  --disable-triggers                          disable triggers during data-only restore
  --exclude-table-data=TABLE                  do NOT dump data for the named table(s)
  --exclude-with                              do NOT dump WITH() of table(s)
  --inserts                                   dump data as INSERT commands, rather than COPY
  --no-publications                           do not dump publications
  --no-security-labels                        do not dump security label assignments
  --no-synchronized-snapshots                 do not use synchronized snapshots in parallel jobs
  --no-subscriptions                          do not dump subscriptions
  --no-tablespaces                            do not dump tablespace assignments
  --no-unlogged-table-data                    do not dump unlogged table data
  --include-alter-table                       dump the table delete column
  --quote-all-identifiers                     quote all identifiers, even if not key words
  --section=SECTION                           dump named section (pre-data, data, or post-data)
  --serializable-deferrable                   wait until the dump can run without anomalies
  --dont-overwrite-file                       do not overwrite the existing file in case of plain, tar and custom format
  --use-set-session-authorization
                                              use SET SESSION AUTHORIZATION commands instead of
                                              ALTER OWNER commands to set ownership
  --exclude-function                          do not dump function and procedure
  --with-encryption=AES128/SM4                dump data is encrypted using AES128 or SM4
  --with-key=KEY                              encryption key, AES128 key must be 16 bytes in length, SM4 key must be
                                              greater than 0 in length, the key means index of encryption key
  --with-userpin=username:password            used to connect to seckms server
  --with-salt=RANDVALUES                      used by vb_dumpall, pass rand value array
  --include-extensions                        include extensions in dump
  --binary-upgrade                            for use by upgrade utilities only
  --binary-upgrade-usermap="USER1=USER2"      to be used only by upgrade utility for mapping usernames
  --non-lock-table                            for use by OM tools utilities only
  --include-depend-objs                       dump the object which depends on the input object
  --exclude-self                              do not dump the input object
  --table-conditions="[tablename; whereclause ]limitclause"        add table conditions for exporting data
  --get-src-def                               get the original defination (include the comment) of view or matview
  --sess-replic-role=replica                  Set the guc parameter session_replication_role in the output file (if and only if format = p).
  --enable-dump-sys-level-objs                enable dumping of system-level objects

连接参数包括:

Connection options:
  -h, --host=HOSTNAME                         database server host or socket directory
  -p, --port=PORT                             database server port number
  -U, --username=NAME                         connect as specified database user
  -w, --no-password                           never prompt for password
  -W, --password=PASSWORD                     the password of specified database user
  --role=ROLENAME                             do SET ROLE before dump
  --rolepassword=ROLEPASSWORD                 the password for role

参数说明

  • DBNAME
    指定要连接的数据库。“DBNAME”前面不需要加短或长选项。
    • 方式一: 不需要-d,直接指定“DBNAME”为vexdb
      vb_dump -p port_number vexdb -f dump1.sql
      

      其中,port_number 表示数据库端口号。
    • 方式二: 环境变量中可定义缺省数据库,以定义为 vexdb为例:
      export PGDATABASE=vexdb 
      vb_dump -p port_number -f dump1.sql
      

      其中,PGDATABASE 为环境变量。

通用参数

  • -f, --file=FILENAME
    将输出发送至指定文件或目录。如果省略该参数,则使用标准输出。如果输出格式为(-F c/-F d/-F t)时,必须指定 -f 参数。如果 -f 的参数值含有目录,要求当前用户对该目录具有读写权限,并且不能指定已有目录。
    -f 选项指定的路径可以是绝对路径或相对路径。
  • -F, --format=c | d | t | p
    选择输出格式。格式如下:
    • c | custom:输出一个二进制格式的归档,并且以目录形式输出,作为vb_restore输入信息。该格式是最灵活的输出格式,因为能手动选择,而且能在恢复过程中将归档项重新排序。该格式默认状态下会进行中等级别的压缩。
    • d | directory:该格式会创建一个目录,该目录包含两类文件,一类是目录文件,另一类是每个表和 blob 对象对应的数据文件。
    • t | tar:输出一个 tar 格式的归档形式,作为vb_restore 输入信息。tar 格式与目录格式兼容;tar 格式归档形式在提取过程中会生成一个有效的目录格式归档形式。但是,tar 格式不支持压缩且对于单独表有 8 GB 的大小限制。此外,表数据项的相应排序在恢复过程中不能更改。
    • p | plain:输出一个文本SQL脚本文件(默认)。
  • -j,--jobs=NUM
    指定备份线程并发数。仅支持目录格式并行备份。
    并发数支持的范围为1~INT_MAX,但实际上无法达到最大值。并发数受以下因素的限制:(详见常见问题的问题1) 。
    • open files数量
    • 内存限制
    • 进程最大数
  • -v, --verbose
    开启冗长模式。该选项将导致 vb_dump 向转储文件输出详细的对象注解和启动/停止次数,向标准错误流输出处理信息。
  • -V, --version
    打印vb_dump版本,然后退出。
  • -Z, --compress=0-9
    指定使用的压缩比级别。
    取值范围:0-9
    • 0表示无压缩。
    • 1表示压缩比最小,处理速度最快。
    • 9表示压缩比最大,处理速度最慢。
    说明

    针对二进制归档格式,该选项指定单个表数据片段的压缩,默认方式是以中等级别进行压缩。对于 gzip 格式,默认的压缩等级为 6。 tar 归档格式和纯文本格式目前不支持压缩。

  • --lock-wait-timeout=TIMEOUT
    请勿在转储刚开始时一直等待以获取共享表锁。如果无法在指定时间内锁定某个表,就选择失败。可以以任何符合 SET statement_timeout 的格式指定超时时间。
  • -?, --help
    显示 vb_dump 命令行参数帮助,然后退出。

转储参数

  • -a, --data-only
    只输出数据,不输出模式(数据定义)。转储表数据、大对象和序列值。
    • 该选项不能和 --schema-only 同时使用。
    • 该选项不能和 -c,--clean 同时使用。
  • -b, --blobs
    在转储中包括大对象。
    该参数为扩展预留接口,不建议使用。
  • -c, --clean
    在将创建数据库对象的指令输出到备份文件之前,先将清理(删除)数据库对象的指令输出到备份文件中。(如果目标数据库中没有任何对象,vb_restore 工具可能会输出一些提示性的错误信息。)
    • 该选项只对文本格式有意义。该选项仅文本格式时生效。若需要对归档格式执行前进行 clean,可以在执行 vb_restore 时指定。
    • 该选项不能和 -a,--data-only 同时使用。
  • -C, --create
    导入数据库之前会先使用 CREATE DATABASE 创建数据库。(指定该选项后,-d指定的数据库仅用以执行 CREATE DATABASE 命令,所有数据依然会导入到创建的数据库中。)
  • -E, --encoding=ENCODING
    以指定的字符集编码创建转储。默认情况下,以数据库编码(GUC 参数 CLIENT_ENCODING)创建转储。(得到相同结果的另一个办法是将环境变量“PGCLIENTENCODING”设置为所需的转储编码。)
  • -g, --exclude-guc
    不转储 GUC_PARAM 集。 该参数为扩展预留接口,不建议使用。
  • -n, --schema=SCHEMA
    只转储与模式名称匹配的模式,此选项包括模式本身和所有它包含的对象。如果该选项没有指定,所有在目标数据库中的非系统模式将会被转储。
    写入多个 -n 选项来选择多个模式。此外,根据 vsql的 -d 命令所使用的相同规则,模式参数可被理解成一个 pattern,所以多个模式也可以通过在该 pattern 中写入通配符来选择。使用通配符时,注意给 pattern 打引号,防止 shell 扩展通配符。
    • 指定 -n 时,vb_dump 不会转储已选模式所依赖任何其他数据库对象。因此,无法保证某个指定模式的转储结果能够自行成功地储存到一个空数据库中。例如:
    • sch1 中的视图 v1 依赖于 sch2 模式的表 t2,若在 -n 选项中指定了 sch1,则 v1 定义所依赖的 t2 并不会被转储。
    • 指定 -n 时,非模式对象不会被转储。
    • 指定模式中的同义词也会被导出。
    • 不支持使用-n显式指定pg_catalog、information_schema等系统级schema,除非同时指定了--enable-dump-sys-level-objs 选项。
    • -n 和 -N 的数量加起来有上限,在 34 万到 35 万个之间,略小于 35万个。
    • 转储支持多个模式的转储。多次输入 -n schemaname 转储多个模式。
      例如:
      vb_dump -h host_name -p port_number vexdb -f backup/bkp_shl2.sql -n sch1 -n sch2
      

      上例中,sch1 和 sch2 模式会被转储。
  • -N, --exclude-schema=SCHEMA
    不转储任何与模式 pattern 匹配的模式。pattern 将参照针对 -n 的相同规则来理解。可以通过输入多次 -N,不转储与任何pattern匹配的模式。
    • 同时输入 -n 和 -N 时,会转储与至少一个 -n 选项匹配、与 -N 选项不匹配的模式。
    • 如果指定了 -N 而未指定 -n,则不转储常规转储中与 -N 匹配的模式。
    • 转储过程支持排除多个模式,输入 -N exclude schema name 排除多个模式。
      例如:
      vb_dump -h host_name -p port_number vexdb -f backup/bkp_shl2.sql -N sch1 -N sch2
      

      在上面这个例子中,sch1 和 sch2 在转储过程中会被排除。
  • -o, --oids
    转储每个表的对象标识符(OIDs),作为表的一部分数据。该选项用于应用以某种方式参照了 OID 列的情况。如果不是以上这种情况,请勿使用该选项。
    该选项不能和 --inserts/--column-inserts 同时使用,因为INSERT命令不能设置 OIDS。
  • -O, --no-owner
    不输出设置对象的归属这样的命令,以匹配原始数据库。默认情况下,vb_dump会发出 ALTER OWNER 或 SET SESSION AUTHORIZATION 语句设置所创建的数据库对象的归属。在执行脚本过程中,默认不设置属主的行为可能会使某些语句执行不成功,除非是由系统管理员触发(或是拥有脚本中所有对象的同一个用户)。通过指定 -O,该脚本会授予该用户拥有所有对象的权限,使任何用户都能执行。
    该选项仅文本格式时生效。若需要对归档格式执行前进行 clean,可以在执行vb_restore 时指定。
  • -s, --schema-only
    只转储对象定义(模式),而非数据。
    • 该选项不能和 -a,--data-only 同时使用。
    • 若在导出时指定该参数,则在使用vb_restore进行恢复时也必须指定仅导入模式(即指定-s参数)。
  • -q, --target
    该选项无实际意义。
  • -S, --sysadmin=NAME
    该参数为扩展预留接口,不建议使用。
  • -t, --table=TABLE
    指定转储的表(或视图、或序列、或外表)对象列表,可以使用多个-t选项来选择多个表,也可以使用通配符指定多个表对象。当使用通配符指定多个表对象时,注意给 pattern 打引号,防止 shell 扩展通配符。当使用 -t 时,-n 和 -N 会失效,这是因为由 -t 选择的表的转储不受那些选项的影响。
    • -t 参数选项个数必须小于等于 100。

    -如果 -t 参数选项个数大于 100,建议使用参数 --include-table-file 来替换。
    • 当 -t 已指定时,vb_dump 不会转储已选表所附着的任何其他数据库对象。因此,无法保证某个指定表的转储结果能够自行成功地储存到一个空数据库中。
    • -t tablename 只转储在默认搜索路径中可见的表。-t *.tablename 转储数据库下所有模式下的 tablename 表。-t schema.table 转储特定模式中的表。
    • 对于表名中包含大写字母的表,在使用 -t 参数指定导出时,需对表名添加英文双引号并使用反斜杠 \ 进行转义。例如,如对于表 "abC",导出需指定 -t "abC";对于表 schema."abC",导出需指定 -t schema."abC"。
    • 不支持-t显式指定导出系统表和系统视图,除非同时指定了--enable-dump-sys-level-objs 选项。
      例如:
      vb_dump -h host_name -p port_number vexdb -f backup/bkp_shl2.sql -t schema1.table1 -t schema2.table2
      

      在上面这个例子中,schema1.table1 和 schema2.table2 会被转储。
  • -T, --exclude-table=TABLE
    不转储的表(或视图、或序列、或外表)对象列表,可以使用多个 -T 选项来选择多个表,也可以使用通配符指定多个表对象。当同时输入 -t 和 -T 时,会转储在 -t 列表中,而不在 -T 列表中的表对象。
    例如:
    vb_dump -h host_name -p port_number vexdb -f backup/bkp_shl2.sql -T table1 -T table2
    

    在上面这个例子中,table1 和 table2 在转储过程中会被排除。
  • --include-table-file=FILENAME
    指定需要 dump 的表文件。
    不支持文件中带有系统表和系统视图,除非同时指定了--enable-dump-sys-level-objs 选项。
  • --exclude-table-file=FILENAME
    指定不需要 dump 的表文件。用法详见示例 5
    同 --include-table-file,其内容格式如下:schema1.table1 schema2.table2 ...
  • --pipeline
    使用管道传输密码,禁止在终端使用。
  • -x, --no-privileges|--no-acl
    防止转储访问权限(授权/撤销命令)。
  • --column-inserts|--attribute-inserts
    以 INSERT 命令带列名(INSERT INTO表(列、…)值…)方式导出数据。这会导致恢复缓慢。但是由于该选项会针对每行生成一个独立分开的命令,所以在重新加载某行时出现的错误只会导致那行丢失,而非整个表内容。
    该选项不能和 -o,--oids 同时使用,因为 INSERT 命令不能设置 OIDS。
  • --disable-dollar-quoting
    该选项将禁止在函数体前使用美元符号$,并强制使用SQL标准字符串语法对其进行引用。
  • --disable-triggers
    该参数为扩展预留接口,不建议使用。
  • --exclude-table-data=TABLE
    指定不转储任何匹配表 pattern 的表这方面的数据。依照针对 -t 的相同规则理解该 pattern。可多次输入 --exclude-table-data 来排除匹配任何 pattern 的表。当用户需要特定表的定义但不需要其中的数据时,这个选项很有帮助。排除数据库中所有表的数据,参见 --schema-only。
  • --exclude-with
    导出的表定义,末尾不添加 WITH(orientation=row,compression=on)这样的描述。
  • --inserts
    发出 INSERT 命令(而非 COPY 命令)转储数据。这会导致恢复缓慢。但是由于该选项会针对每行生成一个独立分开的命令,所以在重新加载某行时出现的错误只会导致那行丢失,而非整个表内容。注意:如果重排列顺序,可能会导致整个恢复失败。列顺序改变时,--column-inserts 选项不受影响,虽然会更慢。
    该选项不能和 -o,--oids 同时使用,因为 INSERT 命令不能设置 OIDS。
  • --no-publications
    不转储发布。
  • --no-security-labels
    该参数为扩展预留接口,不建议使用。
  • --no-synchronized-snapshots
    并行作业中不使用同步快照。
  • --no-subscriptions
    不转储订阅。
  • --no-tablespaces
    不输出选择表空间的命令。使用该选项,无论默认表空间是哪个,在恢复过程中所有对象都会被创建。
    该选项只对文本格式有意义。针对归档格式,可以调用 vb_restore 时指定选项。
  • --no-unlogged-table-data
    不转储未记录的表数据。
    该参数为扩展预留接口,不建议使用。
  • --include-alter-table
    转储表删除列。该选项会记录列的删除。
  • --quote-all-identifiers
    强制对所有标识符加引号。
    为了向后续版本迁移,且其中可能涉及引入额外关键词,在转储相应数据库时该选项会有帮助。
  • --section=SECTION
    指定已转储的名称区段(pre-data、data 和 post-data)。
  • --serializable-deferrable
    转储过程中使用可串行化事务,以确保所使用的快照与之后的数据库状态一致;要实现该操作需要在无异常状况的事务流中等待某个点,因为这样才能保证转储成功,避免引起其他事务出现 serialization_failure 要重新再做。但是该选项对于灾难恢复没有益处。对于在原始数据库进行升级的时候,加载一个数据库的拷贝作为报告或其他只读加载共享的转储是有帮助的。没有这个选项,转储会反映一个与任何事务最终提交的序列化执行不一致的状态。如果当 vb_dump 启动时,读写事务仍处于非活动状态,即便使用该选项也不会对其产生影响。如果读写事务处于活动状态,转储的开始时间可能会延迟一段不确定的时间。
  • --dont-overwrite-file
    文本、tar 以及二进制格式情况下会重写现有文件。这对目录格式不适用。
    例如:设想这样一种情景,即当前目录下 backup.sql 已存在。如果在输入命令中输入 -f backup.sql 选项时,当前目录恰好也生成 backup.sql,文件就会被重写。
    如果备份文件已存在,且输入 --dont-overwrite-file 选项,则会报告附带“转储文件已经存在”的错误信息。
    vb_dump -p port_number vexdb -f backup.sql -F plain --dont-overwrite-file
    
  • --use-set-session-authorization
    输出符合 SQL 标准的 SET SESSION AUTHORIZATION 命令而不是 ALTER OWNER 命令来确定对象所有权。这样令转储更加符合标准,但是如果转储文件中的对象的历史有些问题,那么可能不能正确恢复。并且,使用 SET SESSION AUTHORIZATION 的转储需要数据库系统管理员的权限才能转储成功,而 ALTER OWNER 需要的权限则低得多。
  • --exclude-function
    不导出函数和存储过程。
  • --with-encryption=AES128/SM4
    指定转储数据使用的加密方式,支持 AES128 和 SM4 算法。加密导出仅支持导出格式为纯文本(-F p)。
    • 支持在使用江南天安加密机进行加密导出时指定纯文本以外的格式。即导出格式可以是目录格式(d),二进制归档格式(c),tar格式(t)或者纯文本格式(p)。
    • 该选项必须与 --with-key 和 --with-salt 同时使用。
    • AES128 加密算法使用的是 CBC 模式,SM4 加密算法使用的是 CTR 模式。
    • 当使用三未信安的加密算法时,必须使用 --with-userpin 指定创建密钥时的 KMS 用户信息。
  • --with-key=KEY
    密钥名称或者密钥索引。
    AES128 密钥规则如下:
    • 钥长度为 8~16 个字符。
    • 至少包含大写字母(A-Z),小写字母(a-z),数字(0-9),非字母数字字符(限定为~!@#$%^&*()-_=+|{};:,<.>/?)四类字符中的三类字符。
  • --with-userpin=username:password
    连接 seckms 加密服务器的 username:password 信息。
  • --with-salt=RANDVALUES
    加密导出时使用此参数传递随机盐值。必须为 16 个字符的字符串。
  • --include-extensions
    在转储中包含扩展。
  • --binary-upgrade
    该参数为扩展预留接口,不建议使用。
    --binary-upgrade 和 --binary-upgrade-usermap 必须一起使用。
  • --binary-upgrade-usermap="USER1=USER2"
    该参数为扩展预留接口,不建议使用。
  • --non-lock-table
    该参数为扩展预留接口,不建议使用。
  • --include-depend-objs
    备份结果包含依赖于指定对象的对象信息。该参数需要同 -t/--include-table-file 参数关联使用才会生效。
    该参数需要同 -t/--include-table-file 参数关联使用才会生效。
  • --exclude-self
    备份结果不包含指定对象自身的信息。该参数需要同 -t/--include-table-file 参数关联使用才会生效。
    --exclude-self 必须同 --include-depend-objs 一起使用。
  • --table-conditions="tablename; whereclauselimitclause"
    导出格式为纯文本格式时,仅导出部分数据:
    • 导出整个指定库/模式时,使用 limit 子句限制每张表的导出行数。limit n 意为导出的每张表仅包含 n 行 copy(insert)数据。
    • 单表 / 多表导出时,使用 where 子句 /limit 子句限制表的导出条件或导出行数。参考示例 7
    • whereclause 用于指定导出条件,仅导出符合条件的结果集数据。
    • limitclause 用于限制导出行数,limit n 意为导出(符合条件的)前 n 行。
    说明
    • 指定tablename时表示单表数据过滤条件,不指定 tablename 时表示多表过滤条件。
    • 支持的单表条件的筛选关键词包括:where、order、limit、offset、fetch。
    • 支持的多表条件的筛选关键词包括:limit、offset、fetch。
    • 支持使用多个--table-conditions分别指定每张表的导出条件。
    • 当指定了单表 limit 时,不支持再指定多表的 limit 条件。
    • 当指定了 -o 选项后,对于有 OIDS 的表,将会忽略 --table-conditions 中的条件并导出全部表数据。
  • --get-src-def
    导出视图或者物化视图的原始定义(包含注释)。
    未指定该选项时,默认通过反序列化的方式获取视图或物化视图的定义。此方式可以确保在视图或其依赖对象的定义发生修改的情况下,仍能正确获取到当前的有效视图定义。
  • --sess-replic-role=replica
    当备份格式为p(文本格式)时,在输出文件中设置guc参数session_replication_role为replica,以避免触发器行为、重写规则对恢复过程的影响。
    由于session_replication_role是SUSET类型参数,只允许数据库管理员用户进行修改,因此恢复时不应使用普通用户,以免因权限不足导致无法修改参数。
  • --enable-dump-sys-level-objs
    允许导出系统级对象。
    该选项必须与-n/--schema, -t/--table或者--include-table-file结合使用,单独指定既不生效也不报错:
    • 与-n/--schema结合使用,表示允许导出-n/--schema指定的系统命名空间(若存在)下的内容。
    • 与-t/--table结合使用,表示允许导出-t/--tablez指定的系统表/系统视图(若存在)。
    • 与--include-table-file结合使用,表示允许导出文件中指定的系统表/系统视图(若存在)。

连接参数

  • -h, --host=HOSTNAME
    指定主机名称。如果数值以斜杠开头,则被用作到 Unix 域套接字的路径。缺省从 PGHOST 环境变量中获取(如果已设置),否则,尝试一个 Unix 域套接字连接。该参数只针对 VexDB外,对 VexDB内本机只能用 127.0.0.1。
    例如:主机名
    环境变量:PGHOST
  • -p, --port=PORT
    指定主机端口。在开启线程池情况下,建议使用 pooler port,即主机端口+1。
    环境变量:PGPORT
  • -U, --username=NAME
    指定所连接主机的用户名。不指定连接主机的用户名时,用户默认系统管理员。
    环境变量:PGUSER
  • -w, --no-password
    不出现输入密码提示。如果主机要求密码认证并且密码没有通过其它形式给出,则连接尝试将会失败。 该选项在批量工作和不存在用户输入密码的脚本中很有帮助。
  • -W, --password=PASSWORD
    指定用户连接的密码。如果主机的认证策略是 trust,则不会对系统管理员进行密码验证,即无需输入 -W 选项;如果没有 -W 选项,并且不是系统管理员,工具会提示用户输入密码。
  • --role=ROLENAME
    指定创建转储使用的角色名。选择该选项,会使 vb_dump 连接数据库后,发起一个 SET ROLE 角色名命令。当所授权用户(由 -U 指定)没有 vb_dump 要求的权限时,该选项会起到作用,即切换到具备相应权限的角色。某些安装操作规定不允许直接以超系统管理员身份登录,而使用该选项能够在不违反该规定的情况下完成转储。
  • --rolepassword=ROLEPASSWORD
    指定角色名的密码。
    该选项必须和 --role 一起使用。

示例

示例1

执行vb_dump,导出 vexdb 数据库全量信息,导出的 backup1 文件为目录格式。备份命令如下:

vb_dump -U vexdb -W Vbase@123 -f $PGDATA/backup1 -p 5432 vexdb -F d

备份成功,打印信息如下:

vb_dump[port='5432'][vexdb][2025-08-21 15:54:11]: The total objects number is 529.
vb_dump[port='5432'][vexdb][2025-08-21 15:54:11]: [100.00%] 529 objects have been dumped.
vb_dump[port='5432'][vexdb][2025-08-21 15:54:11]: dump database vexdb successfully
vb_dump[port='5432'][vexdb][2025-08-21 15:54:11]: total time: 1918  ms

示例2

执行 vb_dump,导出 vexdb数据库全量信息,导出的文件为二进制归档格式,并指定压缩等级为 6。备份命令如下:

vb_dump -U vexdb -W Vbase@123 -f $PGDATA/backup2.dmp -Z 6 -p 5432 vexdb -F c

备份成功,打印信息如下:

vb_dump[port='5432'][vexdb][2025-08-21 16:19:45]: The total objects number is 523.
vb_dump[port='5432'][vexdb][2025-08-21 16:19:45]: [100.00%] 523 objects have been dumped.
vb_dump[port='5432'][vexdb][2025-08-21 16:19:45]: object table1 start dumping by pid 29995
vb_dump[port='5432'][vexdb][2025-08-21 16:19:45]: object table1 finish dumping by pid 29995
vb_dump[port='5432'][vexdb][2025-08-21 16:19:45]: dump database test successfully
vb_dump[port='5432'][vexdb][2025-08-21 16:19:45]: total time: 1565  ms

示例3

执行 vb_dump,指定 -a 选项,仅导出 vexdb数据库的数据。备份命令如下:

vb_dump -U vexdb -W Vbase@123 -f $PGDATA/backup3.tar -a -p 5432 vexdb -F t

打印信息如下:

vb_dump[port='5432'][vexdb][2025-08-21 17:22:59]: object table1 start dumping by pid 6065
vb_dump[port='5432'][vexdb][2025-08-21 17:22:59]: object table1 finish dumping by pid 6065
vb_dump[port='5432'][vexdb][2025-08-21 17:22:59]: dump databasevexdbsuccessfully
vb_dump[port='5432'][vexdb][2025-08-21 17:22:59]: total time: 1803  ms

示例4

使用vb_dump备份,指定不同转储参数。

  1. 使用vsql工具连接至vexdb数据库。
    vsql -d vexdb -p 5432 -r
    
  2. 创建测试数据库test4。
    create database test4;
    
  3. 切换至数据库test4中。
    \c test4;
    
  4. 创建测试表并插入数据。
    create table table1(name text,id varchar(2));
    create table table2(name text,id varchar(2));
    create table table3(name text,id varchar(2));
    
    insert into table1 values('alice',1);
    insert into table2 values('jack',2);
    insert into table3 values('bob',3);
    
  5. 执行vb_dump备份操作。
    • 备份数据库test4下的全部表,备份为二进制归档格式。
      vb_dump test4 -p 5432 -t public.* -F c -f $PGDATA/backup4_1.dmp
      
    • 备份整个test4数据库,备份为纯文本格式,备份时指定-C,表示备份文件backup4_2.sql是以创建数据库和连接到创建的数据库的命令开始的。
      vb_dump test4 -p 5432 -C -F p -f $PGDATA/backup4_2.sql
      
    • 备份test4下全部表,备份格式为纯文本格式,备份时指定-c,表示在将创建数据库对象的指令输出到备份文件之前,先将清理(删除)数据库对象的指令输出到备份文件backup4_3.sql中:
      vb_dump test4 -p 5432 -c -t public.* -F p -f $PGDATA/backup4_3.sql
      
    • 备份test4数据库下除了table3以外的表,备份的目录格式为tar包。
      vb_dump test4 -p 5432 -t public.* -T public.table3 -F t -f $PGDATA/backup4_4.tar
      
    • 备份test4所有表,指定-s只转储对象定义(模式)。
      vb_dump test4 -p 5432 -t public.* -s -F p -f $PGDATA/backup4_5.sql
      

示例5

使用vb_dump导出数据库信息时,使用--exclude-table-file选项指定文件,不导出该文件中指定的表信息。

  1. 使用vsql工具连接至vexdb数据库。
  2. 创建测试数据库test5。
    create database test5;
    
  3. 切换至数据库test5下。
    \c test5;
    
  4. 创建测试表并插入测试数据。
    create table table1(name text,id varchar(2));
    create table table2(name text,id varchar(2));
    create table table3(name text,id varchar(2));
    
    insert into table1 values('alice',1);
    insert into table2 values('jack',2);
    insert into table3 values('bob',3);
    
  5. 退出vsql程序,创建文本文件temp.sql,填写不导出的表的表名,此处以table2为例。
    echo "public.table2" > $PGDATA/temp.sql
    
  6. 使用如下备份命令,备份数据库test5下除了table2以外的表。
    vb_dump -U vexdb -W Vbase@123 -p 5432 test5 --exclude-table-file=$PGDATA/temp.sql -f $PGDATA/backup5.sql
    

示例6

执行vb_dump,仅导出依赖于指定表testtable的视图信息。然后创建新的testtable表,再恢复依赖其上的视图。

  1. 使用vsql工具连接至vexdb数据库,进入数据库创建测试表testtable。
    create table testtable(id int);
    
  2. 退出vsql程序,备份仅依赖于testtable的视图。
    vb_dump -s -p 5432 vexdb -t PUBLIC.testtable --include-depend-objs --exclude-self -f $PGDATA/backup6.sql -F p
    
  3. 使用vsql工具连接至vexdb数据库,修改testtable名称。
    ALTER TABLE PUBLIC.testtable RENAME TO testtable_bak;
    
  4. 创建新的testtable表。
    CREATE TABLE PUBLIC.testtable(a int, b int, c int);
    
  5. 退出vsql程序,还原依赖于testtable的视图。
    vsql -p 5432 vexdb -r -f $PGDATA/backup6.sql
    

示例7

使用--table conditions限定导出条件。

  1. 创建测试用数据库dbtest_07。
    create database dbtest_07;
    
  2. 创建测试表t_backup1。
    create table t_backup1(id int,col text);
    
  3. 插入测试数据。
    insert into t_backup1 values(1,'张三');
    insert into t_backup1 values(2,'李四');
    insert into t_backup1 values(3,'王五');
    insert into t_backup1 values(4,'赵六');
    
  4. 使用--table conditions限定导出条件,导出数据。
    vb_dump vexdb -t t_backup1 --table-condition="t_backup1; where id > 1 limit 1" -f $PGDATA/backup1.sql  #命令1
    vb_dump vexdb -t t_backup1 --table-condition="t_backup1; where id > 1" -f $PGDATA/backup2.sql  #命令2
    vb_dump vexdb -t t_backup1 --table-condition="t_backup1; limit 1" -f $PGDATA/backup3.sql  #命令3
    
    • 命令1:导出id大于1的行,仅导出第一条符合要求的记录。
    • 命令2:导出id大于1的行,不限制记录条数。
    • 命令3:仅导出第一条符合要求的记录。

需要帮助?

扫码添加企业微信
获得专业技术支持

企业微信二维码
🎯 快速响应💡 专业解答