向 Postgres 物化视图添加新列
Add a new column to a Postgres materialized view
我需要向 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?
设置模式只是为了将视图移动到不同的模式,在这种情况下无济于事。
不幸的是,您唯一的选择是 re-create 实体化视图。
由于我遇到了同样的问题,我想我会分享一种方法,如果您像我们一样在生产环境中使用实体化视图并且长时间不可用是不切实际的,那么我想分享一种方法可能会有所帮助。
正如 Jeremy 提到的,除了删除现有视图并重新创建它之外别无他法。但是,创建物化视图可能会花费大量时间,具体取决于底层查询的复杂性。改进这一点的一种方法是创建具有不同临时名称的实体化视图,删除旧名称并将临时名称重命名为最终名称。
使用:
CREATE MATERIALIZED VIEW myViewTmp AS (SELECT ...);
DROP MATERIALIZED VIEW myView;
ALTER MATERIALIZED VIEW myViewTmp RENAME TO myView;
DROP & ALTER 应该只需要 100 毫秒,这是可以接受的。如果没有,您将必须在代码中更聪明,让它在部署时查询新版本的物化视图或类似的东西。
我需要向 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?
设置模式只是为了将视图移动到不同的模式,在这种情况下无济于事。
不幸的是,您唯一的选择是 re-create 实体化视图。
由于我遇到了同样的问题,我想我会分享一种方法,如果您像我们一样在生产环境中使用实体化视图并且长时间不可用是不切实际的,那么我想分享一种方法可能会有所帮助。
正如 Jeremy 提到的,除了删除现有视图并重新创建它之外别无他法。但是,创建物化视图可能会花费大量时间,具体取决于底层查询的复杂性。改进这一点的一种方法是创建具有不同临时名称的实体化视图,删除旧名称并将临时名称重命名为最终名称。
使用:
CREATE MATERIALIZED VIEW myViewTmp AS (SELECT ...);
DROP MATERIALIZED VIEW myView;
ALTER MATERIALIZED VIEW myViewTmp RENAME TO myView;
DROP & ALTER 应该只需要 100 毫秒,这是可以接受的。如果没有,您将必须在代码中更聪明,让它在部署时查询新版本的物化视图或类似的东西。