加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 在Postgres中使用触发器和序列创建自动增量字段

发布时间:2020-12-13 16:03:18 所属栏目:百科 来源:网络整理
导读:我正在使用触发器和序列来创建一个自动增量字段(如SERIAL).我知道只能在字段上使用序列或SERIAL类型,但我必须使用两种方法(触发器和secuences)解决此问题 CREATE SEQUENCE AlimentosSequencia;CREATE OR REPLACE FUNCTION AlimentoFuncion() RETURNS "trigge
我正在使用触发器和序列来创建一个自动增量字段(如SERIAL).我知道只能在字段上使用序列或SERIAL类型,但我必须使用两种方法(触发器和secuences)解决此问题

CREATE SEQUENCE AlimentosSequencia;

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();

我尝试这种组合,但是没有用,表alimento只有两个字段,整数id(带触发器和序列的自动增量)和varchar名称.

有什么建议吗?

谢谢

解决方法

正如其他用户告诉您的那样,您不需要使用触发器.您可以像这样声明表:

CREATE SEQUENCE AlimentosSequencia;

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

当您插入新记录时:

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

另一种可能性是将id字段声明为serial type,它将自动创建序列.

更新:
好的,这是一个练习.然后我不明白这是什么问题?我测试了这段代码:

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');

它没有问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读