OpenProject 如何恢复已删除的项目?
发布时间:2026/9/15 16:20:43 作者:尧图编辑部 阅读量:1,286

OpenProject 如何恢复已删除的项目【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject如果不小心删除了 OpenProject 中的某个项目而整库恢复备份又意味着丢掉删除之后产生的新数据官方文档给出了另一条路径只把被删项目的数据从旧备份里导回当前数据库。整个流程依赖 PostgreSQL 直接操作两个库一个存放旧备份数据的openproject_backup以及当前正在运行的openproject。准备条件按照 Restoring a deleted project 文档开始前需要满足你有一份仍然包含被删项目数据的 OpenProject 备份备份必须取自删除发生之前该备份的数据库 dump 已经还原到一个新建的、独立的数据库openproject_backup中文档给出的示例命令psql -c create database openproject_backup pg_restore -d openproject_backup openproject.pgdump当前 OpenProject 正在使用的数据库名为openproject。PostgreSQL 服务器实际跑在哪里不影响流程文档中的示例统一写作psql -d openproject_backup和psql -d openproject如果你的环境不同可能需要补充连接选项例如用户user或主机host。恢复用到的三个脚本文件都在仓库中可以直接取用dump.sqlrestore.sqlrestore.sh把下面两步的命令串在一起的整合脚本如果还没有备份可参考 Backing up 文档DEB/RPM 包安装用sudo openproject run backup生成备份到/var/db/openproject/backupDocker Compose 环境则用pg_dump从数据库容器导出。注意只有删除发生前的备份才有恢复价值。第一步在 dump.sql 中指定被删项目的 ID在执行任何命令之前先编辑dump.sql把文件开头标有DEFINE MISSING PROJECT ID HERE注释处的项目 ID 改成被删项目的真实 ID。文件中自带的示例值是SELECT 773 -- DEFINE MISSING PROJECT ID HERE这里的773只是源文件中的示例值必须替换为你自己环境中被删项目的 ID后续所有导出操作都以这个 ID 为准。第二步从备份库提取缺失的项目数据在指向备份库的psql会话所在机器上执行cat dump.sql | psql -d openproject_backup pg_dump -d openproject_backup -t missing_* -f missing_data.sqldump.sql会在备份库中为每个相关表创建一张missing_table-name表其中只包含被删项目的数据所有含project_id列的表都会按项目 ID 提取%_journals表除外此外脚本还手工列出了一组关联表如attachments、meeting_contents、messages、wiki_pages、changesets、member_roles并单独处理journals和custom_values。第二条命令用pg_dump只导出这些missing_*表得到missing_data.sql作为导入当前数据库的载体。第三步把缺失数据导入当前数据库cat missing_data.sql | psql -d openproject cat restore.sql | psql -d openproject两条命令的作用是分开的第一条只是在当前数据库里创建missing_*表此时对 OpenProject 的实际数据还没有任何影响第二条执行restore.sql把missing_table-name表中的行复制回对应的实际table-name表随后删掉所有missing_*表。整个过程在一个事务内完成项目表会优先恢复以满足外键约束目标表主键已存在的行会按ON CONFLICT ... DO NOTHING跳过不会覆盖现有数据。上面的四条命令含第二步也就是 restore.sh 的完整内容脚本头部注释再次提醒运行前必须先编辑dump.sql定义缺失项目 ID。第四步核对结果并修复项目层级恢复完成后在界面上查看项目下拉菜单和项目列表确认被恢复的项目已经出现。文档提示一种已知的后续现象恢复后项目下拉菜单中的项目层级父项目/子项目关系可能显示不正确。此时进入 OpenProject 控制台sudo openproject run console执行p Project.find_by(name: Restored project) p.update_column :lft, nil p.update_column :rgt, nil Project.rebuild!其中Restored project是文档示例中使用的项目名要替换成你实际恢复的那个项目的名称。Project.rebuild!会重建整棵项目层级树耗时取决于你的项目数量。文档说明该操作是完全安全的只影响项目下拉菜单和项目列表的显示不会改动实际数据。执行完毕后项目层级会恢复正常显示。限制与注意整个方案的前提是备份里仍保留着被删项目的数据备份取自删除之后时missing_*表导出为空无法恢复。dump.sql里手工列举关联表的那一段按文件内注释是将来引入新表或新关系时可能需要适配的部分如果数据库结构与脚本假设不符需要检查这段列表。恢复不会覆盖当前库中已存在的同主键行如果你期望的是覆盖式恢复这套脚本不满足该目标。完整备份的恢复整库还原是另一个流程参见 Restoring an OpenProject backup。【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考