【发布时间】:2021-11-26 06:30:35
【问题描述】:
我有一个触发器,它基本上基于两列(service_type 和前缀)获取最后插入的数字(作品集),然后增加一个值。一切正常,但在某些情况下,当同时有很多插入语句时,它会导致函数使用相同的最后插入值并复制对开列
CREATE OR REPLACE FUNCTION public.insert_folio()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
DECLARE incremental INTEGER;
SELECT max(f.folio) INTO incremental FROM "folios" f
WHERE f.prefix = NEW."prefix" AND service_type = NEW."service_type";
NEW."folio" = incremental + 1;
IF NEW."folio" IS NULL THEN NEW."folio" = 1;
END IF;
RETURN NEW;
END;
$function$
CREATE TRIGGER insert_folio BEFORE INSERT ON "folios" FOR EACH ROW EXECUTE PROCEDURE insert_folio();
样本:
| folio | service_type | prefix |
|---|---|---|
| 1 | DOCUMENT | DC |
| 1 | IMAGE | IMG |
| 1 | IMAGE | O |
| 2 | IMAGE | O |
| 2 (This should be 3) | IMAGE | O |
有什么想法吗? 谢谢!
【问题讨论】:
标签: database postgresql function triggers auto-increment