加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 16:27:50 所属栏目:百科 来源:网络整理
导读:我已经使用pg_dump以“自定义”格式(-Fc)创建了数据库的转储.此格式允许使用“作业”选项(-j8)调用pg_restore.作业选项启动8个进程,并在10分钟内恢复我的数据库中的绝大多数关系. 我剩下4个进程.其中之一是刷新物化视图,另外3个是要应用于物化视图用作数据源
我已经使用pg_dump以“自定义”格式(-Fc)创建了数据库的转储.此格式允许使用“作业”选项(-j8)调用pg_restore.作业选项启动8个进程,并在10分钟内恢复我的数据库中的绝大多数关系.

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

当索引到位时,视图的刷新只需要几分钟.因为在REFRESH期间索引不到位,所以我在17小时内关闭了REFRESH进程,这使得pg_restore失败.

我怎么能够

>强制项目的顺序,以便首先创建索引
>关闭物化视图的刷新,稍后手动执行
>以自定义格式处理转储文件,说出“无数据”
>拦截REFRESH MATERIALIZED VIEW语句并将其丢入垃圾桶

还是完成任务的其他解决方案?

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来处理这个更好,这是主要的
为什么克雷格尽快发布在这里的原因,但是现在可以实现它
手动干预将是必要的.在理论上“上市”的能力
应该允许你做你需要的.“

我认为这个(pg_restore -l | pg_restore -L)会让我在我需要的地方
现在通过在它之间插入一个小的shell脚本来实现
物化视图到列表的末尾,但后来我也会有
管理我自己的依赖关系我重新排序的项目(MatViews的
MatViews).
这严重限制了我对物化意见的实用性.
对于版本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的提示.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读