gpt4 book ai didi

postgresql - 如何防止物化 View 在 pg_restore 期间刷新?

转载 作者:行者123 更新时间:2023-11-29 11:08:45 30 4
gpt4 key购买 nike

我使用“自定义”格式 (-Fc) 的 pg_dump 创建了数据库转储。这种格式允许使用“作业”选项(-j8)调用 pg_restore。作业选项启动 8 个进程,并在 10 分钟内恢复我数据库中的绝大多数关系。

我剩下 4 个进程。其中一个是物化 View 的刷新,另外 3 个是应用于物化 View 用作数据源的 3 个表的索引。根据 pg_stat_activity,索引正在“等待”,大概是因为物化 View 的 REFRESH 仍在访问源表。

当索引就位后, View 的刷新只需要几分钟。因为索引在 REFRESH 期间未就位,所以我在 17 小时时关闭了 REFRESH 进程,这导致 pg_restore 失败。

我怎么能

  1. 强制项目的顺序以便首先创建索引
  2. 关闭实体化 View 的刷新,稍后手动进行
  3. 以自定义格式处理转储文件以说“没有数据”
  4. 拦截REFRESH MATERIALIZED VIEW语句并将其扔进垃圾桶

或者任何其他可以完成工作的解决方案?

最佳答案

David G Johnston posted an answer for me on the pgsql-hackers mailing list .

“你有/可以尝试 pg_restore 的 '-l (el) & -L' 选项吗?

http://www.postgresql.org/docs/9.3/static/app-pgrestore.html

(用法示例在页面底部)

基本上重新排序命令序列,以便物化尽可能晚地运行尽可能,或者完全禁用它。

应该教会 pg_dump/pg_restore 更好地处理这个问题,这是主要的克雷格让你尽快在这里发帖的原因,但现在要让它发挥作用人工干预将是必要的。理论上的“上市”能力应该允许你做你需要的。”

我认为这个 (pg_restore -l | pg_restore -L) 会把我带到我需要的地方现在通过在两者之间插入一个小的 shell 脚本来插入物化 View 到列表的末尾,但是我也必须为我重新排序的项目管理我自己的依赖项(MatViews of垫 View )。这非常严重地限制了物化 View 对我的用处。对于 9.3.x 版,我可能只需要 MatView 依赖项1 深。

编辑:为了停止在恢复时具体化数据,我开始这样做:

pg_dump mydatabase -Fd backup_dir
pg_restore -l -Fd backup_dir | sed '/MATERIALIZED VIEW DATA/d' > ordered.lst
pg_restore -L ordered.lst -Fd backup_dir mydatabase

这将从恢复中删除 REFRESH MATERIALIZED VIEW 语句。感谢 David G Johnston 提供的提示。

关于postgresql - 如何防止物化 View 在 pg_restore 期间刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24413161/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com