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'); 它没有问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |