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

Postgresql 在Postgres中使用触发器和序列创建自动增量字段,postgresql,Postgresql,我正在尝试使用触发器和序列创建一个自动递增字段(如串行)。我知道只能在字段上使用序列或串行类型,但我必须使用这两种方法(触发器和secuences)来解决此问题 我尝试了这种组合,但不起作用,表alimento只有两个字段,integer id(带触发器和序列的自动递增)和varchar名称 有什么建议吗 谢谢正如其他用户告诉您的,您不需要使用触发器。您可以这样声明表: CREATE SEQUENCE AlimentosSequencia; CREATE TABLE alimento (

我正在尝试使用触发器和序列创建一个自动递增字段(如串行)。我知道只能在字段上使用序列或串行类型,但我必须使用这两种方法(触发器和secuences)来解决此问题

我尝试了这种组合,但不起作用,表alimento只有两个字段,integer 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字段声明为,它将自动创建序列

更新: 好的,这是一个练习。那我不明白有什么问题?我已经测试了这段代码:

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

它可以正常工作。

只需对“它不工作”进行更多解释。为什么不使用简单的串行类型呢?您只需调用
SERIAL
列的相关序列上的
nextval()
,即可用于其他目的。不需要用触发器使事情复杂化。除此之外,没有错误信息,你的问题只是噪音。请逐字输入。您可以将
nextval('alimentosequencia')
设置为此列的默认值,即使它是
integer
。不需要触发器。这是一个练习,伙计们,我必须使用触发器和序列,这里不是评估性能。谢谢问题是当我声明de ID字段时…:(!!!!但是读了你的答案我发现了问题。再次感谢
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');