如何将默认值设置为字段+1的最大值。
我试过了:
,no_af integer UNIQUE NOT NULL DEFAULT max(no_af)+1
但得到了答案:
"错误:错误:自动操作les表达式par défaut";
我很高兴它没有起作用。请不要那样做。请使用序列:
,no_af serial UNIQUE NOT NULL
如果您的设计在值序列中不需要孔,请将该设计替换为允许孔的设计。
我找到了一种使用触发器的方法:
CREATE FUNCTION no_af_incrementation() RETURNS trigger AS $no_af_incrementation$
begin
if NEW.no_af is NULL then
NEW.no_af := (select max(no_af)+1 from af.od_af);
end if;
return NEW;
end;
创建一个FUNCTION
并在DEFAULT
定义中使用它。
CREATE OR REPLACE FUNCTION "public"."table_next_id"("table" text)
RETURNS "pg_catalog"."int4" AS $BODY$
DECLARE
next_id int4 = 0;
BEGIN
EXECUTE format('select max(id)+1 from %s', "table") INTO next_id;
RETURN COALESCE(next_id, 1);
END$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
CREATE TABLE "public"."merchant" (
"id" int4 NOT NULL DEFAULT table_next_id('merchant'::text),
"num" int4 NOT NULL,
CONSTRAINT "merchant_pkey" PRIMARY KEY ("id")
);
我不知道是否存在潜在的问题,尤其是在并发插入中。但它确实有效。
pg版本15.1