【发布时间】:2018-09-19 20:36:39
【问题描述】:
我想在不丢失数据的情况下更改 PostgreSQL 10.1 物化视图的名称。刷新此物化视图需要 12 多个小时。
因此,为了测试 alter materialized view 语句,我在另一个定义中有 WITH NO DATA 子句的物化视图上进行了尝试。
当我运行命令时:
ALTER MATERIALIZED VIEW etl.mv_test
RENAME to etl.vw_test
WITH NO DATA 子句已更改为 WITH DATA。所以我认为视图将被刷新。是否可以在更改后的视图中保留 WITH NO DATA 子句?
【问题讨论】:
-
重命名后仍然会抛出“未填充”错误(请参阅here),这可能意味着它尚未刷新。您说
WITH NO DATA子句已更改;你到底在哪里看?第三方管理工具(包括 pgAdmin)在重构 DDL 语句时往往会遗漏其中一些可选子句。除非它来自pg_dump或psql,否则我不会相信它(即使那样,它也可能是一个错误)。 -
我正在使用 PGAdmin。更改视图后,我打开 CREATE SCRIPT 并且 WITH NO DATA 已更改
-
我猜这只是一个 pgAdmin 错误。您看到的
CREATE语句并非来自 Postgres,pgAdmin 是通过检查目录表来构建它的,但它并不总是正确的。尝试将您的视图定义为SELECT 1/0;你会知道它什么时候被刷新,因为它会抛出一个被零除的错误。 -
我认为你是对的!我尝试了 select 1/0 并在更改视图名称时没有抛出错误!现在将尝试使用带有数据的 MV,同时更改 MV 源中的数据。谢谢!
标签: postgresql materialized-views