【发布时间】:2012-06-22 22:27:25
【问题描述】:
我正在尝试使用触发器和序列创建一个自动增量字段(如 SERIAL)。我知道只能在字段上使用序列或 SERIAL 类型,但我必须使用这两种方法(触发器和安全)来解决这个问题
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 名称。
有什么建议吗?
谢谢
【问题讨论】:
-
只是对“它不起作用”做更多解释。
-
为什么不想使用简单的SERIAL类型?
-
您可以在
serial列的关联序列上调用nextval()用于其他目的。无需使用触发器使事情复杂化。除此之外,没有错误消息,您的问题只是噪音。请逐字包含它。 -
您可以将
nextval('AlimentosSequencia')设置为此列的默认值,即使它是integer。不需要触发器。 -
这是一个练习,我必须使用触发器和序列来完成,这里不是评估性能。谢谢
标签: postgresql