postgresql - Postgresql 13 - 为组记录触发一次
问题描述
我有表:
| id |depth| depth_ex| b_id|
|----|-----|---------|-----|
| 1 | 0 | 0.00 | 1 |
| 2 | 1 | 1.00 | 1 |
| 3 | 2 | 3.00 | 1 |
| 15 | 3 | 6.00 | 1 |
| 6 | 35 | 41.00 | 1 |
| 12 | 100 | 141.00 | 1 |
| 9 | 0 | 0.00 | 2 |
| 10 | 20 | 20.00 | 2 |
| 11 | 40 | 60.00 | 2 |
对于这个表,我创建了 TRIGGER:
CREATE OR REPLACE FUNCTION depth_ex() RETURNS trigger
LANGUAGE plpgsql AS
$$
BEGIN
RAISE NOTICE '!!!!!!!!!!!!!!';
UPDATE a
SET depth_ex = sub.new_depth
FROM (
SELECT
id,
SUM(depth) OVER (ORDER BY depth ASC) AS new_depth
FROM
a
WHERE b_id = NEW.b_id
) sub
WHERE a.id = sub.id;
RETURN NULL;
END;
$$;
CREATE CONSTRAINT TRIGGER depth_ex_trig
AFTER INSERT OR UPDATE OF depth ON a
DEFERRABLE INITIALLY DEFERRED
FOR EACH ROW EXECUTE PROCEDURE depth_ex();
后:
BEGIN;
UPDATE a SET depth = 6 where id = 2;
UPDATE a SET depth = 10 where id = 3;
UPDATE a SET depth = 15 where id = 15;
COMMIT;
我期待看到!!!!!!!只有一个,但我看了三遍。
NOTICE: !!!!!!!!
NOTICE: !!!!!!!!
NOTICE: !!!!!!!!
COMMIT
Query returned successfully in 31 msec.
如何改写程序或触发器看 NOTICE: !!!!!!!!! 只有一次,还是触发一组记录(具有相同的 b_id)?
问候
解决方案
推荐阅读
- android - 如何在没有代码的情况下查看应用程序 Activity 中的数据?(屏幕抓取 + UIAutomation)
- transformer - 无法 pip install -U sentence-transformers
- javascript - 如何使用 Restify 提供 css 文件
- node.js - Firebase 使用 Socket.IO 从客户端安全地向服务器发送请求?
- python - 使用请求登录网站时,如何找到有效负载所需的参数?
- git - 应该提交 .last_build_id 吗?
- javascript - 使用 2 个或更多休息响应来调用另一个休息服务并制作一个列表
- php - 返回空描述 simplexml_load_file() php
- authentication - SSO 应该包括授权还是仅包括身份验证?
- python - 将电子邮件地址和预定小时数作为输入并从字典中返回剩余小时数的函数