4

我正在使用 PostgreSQL 8.2(它应该是支持 RETURNING 的最低版本),在 GNU/Linux 上正好是 8.2.19。我尝试在自动插入的列上使用返回子句,该列也被限制为主键。新行的插入已正确完成,但返回的结果为空(通过 pgAdmin 中的查询执行器验证)。我尝试了隐式插入,并为主键列指定了 DEFAULT。

我试图返回的列定义为

al_id integer NOT NULL DEFAULT nextval(('"allarmi_al_id_seq"'::text)::regclass)

插入查询就像

INSERT INTO alarms (al_id, al_descr) 
     VALUES (DEFAULT, 'description') 
  RETURNING al_id;

allarmi_al_id_seq显然 (?) 是一个序列并且被定义为

CREATE SEQUENCE allarmi_al_id_seq
    INCREMENT 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    START 34564230
    CACHE 1;

怎么了?

4

1 回答 1

2

您还可以显式读取序列的当前值并返回:

INSERT INTO alarms (al_id, al_descr) 
     VALUES (DEFAULT, 'description') 
  RETURNING currval('allarmi_al_id_seq') AS al_id;

请注意,currval 函数返回此会话中最近获得的值,因此不存在并发问题(除非您有导致序列递增的触发器)。

于 2013-09-09T11:31:10.360 回答