我已经使用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