如何在PostgreSQL中使用RETURNING子句?

时间:2013-09-09 08:30:31

标签: sql postgresql insert database

我正在使用PostgreSQL 8.2(它应该是支持RETURNING的最低版本),正是在GNU / Linux上的8.2.19。我试图在自动插入的列上使用returns子句,该列也被约束为主键。正确完成了新行的插入,但返回的结果为空(使用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;

怎么了?

1 个答案:

答案 0 :(得分:2)

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

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

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