【问题标题】:Autoincrement field with trigger and sequence - Check if ID is in the statement [Postgres]带有触发器和序列的自动增量字段 - 检查 ID 是否在语句中 [Postgres]
【发布时间】:2013-01-16 17:18:38
【问题描述】:

我从另一个线程中获得了这个示例,它完全符合我需要知道的内容。

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的默认值设置为创建表的顺序,但我不能修改它..我只能改变触发功能。

【问题讨论】:

    标签: postgresql triggers auto-increment sequences


    【解决方案1】:

    类似:

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

    【讨论】:

    • 我试过了,但我收到一条消息错误,说“新”上不存在“id”。
    • @ComosGuy:为我工作:sqlfiddle.com/#!12/bffd9/1您使用的是哪个 Postgres 版本?
    猜你喜欢
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-14
    • 1970-01-01
    • 2015-06-09
    • 2019-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多