微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – Postgres没有正确返回lastval()

我试图通过CLI中的psql新用户插入我们的数据库.当我执行以下操作时:
START TRANSACTION;
INSERT INTO "users" ("email","first_name","last_name","password","objectstate_id","activate_rid")
VALUES ('[email protected]','Xpress','Care','f9fecdd84ee071806423adf30d6d6ff04e1a0a2c6688f2c057ddbab1d6b55d02',4,'EMQHTMMvViAB5BdYj0E6');
SELECT LASTVAL();
@H_404_3@LASTVAL总是返回39037,技术上应该是838.由于某种原因,它也没有将它插入数据库.我用谷歌搜索并寻找我能想到的一切,但没有得到任何答案.有谁知道这里发生了什么?

这里的简短版本是使用不合格的lastval是一个坏主意.触发器,规则等可能会导致问题. @H_404_3@你应该完全避免使用lastval.使用:

BEGIN;

INSERT INTO "users" ("email","activate_rid") 
VALUES ('[email protected]','EMQHTMMvViAB5BdYj0E6') 
RETURNING id;
@H_404_3@其中id应该是生成的键列的名称.

@H_404_3@这种方法将处理多值插入和INSERT INTO … SELECT …正确,并且触摸序列的触发器不会出现问题.

@H_404_3@如果必须使用基于函数调用方法,至少使用currval(‘tablename_id_seq’)(传递适当的序列名称)而不是lastval.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐