一、概述
gs_restore是openGauss提供的针对gs_dump导出数据的导入工具。通过此工具可由gs_dump生成的导出文件进行导入。
二、工具
1、特点
gs_restore是openGauss提供的针对gs_dump导出数据的导入工具。通过此工具可将由gs_dump生成的导出文件进行导入。
gs_restore工具由操作系统用户omm执行。
主要功能包含:
- 导入到数据库
如果连接参数中指定了数据库,则数据将被导入到指定的数据库中。其中,并行导入必须指定连接的密码。导入时生成列会自动更新,并像普通列一样保存。 - 导入到脚本文件
如果未指定导入数据库,则创建包含重建数据库所必须的SQL语句脚本并写入到文件或者标准输出。等效于直接使用gs_dump导出为纯文本格式。
2、语法
gs_restore [OPTION]... FILE
说明:
FILE没有短选项或长选项。用来指定归档文件所处的位置。
作为前提条件,需输入dbname或-l选项。不允许用户同时输入dbname和-l选项。
gs_restore默认是以追加的方式进行数据导入。为避免多次导入造成数据异常,在进行导入时,建议使用“-c” 参数,在重新创建数据库对象前,清理
(删除)已存在于将要还原的数据库中的数据库对象。
日志打印无开关,若需隐藏日志,请将日志重定向到日志文件。若恢复表数据时,数据量很大,会分批恢复,因此会多次出现“表数据已完成导入”的日志。
通用参数:
-d, --dbname=NAME
连接数据库dbname并直接导入到该数据库中。
-f, --file=FILENAME
指定生成脚本的输出文件,或使用-l时列表的输出文件。
默认是标准输出。
说明:
-f不能同-d一起使用。
-F, --format=c|d|t
指定归档格式。由于gs_restore会自动决定格式,因此不需要指定格式。
取值范围:
c/custom:该归档形式为gs_dump的自定义格式。
d/directory:该归档形式是一个目录归档形式。
t/tar:该归档形式是一个tar归档形式。
-l, --list
列出归档形式内容。这一操作的输出可用作-L选项的输入。注意如果像-n或-t的过滤选项与-l使用,过滤选项将会限制列举的项目(即归档形式内容)。
导入参数:
-a, --data-only
只导入数据,不导入模式(数据定义)。gs_restore的导入是以追加方式进行的。
-c, --clean
在重新创建数据库对象前,清理(删除)已存在于将要还原的数据库中的数据库对象。
-C, --create
导入到数据库之前会先使用CREATE DATABASE创建数据库(指定该选项后,-d指定的数据库仅用以执行CREATE DATABASE命令,所有数据将被导入到
创建的数据库中)。
-e, --exit-on-error
当发送SQL语句到数据库时如果出现错误,请退出。默认状态下会继续,且在导入后会显示一系列错误信息。
-n, --schema=NAME
只导入已列举的模式中的对象。
该选项可与-t选项一起用以导入某个指定的表。
多次输入-n _schemaname_可以导入多个模式。
例如:
gs_restore -h host_name -p port_number -d postgres -n sch1 -n sch2 backup/MPPDB_backup.tar
在上面这个例子中,sch1和sch2会被导入。
-s, --schema-only
只导入模式(数据定义),不导入数据(表内容)。当前的序列值也不会导入。
-t, --table=NAME
只导入已列举的表定义、数据或定义和数据。该选项与-n选项同时使用时,用来指定某个模式下的表对象。-n参数不输入时,默认为PUBLIC模式。多次
输入-n <schemaname> -t <tablename>可以导入指定模式下的多个表。
例如:
导入PUBLIC模式下的table1
gs_restore -h host_name -p port_number -d postgres -t table1 backup/MPPDB_backup.tar
导入test1模式下的test1和test2模式下test2
gs_restore -h host_name -p port_number -d postgres -n test1 -t test1 -n test2 -t test2 backup/MPPDB_backup.tar
导入PUBLIC模式下的table1和test1 模式下table1
gs_restore -h host_name -p port_number -d postgres -n PUBLIC -t table1 -n test1 -t table1 backup/MPPDB_backup.tar
说明:
-t不支持schema_name.table_name的输入格式,指定此格式不会报错,但不会生效。
3、示例
特例:执行gsql程序,使用如下选项导入由gs_dump/gs_dumpall生成导出文件夹(纯文本格式)的MPPDB_backup.sql文件到postgres数据库。
gsql -d postgres -p 15400 -W Bigdata@123 -f /home/omm/test/MPPDB_backup.sql
gs_restore用来导入由gs_dump生成的导出文件。
示例1:执行gs_restore,将导出的MPPDB_backup.dmp文件(自定义归档格式)导入到postgres数据库。
gs_restore -W Bigdata@123 backup/MPPDB_backup.dmp -p 15400 -d postgres
示例2:执行gs_restore,将导出的MPPDB_backup.tar文件(tar格式)导入到postgres数据库。
gs_restore backup/MPPDB_backup.tar -p 15400 -d postgres
示例3:执行gs_restore,将导出的MPPDB_backup文件(目录格式)导入到postgres数据库。
gs_restore backup/MPPDB_backup -p 15400 -d postgres
示例4:执行gs_restore,使用自定义归档格式的MPPDB_backup.dmp文件来进行如下导入操作。 导入PUBLIC模式下所有对象的定义和数据。在导入
时会先删除已经存在的对象,如果原对象存在跨模式的依赖则需手工强制干预。
gs_restore backup/MPPDB_backup.dmp -p 15400 -d postgres -e -c -n PUBLIC
手工删除依赖,导入完成后再重新创建。
gs_restore backup/MPPDB_backup.dmp -p 15400 -d postgres -e -c -n PUBLIC
示例5:执行gs_restore,使用自定义归档格式的MPPDB_backup.dmp文件来进行如下导入操作。只导入PUBLIC模式下表table1的定义。
gs_restore backup/MPPDB_backup.dmp -p 15400 -d postgres -e -c -s -n PUBLIC -t table1
示例6:执行gs_restore,使用自定义归档格式的MPPDB_backup.dmp文件来进行如下导入操作。只导入PUBLIC模式下表table1的数据。
gs_restore backup/MPPDB_backup.dmp -p 15400 -d postgres -e -a -n PUBLIC -t table1