KingbaseES V8R6 逻辑恢复到新的 schema

前言

本文介绍一下KingbaseES V8R6版本中逻辑恢复时,将原有的对象恢复到新的schema。

sys_restore命令中如果只加入了-g(原schema) -G(新schema)参数 那么导入数据后,表的schema为最新,但是表的owner没变化。如需owner也替换为最新,还需要加入-O参数。

当然,我们还可以导出.sql格式结尾的文件,然后对文件进行编辑替换掉原来的shcema。但是对于大数据量可能会影响速度。

注:逻辑备份恢复命令的参数说明详见官方文档解释:https://help.kingbase.com.cn/v8/admin/reference/ref-client/app-pgrestore.html?highlight=sys_restore

测试

创建测试环境:

CREATE USER abc ;

CREATE DATABASE abc WITH OWNER abc;

\c abc abc

CREATE SCHEMA abc;

ALTER SCHEMA abc OWNER to abc;

GRANT USAGE ON SCHEMA abc to abc;

create table t1(id int);
查看t1表的schema,owner都是abc
abc=> \d
               List of relations
 Schema |        Name         | Type  | Owner
--------+---------------------+-------+--------
 abc    | t1                  | table | abc
 public | sys_stat_statements | view  | system
(2 rows)


创建U2用户
\c abc system

CREATE USER u2 with superuser;
CREATE SCHEMA u2 ;

ALTER SCHEMA u2 OWNER to u2;

GRANT USAGE ON SCHEMA u2 to u2;

1、sys_dump导出abc库下的表,加入-O,-g,-G参数导入

sys_dump -Uabc -Fc -f abc.dmp abc -p 2920

sys_restore 恢复刚才导出的文件,注意这里加入了-O参数,
-O参数的作用:默认原始表的owner是abc,加入此参数表示不延用原始的owner,而是根据 -U 指定owner
-g,-G 指定目标schema为u2
sys_restore  -Uu2  -dabc -Fc  -p 2920 -gabc -Gu2 -O abc.dmp

abc-#   \c abc u2
You are now connected to database "abc" as user "u2".
abc-#
abc-# \d
               List of relations
 Schema |        Name         | Type  | Owner
--------+---------------------+-------+--------
 public | sys_stat_statements | view  | system
 u2     | t1                  | table | u2
(2 rows)

下面看一下不加-O参数的导入结果,t1表的owner没变,还是导出前的abc。


sys_restore  -Uu2  -dabc -Fc  -p 2920 -gabc -Gu2  abc.dmp
abc=# \d
               List of relations
 Schema |        Name         | Type  | Owner
--------+---------------------+-------+--------
 public | sys_stat_statements | view  | system
 u2     | t1                  | table | abc
(2 rows)

2、导出sql文件,再用sed命令替换原来schema

sys_dump -Usystem -Fp -f abc.sql abc -p 2920
sed -i 's/abc/u2/g'  abc.sql 
sed -i 's/public/u2/g'  abc.sql 

ksql  abc  -Usystem  -f abc.sql
查看t1表的schema,owner已经替换为最新
abc=# \d
               List of relations
 Schema |        Name         | Type  | Owner
--------+---------------------+-------+--------
 public | sys_stat_statements | view  | system
 u2     | t1                  | table | u2
(2 rows)
posted @ 2023-02-28 09:58  KINGBASE研究院  阅读(200)  评论(0编辑  收藏  举报