我有一张桌子。我在 plpgsql 中编写了一个函数,将一行插入到该表中:
INSERT INTO simpleTalbe (name,money) values('momo',1000) ;
此表有
serial
字段,称为 id
。我希望在插入行后在函数中知道新行收到的 id。
我想用:
select nextval('serial');
插入之前,有没有更好的解决方案?
select nextval('serial');
不会做你想做的事; nextval()
实际上会递增序列,然后 INSERT
会再次递增它。(此外,“序列”不是您的 serial
列使用的序列名称。)@Erwin 的答案(
INSERT ... RETURNING
)是最好的答案,因为语法是专门针对这种情况引入的,但你也可以做一个
SELECT currval('simpletalbe_id_seq') INTO ...
在
之后的任何时间INSERT
检索序列的当前值。 (请注意支持
serial
列的自动定义序列的序列名称格式 tablename_columnname_seq。)