我使用触发器根据
在多列(条件)中自动递增coalesce (max(id), 1) + 1
当使用外部签名服务时,它停止工作,该服务需要几秒钟的时间,其并发性开始显示重复值。
我使用一些条件值的序列原始地解决了这个问题,例如:
CREATE OR REPLACE FUNCTION get_webf_serial() RETURNS trigger AS
$BODY$
begin
if new.serie = 'A' then
new.folio: = nextval ('seq_A');
elseif new.serie = 'B' then
new.folio: = nextval ('seq_B');
else
new.folio: = nextval ('seq_any');
end if;
return new;
end;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;
正如您所看到的,我需要一种动态方式将序列关联到new.serie;使用elseif是有限制的。
是否有更好的方法来使用条件序列或通过代码模拟序列的行为?
提前致谢
答案 0 :(得分:0)
您可以根据new.serie
的名称创建序列名称:
CREATE OR REPLACE FUNCTION get_webf_serial() RETURNS trigger AS
$BODY$
declare
seq_name TEXT := FORMAT('seq_%s', new.serie);
begin
PERFORM * FROM information_schema.sequences
WHERE sequence_schema = 'public' AND sequence_name = seq_name;
IF NOT FOUND THEN
seq_name := 'seq_any';
END IF;
new.folio: = nextval(seq_name);
return new;
end;
$BODY$
LANGUAGE plpgsql VOLATILE COST 100;