如何在 PostgreSQL 中刷新存储的生成列的值。
例子
CREATE TABLE people (
first_name TEXT,
last_name TEXT
);
CREATE OR REPLACE FUNCTION name(people) RETURNS text AS
$$
SELECT $1.first_name || ' ' || $1.last_name
$$ LANGUAGE SQL STRICT
IMMUTABLE
;
alter table people add column full_name text GENERATED ALWAYS AS (name(people)) STORED;
insert into people(first_name, last_name) values('John', 'Smith');
select full_name, full_name='John Smith' as pass from people;
如果需要更改用于生成存储列值的函数,在这种情况下name
,您如何要求 postgres 重新计算这些字段。
例如。
CREATE OR REPLACE FUNCTION name(people) RETURNS text AS
$$
SELECT $1.first_name || ' ' || $1.last_name || ' function change'
$$ LANGUAGE SQL STRICT
IMMUTABLE
;
-- refresh generated column here
select full_name, full_name='John Smith function change' as pass from people;
抱歉,这是一个有点奇怪的例子。
唯一的方法是使用无操作更新重写整个表,例如:
这将重新评估该功能。
之后您可能想
VACUUM (FULL)
在桌子上跑步以回收浪费的空间。