向Postgres材料化视图添加新列

4
我需要在现有的Postgres物化视图中添加新列。
根据这份文档: https://www.postgresql.org/docs/9.3/sql-altermaterializedview.html 它列出了以下列选项:
ALTER [ COLUMN ] column_name SET STATISTICS integer
ALTER [ COLUMN ] column_name SET ( attribute_option = value [, ... ] )
ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] )
ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }

但是没有关于添加新列的语法示例,即使它说column_name是“新列或现有列的名称”

...还是应该使用SET SCHEMA new_schema吗?

2个回答

6

由于我遇到了与您相同的问题,所以我想分享一个方法,如果您像我们一样正在生产环境中使用物化视图,并且长时间不可用是不切实际的。

正如Jeremy所提到的,没有其他方法,只能删除现有的视图并重新创建。然而,根据基础查询的复杂程度,创建物化视图可能需要大量时间。改进此方法的一种方式是使用不同的临时名称创建物化视图,删除旧的视图,然后将临时名称重命名为最终名称。

用法:

CREATE MATERIALIZED VIEW myViewTmp AS (SELECT ...);
DROP MATERIALIZED VIEW myView;
ALTER MATERIALIZED VIEW myViewTmp RENAME TO myView;

DROP和ALTER操作应该只需要几百毫秒的时间,这是可以接受的。如果不行,就需要在代码中做得更聪明,让它在部署时查询一个新版本的物化视图或类似的东西。


5

设置模式仅用于将视图移动到不同的模式,对于此情况没有帮助。

您唯一的选择是删除并重新创建物化视图,不幸的是。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接