首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止在pg_restore期间刷新物化视图?

如何防止在pg_restore期间刷新物化视图?
EN

Stack Overflow用户
提问于 2014-06-25 15:45:44
回答 3查看 8K关注 0票数 27

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

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

当索引到位时,视图的刷新只需几分钟。由于索引在REFRESH期间没有到位,所以我在17小时内切断了REFRESH进程,这导致pg_restore失败。

我怎样才能

  1. 强制项的顺序,以便首先创建索引。
  2. 关闭物化视图的刷新,并在以后手动执行。
  3. 以自定义格式操作转储文件,以表示“无数据”。
  4. 拦截REFRESH MATERIALIZED VIEW语句并将其扔进回收站

或者其他能完成任务的解决方案?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-26 16:02:49

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

“有/你能试试'-l (el) & -L‘选项的pg_restore吗?

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

(用法示例位于页面底部)

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

应该教pg_dump/pg_restore更好地处理这个问题,这也是Craig让您尽快在这里发布的主要原因,但是为了使它现在能够正常运行,手动干预是必要的。从理论上讲,‘列表’功能应该允许你做你需要的事情。“

我认为这(pg_restore -l pg_restore -L)将通过在中间插入一个小shell脚本(将物化视图推后到列表的末尾)来达到我现在需要的位置,但接下来我还必须管理我重新排序的项(MatViews of MatViews)的依赖项。这严重地限制了物化的观点对我的用处。对于9.3.x版本,我可能需要不超过1深度的MatView依赖。

编辑:为了停止恢复中的数据,我开始这样做:

代码语言:javascript
运行
复制
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语句。感谢大卫·G·约翰斯顿的建议。

票数 24
EN

Stack Overflow用户

发布于 2014-08-20 01:30:47

作为可接受答案的补充,一旦所有索引完成和/或运行了ANALYZE,您可以使用以下命令按正确(依赖)顺序刷新物化视图:

代码语言:javascript
运行
复制
pg_restore -l -Fd backup_dir | grep 'MATERIALIZED VIEW DATA' > refresh.lst
pg_restore -L refresh.lst -Fd backup_dir mydatabase
票数 3
EN

Stack Overflow用户

发布于 2014-06-26 16:53:22

一个解决办法,你可以试试。

也许您可以在单独的模式中创建MatViews,专用于它们。为了向后兼容,您可以使用同义词。

pg_restore只能由架构使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24413161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档