在 PL/pgSQL 内插入后获取默认序列值
Get default serial value after INSERT inside PL/pgSQL
我有一个table。我在 plpgsql 中写了一个函数,它在 table:
中插入一行
INSERT INTO simpleTalbe (name,money) values('momo',1000) ;
此 table 有 serial
个名为 id
的字段。我想在插入行后的函数中知道新行收到的 ID。
我想用:
select nextval('serial');
插入之前,有没有更好的解决方案?
使用 RETURNING
子句。您需要将结果保存在 PL/pgSQL 内的某处 - 附加 INTO
..
INSERT INTO simpleTalbe (name,money) values('momo',1000)
RETURNING id
INTO _my_id_variable;
_my_id_variable
必须用匹配的数据类型声明。
相关:
- PostgreSQL next value of the sequences?
根据您打算用它做什么,纯 SQL 通常有更好的解决方案。示例:
- PostgreSQL multi INSERT...RETURNING with multiple columns
select nextval('serial');
不会如你所愿; nextval()
实际上是递增序列,然后 INSERT
会再次递增它 。(此外,'serial' 是 而不是 您的 serial
列使用的序列名称。)
@Erwin 的回答(INSERT ... RETURNING
)是最好的答案,因为语法是专门针对这种情况引入的,但你也可以做一个
SELECT currval('simpletalbe_id_seq') INTO ...
任何时候在你的INSERT
之后检索序列的当前值。 (请注意支持 serial
列的自动定义序列的序列名称格式 tablename_columnname_seq。)
我有一个table。我在 plpgsql 中写了一个函数,它在 table:
中插入一行INSERT INTO simpleTalbe (name,money) values('momo',1000) ;
此 table 有 serial
个名为 id
的字段。我想在插入行后的函数中知道新行收到的 ID。
我想用:
select nextval('serial');
插入之前,有没有更好的解决方案?
使用 RETURNING
子句。您需要将结果保存在 PL/pgSQL 内的某处 - 附加 INTO
..
INSERT INTO simpleTalbe (name,money) values('momo',1000)
RETURNING id
INTO _my_id_variable;
_my_id_variable
必须用匹配的数据类型声明。
相关:
- PostgreSQL next value of the sequences?
根据您打算用它做什么,纯 SQL 通常有更好的解决方案。示例:
- PostgreSQL multi INSERT...RETURNING with multiple columns
select nextval('serial');
不会如你所愿; nextval()
实际上是递增序列,然后 INSERT
会再次递增它 。(此外,'serial' 是 而不是 您的 serial
列使用的序列名称。)
@Erwin 的回答(INSERT ... RETURNING
)是最好的答案,因为语法是专门针对这种情况引入的,但你也可以做一个
SELECT currval('simpletalbe_id_seq') INTO ...
任何时候在你的INSERT
之后检索序列的当前值。 (请注意支持 serial
列的自动定义序列的序列名称格式 tablename_columnname_seq。)