惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The GitHub Blog
The GitHub Blog
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
Engineering at Meta
Engineering at Meta
美团技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 司徒正美
I
InfoQ
S
SegmentFault 最新的问题
博客园 - 叶小钗
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
IT之家
IT之家
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
T
The Blog of Author Tim Ferriss
月光博客
月光博客
The Cloudflare Blog
U
Unit 42
GbyAI
GbyAI
L
LangChain Blog
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - 记得承诺过

pgSQL备份 流程审批节点审批信息 PeopleSoft网关 Linux 两台服务器 SSH 免密登录完整配置文档(含最终测试\+rsync免密) - 记得承诺过 openclaw的记忆机制 会话机制及子AGENT和独立AGENT openclaw的几个MD文件 OPENCLAWW安装 MCP server client交互,MCP tools鉴权 Python环境及Nodejs管理 linux 权限chmod -chown-chgrp 查询应页面的权限 获取上一行记录lag ORACLE SQLplus 登录 数据库性能优化 PeopleSoft translate value 排序 PeopleSoft Excel To CI Oracle sql function LISTAGG和字符替换 regexp_replace 据库都有哪些锁 然后 Kill session PeopleSoft Rich Text Boxes上定制Tool Bars Oracle 多行变一列的方法 Datatypes translation between Oracle and SQL Server 子节点,子部门的写法 peoplesoft SQR language
PGSQL 数据恢复
记得承诺过 · 2026-07-31 · via 博客园 - 记得承诺过

执行过程详细记录

第1步:断开本地客户端连接

-- 有 7 个连接占用(pgAdmin 4 + JDBC),先全部断开
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'pms_dev' AND pid <> pg_backend_pid();

第2步:生成恢复清单

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 张表

第3步:TRUNCATE 清空本地业务表

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;  

第4步:pg_restore 导入正式库数据

pg_restore -h localhost -p 5432 -U openclaw \
  -d pms_dev \
  --data-only \              # 只导数据,不碰表结构
  --no-owner \               # 不还原属主
  --no-privileges \          # 不还原权限
  --single-transaction \     # 整体事务,失败回滚
  --disable-triggers \       

第5步:重置自增序列

-- 自动遍历所有 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;