我对 SQL 触发器还很陌生,我正在为此苦苦挣扎:
我有一个存储有关属性及其价格的数据的表:
id_property price area price_m2
1 1500 60 25
2 3500 85 41
客户可以price
经常改变他们的财产,但area
不会。所以我想创建一个触发器,price_m2
当price
列更新时更新列。
我尝试过类似的东西或类似的变化:
首先创建函数
CREATE FUNCTION update_precio_m2() RETURNS TRIGGER
AS
$$
BEGIN
update my_table
set price_m2 = new.price/old.area
where (old.id = new.id);
RETURN new;
end
$$
language plpgsql;
然后创建触发器
CREATE TRIGGER update_price_m2
AFTER UPDATE ON my_table
FOR EACH ROW
WHEN (
old.price IS DISTINCT FROM new.price
)
EXECUTE PROCEDURE update_price_m2();
但是当我更改时,price
我得到了意想不到的结果,例如当我只想更改一个(更改的那个)的值时,price_m2
列更改为各种。id's
id
注意我知道存储列的值取决于其他两个列之间的操作是一种反模式,但在这种情况下是有原因的
谢谢!
只是为了跟进这个问题以便可以关闭它,我在评论中的建议是使用生成的列,该列自 postgres 12 以来可用:
https://www.postgresql.org/docs/current/ddl-generated-columns.html
语法将是这样的:
CREATE TABLE my_table (
id_property bigint GENERATED ALWAYS AS IDENTITY,
price int,
area int,
price_m2 int GENERATED ALWAYS AS (price / area) STORED
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句