3

(Postgres 版本:9.3)

在没有任何解决方案的情况下四处搜索后问这个:

  • 我创建了一个简单的物化视图(实际上,我有几个)。

psql my_db -c "CREATE MATERIALIZED VIEW my_view AS (SELECT * FROM my_table);"

  • 我调用 pg_dump 来备份数据库。

pg_dump -Fc my_db

  • 在 pg_dump 运行时,我尝试使用REFRESH MATERIALIZED VIEW.

psql my_db -c "REFRESH MATERIALIZED VIEW my_view;"

REFRESH只要 pg_dump 处于活动状态,该语句就会挂起(保持“活动”)(这会使事情变得更糟,因为当视图挂起时REFRESH,我也无法SELECT摆脱它)。我的问题是:如何REFRESH在执行转储时实现视图?

如果这有帮助,我不介意从转储中排除视图的数据,我不需要保存数据。但我确实需要转储视图架构(CREATE语句)。

我已经设置了一个脚本来从转储中排除所有 m.views,但它也排除了它们的模式,并且它使我的转储命令复杂到不合理的数量,只是为了使它工作,所以我正在寻找一个更简单的解决方案。

提前致谢!

4

1 回答 1

0

所以,回答我的问题:)

我搬到了pg_basebackup而不是pg_dump. 当然它们不一样,主要是因为前者转储了整个服务器数据,但对我来说,它的工作原理无论如何都要快得多,并且在运行时刷新 m.views 没有问题。

于 2018-05-31T09:37:40.157 回答