使用gs_restore命令导入数据

    gs_restore具备如下两种功能。

    • 导入至数据库

      如果指定了数据库,则数据将被导入到指定的数据库中。其中,并行导入必须指定连接数据库的密码。导入时生成列会自动更新,并像普通列一样保存。

    • 导入至脚本文件

      如果未指定导入数据库,则创建包含重建数据库所需的SQL语句脚本,并将其写入至文件或者标准输出。该脚本文件等效于gs_dump导出的纯文本格式文件。

    gs_restore工具在导入时,允许用户选择需要导入的内容,并支持在数据导入前对等待导入的内容进行排序。

    1. 以操作系统用户omm登录数据库主节点。

    2. 使用gs_restore命令,从postgres整个数据库内容的导出文件中,将数据库的所有对象的定义导入到backupdb。

      表 1 常用参数说明

      其他参数说明请参见《工具与命令参考》中“服务端工具 > gs_restore”章节。

    示例一:执行gs_restore,导入指定MPPDB_backup.dmp文件(自定义归档格式)中postgres数据库的数据和对象定义。

    1. Password:
    2. gs_restore[2017-07-21 19:16:26]: restore operation successful
    3. gs_restore: total time: 13053 ms

    示例二:执行gs_restore,导入指定MPPDB_backup.tar文件(tar归档格式)中postgres数据库的数据和对象定义。

    1. gs_restore backup/MPPDB_backup.tar -p 8000 -d backupdb
    2. gs_restore[2017-07-21 19:21:32]: restore operation successful
    3. gs_restore[2017-07-21 19:21:32]: total time: 21203 ms

    示例三:执行gs_restore,导入指定MPPDB_backup目录文件(目录归档格式)中postgres数据库的数据和对象定义。

    1. gs_restore backup/MPPDB_backup -p 8000 -d backupdb
    2. gs_restore[2017-07-21 19:26:46]: restore operation successful
    3. gs_restore[2017-07-21 19:26:46]: total time: 21003 ms

    示例四:执行gs_restore,将postgres数据库的所有对象的定义导入至backupdb数据库。导入前,数据库存在完整的定义和数据,导入后,backupdb数据库只存在所有对象定义,表没有数据。

    1. gs_restore /home/omm/backup/MPPDB_backup.tar -p 8000 -d backupdb -s -e -c
    2. Password:
    3. gs_restore[2017-07-21 19:46:27]: restore operation successful
    4. gs_restore[2017-07-21 19:46:27]: total time: 32993 ms

    示例五:执行gs_restore,导入MPPDB_backup.dmp文件中PUBLIC模式的所有定义和数据。在导入时会先删除已经存在的对象,如果原对象存在跨模式的依赖则需手工强制干预。

    手工删除依赖,导入完成后再重新创建。

    1. gs_restore backup/MPPDB_backup.dmp -p 8000 -d backupdb -e -c -n PUBLIC
    2. gs_restore[2017-07-21 19:52:26]: restore operation successful
    3. gs_restore[2017-07-21 19:52:26]: total time: 2203 ms

    示例六:执行gs_restore,导入MPPDB_backup.dmp文件中hr模式下表hr.staffs的定义。在导入之前,hr.staffs表不存在,需要确保存在hr的schema。

    1. gs_restore backup/MPPDB_backup.dmp -p 8000 -d backupdb -e -c -s -n hr -t staffs
    2. gs_restore[2017-07-21 19:56:29]: restore operation successful
    3. gs_restore[2017-07-21 19:56:29]: total time: 21000 ms

    示例七:执行gs_restore,导入MPPDB_backup.dmp文件中hr模式下表hr.staffs的数据。在导入之前,hr.staffs表不存在数据,需要确保存在hr的schema。

    1. gs_restore backup/MPPDB_backup.dmp -p 8000 -d backupdb -e -a -n hr -t staffs
    2. gs_restore[2017-07-21 20:12:32]: restore operation successful
    3. gs_restore[2017-07-21 20:12:32]: total time: 20203 ms

    示例八:执行gs_restore,导入指定表hr.staffs的定义。在导入之前,hr.staffs表的数据是存在的。

    1. human_resource=# select * from hr.staffs;
    2. staff_id | first_name | last_name | email | phone_number | hire_date | employment_id | salary | commission_pct | manager_id | section_id
    3. ----------+-------------+-------------+----------+--------------------+---------------------+---------------+----------+----------------+------------+------------
    4. 201 | Michael | Hartstein | MHARTSTE | 515.123.5555 | 1996-02-17 00:00:00 | MK_MAN | 13000.00 | | 100 | 20
    5. gsql -d human_resource -p 8000
    6. gsql((openGauss x.x.x build f521c606) compiled at 2021-09-16 14:55:22 commit 2935 last mr 6385 release)
    7. Type "help" for help.
    8. human_resource=# drop table hr.staffs CASCADE;
    9. NOTICE: drop cascades to view hr.staff_details_view
    10. DROP TABLE
    11. gs_restore /home/omm/backup/MPPDB_backup.tar -p 8000 -d human_resource -n hr -t staffs -s -e
    12. Password:
    13. restore operation successful
    14. total time: 904 ms
    15. human_resource=# select * from hr.staffs;
    16. staff_id | first_name | last_name | email | phone_number | hire_date | employment_id | salary | commission_pct | manager_id | section_id
    17. ----------+------------+-----------+-------+--------------+-----------+---------------+--------+----------------+------------+------------
    18. (0 rows)

    示例九:执行gs_restore,导入staffs和areas两个指定表的定义和数据。在导入之前,staffs和areas表不存在。

    示例十:执行gs_restore,导入hr的模式,包含模式下的所有对象定义和数据。

    1. gs_restore /home/omm/backup/MPPDB_backup1.dmp -p 8000 -d backupdb -n hr -e
    2. Password:
    3. restore operation successful
    4. total time: 702 ms

    示例十一:执行gs_restore,同时导入hr和hr1两个模式,仅导入模式下的所有对象定义。

    1. gs_restore /home/omm/backup/MPPDB_backup2.dmp -p 8000 -d backupdb -n hr -n hr1 -s
    2. Password:
    3. restore operation successful
    4. total time: 665 ms

    示例十二:执行gs_restore,将human_resource数据库导出文件导入至backupdb数据库中。

    1. openGauss=# create database backupdb;
    2. CREATE DATABASE
    3. gs_restore /home/omm/backup/MPPDB_backup.tar -p 8000 -d backupdb
    4. restore operation successful
    5. total time: 23472 ms
    6. gsql -d backupdb -p 8000 -r
    7. gsql((openGauss x.x.x build f521c606) compiled at 2021-09-16 14:55:22 commit 2935 last mr 6385 release)
    8. Non-SSL connection (SSL connection is recommended when requiring high-security)
    9. Type "help" for help.
    10. backupdb=# select * from hr.areas;
    11. area_id | area_name
    12. ---------+------------------------
    13. 4 | Middle East and Africa
    14. 1 | Europe
    15. 2 | Americas
    16. 3 | Asia
    17. (4 rows)

    示例十三:用户user1不具备将导出文件中数据导入至数据库backupdb的权限,而角色role1具备该权限,要实现将文件数据导入数据库backupdb,可以在导出命令中设置–role角色为role1,使用role1的权限,完成导出目的。

    1. human_resource=# CREATE USER user1 IDENTIFIED BY "1234@abc";
    2. CREATE ROLE role1 with SYSADMIN IDENTIFIED BY "abc@1234";
    3. gs_restore -U user1 /home/omm/backup/MPPDB_backup.tar -p 8000 -d backupdb --role role1 --rolepassword abc@1234
    4. Password:
    5. restore operation successful
    6. total time: 554 ms
    7. gsql -d backupdb -p 8000 -r
    8. gsql((openGauss x.x.x build f521c606) compiled at 2021-09-16 14:55:22 commit 2935 last mr 6385 release)
    9. Non-SSL connection (SSL connection is recommended when requiring high-security)
    10. Type "help" for help.
    11. backupdb=# select * from hr.areas;
    12. area_id | area_name
    13. ---------+------------------------
    14. 4 | Middle East and Africa
    15. 1 | Europe
    16. 2 | Americas
    17. (4 rows)