kingbase sys_restore导入到新表
sys_restore 本身没有参数可以直接 “导入并自动改名表”。 sys_restore 恢复时,表名固定和备份里的原表名一致。 想要导入成新表名(原表 t1 → 导入后 t1_bak),两种方案:
方案一(推荐,简单稳妥):sys_restore 恢复原表 → SQL 改名
适用:自定义格式 dmp(
sys_dump -Fc导出)
- 先把备份里的原表恢复到目标库
# 恢复public.t1 到目标库testdb
sys_restore -U system -d testdb -n public -t t1 /backup/t1.dmp
- 登录 ksql,直接重命名表
\c testdb
ALTER TABLE public.t1 RENAME TO t1_bak;
优点:命令最简单,生产常用;索引、约束、序列一起跟着改。
方案二:导出成 SQL 脚本,文本替换表名,再 ksql 执行(需要直接生成新表名,不建原表)
原理:sys_restore 可以把 dmp 转成 sql 文本,sed 替换表名,再导入库。
#1. 将dmp导出为sql脚本
sys_restore -f table.sql /backup/t1.dmp
#2. 替换表名(原t1改为t1_bak)
sed -i 's/t1/t1_bak/g' table.sql
#3. ksql执行导入
ksql -U system -d testdb -f table.sql
⚠️ 坑点:sed 全局替换容易误替换字段、注释里相同字符串,小表简单场景使用。
方案三:只导入数据到已经建好的新表(结构自己提前建)
场景:新表 t1_bak 已经建好,只把备份里 t1 的数据灌入 t1_bak
- 目标库预先建表,结构和原表一致
CREATE TABLE public.t1_bak ( 同t1字段定义 );
- 只恢复数据(
-a仅数据,不执行建表语句)
sys_restore -U system -d testdb -n public -t t1 -a /backup/t1.dmp
⚠️ 这个会尝试往 t1 插入,不是 t1_bak! 所以要配合:导出 COPY 语句,替换表名后导入,或者用 dblink/insert select。
补充:如果是【导入到另外一个模式(schema)】
KES 支持 --target-schema,直接把原模式的表恢复到新模式(表名不变,模式变)
#原public.t1 恢复到new_schema.t1
sys_restore -U system -d testdb -n public --target-schema=new_schema -t t1 /backup/t1.dmp
常用参数说明
-t 表名:只恢复指定表-n 原模式名:指定原 schema-s:仅恢复表结构(不含数据)-a:仅恢复数据(不建表)--no-owner:不恢复属主,避免权限报错
浙公网安备 33010602011771号