向 Postgres 物化视图添加新列

DSh*_*ltz 4 postgresql materialized-views

我需要向 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 }
Run Code Online (Sandbox Code Playgroud)

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

...或者我应该使用SET SCHEMA new_schema

小智 7

由于我遇到了同样的问题,我想我会分享一种可能有益的方法,如果您像我们一样在生产环境中使用物化视图,并且长期不可用它是不切实际的。

正如 Jeremy 提到的,除了删除现有视图并重新创建它之外,没有其他方法。但是,创建物化视图可能会花费大量时间,具体取决于基础查询的复杂性。改进这一问题的一种方法是使用不同的临时名称创建物化视图,删除旧名称并将临时名称重命名为最终名称。

使用:

CREATE MATERIALIZED VIEW myViewTmp AS (SELECT ...);
DROP MATERIALIZED VIEW myView;
ALTER MATERIALIZED VIEW myViewTmp RENAME TO myView;
Run Code Online (Sandbox Code Playgroud)

DROP & ALTER 应该只需要 100 毫秒,这是可以接受的。如果没有,您的代码必须更加智能,才能在部署时查询新版本的物化视图或类似的内容。


Jer*_*emy 5

设置架构只是为了将视图移动到不同的架构,在这种情况下没有帮助。

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