带触发器和序列的自动增量字段 - 检查ID是否在语句中[Postgres]

时间:2013-02-01 11:42:50

标签: postgresql triggers auto-increment sequences

我从另一个帖子中得到了这个样本,它非常适合我需要知道的内容。

CREATE SEQUENCE AlimentosSequencia;

CREATE TABLE alimento (
  id integer NOT NULL PRIMARY KEY
 ,name VARCHAR(255));

 CREATE OR REPLACE FUNCTION AlimentoFuncion()
 RETURNS "trigger" AS
 $BODY$
 BEGIN
   New.id:=nextval('AlimentosSequencia');
   Return NEW;
 END;
 $BODY$
 LANGUAGE 'plpgsql' VOLATILE;

 CREATE TRIGGER AlimentosTrigger
 BEFORE INSERT
 ON alimento
 FOR EACH ROW
 EXECUTE PROCEDURE AlimentoFuncion();

 INSERT INTO alimento (name) VALUES ('lemon');

这很好用!但我必须补充AlimentoFunction函数。

如果我的插入声明正在放置ID,有没有办法检查IN THE FUNCTION?

示例:

INSERT INTO alimento (name) VALUES ('lemon');

好的,工作......如果我这样做:

INSERT INTO alimento (id, name) VALUES (299, 'lemon');

我的功能必须检查是否必须使用序列。

我知道我可以将ID的默认值设置为创建表的序列,但是我无法修改它...我只是可以更改触发器功能。

1 个答案:

答案 0 :(得分:1)

类似的东西:

if new.id is NULL then 
   New.id:=nextval('AlimentosSequencia');
end if;