PostgreSQL 在同表中的其他字段更新时触发更新字段

大卫·洛佩兹

我对 SQL 触发器还很陌生,我正在为此苦苦挣扎:

我有一个存储有关属性及其价格的数据的表:

id_property price   area    price_m2
1           1500    60      25
2           3500    85      41

客户可以price经常改变他们的财产,但area不会。所以我想创建一个触发器,price_m2price列更新更新

我尝试过类似的东西或类似的变化:

首先创建函数

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'sid

注意我知道存储列的值取决于其他两个列之间的操作是一种反模式,但在这种情况下是有原因的

谢谢!

杰里米

只是为了跟进这个问题以便可以关闭它,我在评论中的建议是使用生成的列,该列自 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何用同一表的其他字段更新PostgreSQL中的多行?

在PostgreSQL-11中有条件地更新字段时出错

如何使用触发器和其他表中的数据更新字段?

更新PostgreSQL中JSON列中的字段

PostgreSQL 更新数组中每个元素的字段

Postgresql 根据值(触发器)更新特定字段

如何使用其他表中的列/字段对PostgreSQL表进行集群

发现重复项时,如何在其他表中插入忽略的MySQL行并更新字段?

如何从 1 个表中按日期获取记录并更新 Postgresql 中的其他表?

仅在其他表中找到特定值时才更新字段

PostgreSQL:从其他表触发 INSERT INTO SELECT

postgresql 9.5如何更新pg_settings表上的字段?

在JOOQ / PostgreSQL中使用自定义类型更新字段

如何使用具有多个连接的其他表中的值更新字段?

如何在MySql中基于其他表更新字段值?

仅在为空时更新列字段(PostgreSQL)

更新表时插入PostgreSQL

更新子查询中的列中的所有字段PostgreSQL

更新Postgresql中JSON字段中的嵌套标签

PostgreSQL:将列提取到单独的表中,并用相关的键更新其他列

继承表中的Postgresql更新时间戳触发器

更新文本字段时在PostgreSQL中插入换行符

如何更新存储在PostgreSQL文本字段中的json数据?

如何在PostgreSQL中更新jsonb列的字段?

使用包含单引号的json更新PostgreSQL中的jsonb字段

创建一个 PostgreSQL 函数,该函数成为从其他表中检索相关数据的表的公式字段

使用sql变量更新PostgreSQL hstore字段

PostgreSQL jsonb更新多个嵌套字段

根据正在更改的其他字段更新字段