kingbase sys_restore导入到新表

sys_restore 本身没有参数可以直接 “导入并自动改名表”。 sys_restore 恢复时,表名固定和备份里的原表名一致。 想要导入成新表名(原表 t1 → 导入后 t1_bak),两种方案:

方案一(推荐,简单稳妥):sys_restore 恢复原表 → SQL 改名

适用:自定义格式 dmp(sys_dump -Fc导出)

  1. 先把备份里的原表恢复到目标库
# 恢复public.t1 到目标库testdb
sys_restore -U system -d testdb -n public -t t1 /backup/t1.dmp
  1. 登录 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

  1. 目标库预先建表,结构和原表一致
CREATE TABLE public.t1_bak ( 同t1字段定义 );
  1. 只恢复数据(-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:不恢复属主,避免权限报错

posted on 2026-09-10 17:17  数据派  阅读(22)  评论(0)    收藏  举报