









-- 有 7 个连接占用(pgAdmin 4 + JDBC),先全部断开
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'pms_dev' AND pid <> pg_backend_pid();
pg_restore -l /tmp/pms_prod_20260731_134949.dump > /tmp/sync_full.list
# 过滤出只含 sys_* 和 okr_* 的 TABLE DATA(排除 flyway_schema_history、sync_*)
grep "TABLE DATA public \(sys\|okr\)_" /tmp/sync_full.list > /tmp/sync_restore.list
# 结果:37 张表
SET session_replication_role = replica; -- 临时禁用触发器/外键检查
TRUNCATE TABLE
sys_verification_code, sys_user_authorization, sys_task_execution_log,
sys_scheduled_task, sys_role_permission, sys_role, sys_operation_log,
sys_mu_employee_scope, sys_mu_dept_scope, sys_management_unit,
sys_integration_config, sys_field_permission, sys_field_config, sys_feature,
sys_employee, sys_email_config, sys_dept, sys_account,
okr_visibility, okr_update_log, okr_progress_log, okr_plan_reminder,
okr_plan_detail, okr_plan_auto_add_dept, okr_plan_auto_add, okr_plan,
okr_period, okr_objective, okr_kr_external_anchor, okr_kr_decompose,
okr_key_result, okr_follow, okr_comment_reference, okr_comment_mention,
okr_comment, okr_notification, okr_alignment
CASCADE;
SET session_replication_role = DEFAULT;
pg_restore -h localhost -p 5432 -U openclaw \
-d pms_dev \
--data-only \ # 只导数据,不碰表结构
--no-owner \ # 不还原属主
--no-privileges \ # 不还原权限
--single-transaction \ # 整体事务,失败回滚
--disable-triggers \
-- 自动遍历所有 sys_/okr_ 序列,设置为 MAX(id)+1
-- 其中 okr_plan_auto_add_dept_id_seq1 序列名不规则(带1后缀),手动处理:
SELECT setval('okr_plan_auto_add_dept_id_seq1', 6, true);序列重置参考
这是用 PostgreSQL 的 PL/pgSQL 匿名代码块(DO $$ ... $$) 实现的,通过系统表动态遍历所有序列,不用手动一个个写。
DO $$ -- 开始一个匿名代码块(不建函数,执行完即丢弃)
DECLARE
r RECORD; -- 声明一个行变量,用来存循环中的每一条记录
max_id bigint;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。