gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:26:49 25 4
gpt4 key购买 nike

我正在尝试通过 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", "first_name", "last_name", "password", "objectstate_id", "activate_rid")
VALUES ('xpress@carepilot.com', 'Xpress', 'Care', 'f9fecdd84ee071806423adf30d6d6ff04e1a0a2c6688f2c057ddbab1d6b55d02', 4, 'EMQHTMMvViAB5BdYj0E6')
RETURNING id;

哪里id应以生成的键列的名称命名。

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

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

关于postgresql - Postgres 没有正确返回 lastval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17819001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com