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)
KINGBASE研究院