如何更改 Postgres 12 GENERATED 列的定义?
CREATE TABLE test (
id serial PRIMARY KEY,
val_a int4 NOT NULL DEFAULT 0,
val_b int4 NOT NULL DEFAULT 0,
val_sum int4 generated always AS (val_a + val_b) stored
);
我试过了
ALTER TABLE test ALTER COLUMN val_sum TYPE int4 generated always AS (val_a + val_b + 1) stored;
ALTER TABLE test ALTER COLUMN val_sum SET generated always AS (val_a + val_b + 1) stored;
但两者都给出语法错误。
另一种方法是删除并添加列,这很有效,但我想知道如何像任何其他列一样简单地更改它。
我不确定这是正确的答案,但阅读有关 ALTER TABLE的文档我会说:不,你不能。
似乎唯一允许column_constraint的命令是 ADD COLUMN
实际上,您可以将约束名称添加到计算列:
现在作为一种可能的解决方法,您可以删除该列并再次添加它吗?
小提琴
摆弄测试
注意事项
这仅在您不更改生成列的类型时才有效。如果您要更改所依赖的列,它也不起作用。(因此,需要明确的是,在给出的具体示例中它对您没有帮助)
而是依赖一个函数
创建一个函数,然后使用该函数生成列。这样,您可以在不使用任何
ALTER
语句的情况下更新生成的列定义。如果您的视图取决于表,这将非常方便,因为否则需要删除并重新创建视图。例子