加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-13 18:07:19 所属栏目:百科 来源:网络整理
导读:我试图通过CLI中的psql将新用户插入我们的数据库.当我执行以下操作时: START TRANSACTION;INSERT INTO "users" ("email","first_name","last_name","password","objectstate_id","activate_rid")VALUES ('xpress@carepilot.com','Xpress','Care','f9fecdd84
我试图通过CLI中的psql将新用户插入我们的数据库.当我执行以下操作时:
START TRANSACTION;
INSERT INTO "users" ("email","first_name","last_name","password","objectstate_id","activate_rid")
VALUES ('xpress@carepilot.com','Xpress','Care','f9fecdd84ee071806423adf30d6d6ff04e1a0a2c6688f2c057ddbab1d6b55d02',4,'EMQHTMMvViAB5BdYj0E6');
SELECT LASTVAL();

LASTVAL总是返回39037,技术上应该是838.由于某种原因,它也没有将它插入数据库.我用谷歌搜索并寻找我能想到的一切,但没有得到任何答案.有谁知道这里发生了什么?

这里的简短版本是使用不合格的lastval是一个坏主意.触发器,规则等可能会导致问题.

你应该完全避免使用lastval.使用:

BEGIN;

INSERT INTO "users" ("email","activate_rid") 
VALUES ('xpress@carepilot.com','EMQHTMMvViAB5BdYj0E6') 
RETURNING id;

其中id应该是生成的键列的名称.

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读