1.进入容器
docker exec -it ...
2.直接运行脚本
sys_dump -v --progress --no-owner -F c --schema=ry_vue -f 20250113bak.dmp sx-db
- -v, --verbose 详细模式
- --progress 显示进度信息
- --no-owner 在纯文本格式中跳过对象所有权的恢复
- -F, --format=c|d|t|p 输出文件格式(自定义、目录、tar、纯文本(默认))
- sx-db 指定数据库
- --schema=模式 仅转储指定的模式
- -f, --file=文件名 输出文件或目录名称
3. 导出dump文件
4. 使用dump文件
- 跨数据库
sys_restore -U admin -d test -v 20250113bak.dmp
- -d <database_name> 指定了目标数据库名。
- -v 参数用于启用详细模式,显示恢复过程中的更多细节。
- 同一数据库,不同schema
sys_restore -U admin -d sx-db --fromSchema=ry_vue --targetSchema=sx_model --clean --if-exists 20250526bak.dmp
- **`--fromSchema`**:指定备份文件中的原 Schema 名(例如 `ry_vue`)。
- **`--targetSchema`**:指定恢复后的新 Schema 名(例如 `sx-model`)。
其他【连接数据库】
- 本地数据库
ksql -U myuser -d mydb -K mypassword - 远程数据库
ksql -U myuser -d mydb -h 192.168.1.100 -p 54321
删除无关表以及序列
先连接到数据库,再执行下列命令
DO $$
DECLARE
tbl_name TEXT; -- 表名变量(格式:Schema.表名)
drop_sql TEXT; -- 动态 SQL 语句
seq_name TEXT; -- 序列名变量
BEGIN
-- 遍历所有符合条件的表
FOR tbl_name IN
SELECT table_name
FROM information_schema.tables
WHERE
table_type = 'BASE TABLE' -- 仅限普通表(排除视图)
AND table_schema = 'sx_model' -- 指定 Schema
AND table_name NOT LIKE '%sx_model%' -- 保留包含 sx_model 的表
AND table_name NOT LIKE '%sys%' -- 保留包含 sys 的表
LOOP
-- 生成删除命令(直接使用已包含 Schema 的完整表名)
drop_sql := format('DROP TABLE IF EXISTS sx_model.%s CASCADE', tbl_name);
RAISE NOTICE '执行命令: %', drop_sql;
EXECUTE drop_sql;
END LOOP;
-- 删除不再被任何表引用的孤立序列
FOR seq_name IN
SELECT sequence_name
FROM information_schema.sequences
WHERE
sequence_schema = 'sx_model' -- 指定 Schema
AND sequence_name NOT LIKE '%sx_model%' -- 保留含 sx_model 的序列
AND sequence_name NOT LIKE '%sys%' -- 保留含 sys 的序列
LOOP
EXECUTE format('DROP SEQUENCE IF EXISTS sx_model.%s CASCADE;', seq_name); -- 级联删除序列
RAISE NOTICE '已删除序列: %', seq_name; -- 输出日志
END LOOP;
END
$$;
导入sql文件
ksql -U admin -d sx-model -f ry_vue_kingbase.sql
复制数据表到 另一个schema
DO $$
DECLARE
src_table TEXT; -- 源表名(格式:源Schema.表名)
dst_table TEXT; -- 目标表名(格式:目标Schema.表名)
BEGIN
-- 遍历所有符合条件的表
FOR src_table IN
SELECT table_name
FROM information_schema.tables
WHERE
table_schema = 'sx_model' -- 源 Schema 名
AND table_name LIKE 'sx_model%' -- 表名前缀
AND table_type = 'BASE TABLE' -- 仅处理普通表
LOOP
-- 生成目标表名(去掉前缀或保留)
dst_table := CONCAT('sx_dev.',src_table);
src_table := CONCAT('sx_model.',src_table);
-- 复制表结构(使用 LIKE 语法包含索引、约束)
EXECUTE format('CREATE TABLE %s (LIKE %s INCLUDING ALL)', dst_table, src_table);
-- 复制数据
EXECUTE format('INSERT INTO %s SELECT * FROM %s', dst_table, src_table);
-- 可选:同步表注释
EXECUTE format('COMMENT ON TABLE %s IS %L',
dst_table,
(SELECT obj_description(src_table::regclass, 'pg_class')));
RAISE NOTICE '已复制表: % → %', src_table, dst_table;
END LOOP;
END
$$;