【发布时间】:2020-02-27 13:06:54
【问题描述】:
我想创建一个触发器,它可以更新 PostgreSQL 上同一张表上的另一行。
如果我像这样运行查询:
UPDATE tokens
SET amount = (SELECT amount FROM tokens WHERE id = 1)
where id = 2
我预期的这些结果。
说明:
我想在id:2的行上设置字段amount,其中amount的值来自子查询的查询结果,所以id:2上的金额值与id:1相同
希望通过这个创建的触发器,我可以更新id=1 上的amount 值,因此id:2 上的amount 值与id:1 相同
更新结果前:
id | amount|
1 | 200 |
2 | 200 |
当我将 id:1 上的 amount 值更新为 100 时,id:2 上的 amount 值变为 100
更新结果后:
id | amount|
1 | 100 |
2 | 100 |
我的临时解决方案更新: 我只是像这样创建 UDF
CREATE FUNCTION update_amount(id_ops integer, id_mir integer) returns boolean LANGUAGE plpgsql AS $$
BEGIN
UPDATE tokens SET amount = (SELECT amount FROM tokens WHERE id = id_ops) WHERE id = id_mir;
RETURN 1;
END;
$$;
说明:
- id_ops:我总是更新数量的id
- id_mir: id 在我用 id_ops 更新金额后,金额会自动更新
使用我编写的 UDF 解决问题的示例:
- 我将id:1的数量更新为2000。id:2的数量没有更新为2000
- 当我运行查询时选择 update_amount(1,2);
- id:2 的数量与 id:1 的数量相同
我需要一个 PostgreSQL 上的触发器来自动化或替换我编写的 UDF 的功能
【问题讨论】:
-
你在哪一部分有困难?
-
感谢您的评论,我很难将我写的 UDF 转换为触发器,因此我可以替换我的临时解决方案。问候
-
要更新的行是刚刚插入的行还是其他行?
-
嗨,我总是更新的行是 id 1,当我更新 id 1 上的金额值时,id 2 上的金额值反映了更新后的金额值 id 1
-
一般情况总是在更新 id N 时想要 id N+1 的情况吗? “update tokens set amount = 10 where id = 3;”会发生什么?甚至“更新令牌设置数量 = 50 其中 id = 2;”?
标签: postgresql triggers user-defined-functions