ben*_*her 5 postgresql sequence
我试图通过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();
Run Code Online (Sandbox Code Playgroud)
LASTVAL总是返回39037,技术上应该是838.由于某种原因,它也没有插入数据库.我用谷歌搜索并寻找我能想到的一切,但没有得到任何答案.有谁知道这里发生了什么?
Cra*_*ger 10
这里的简短版本是使用不合格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;
Run Code Online (Sandbox Code Playgroud)
这里id应该由生成的键列的名称.
这种方法将INSERT INTO ... SELECT ...正确处理多值插入,并且触摸序列的触发器不会出现问题.
如果必须使用基于函数调用的方法,至少使用currval('tablename_id_seq')(传递适当的序列名称)而不是lastval.
| 归档时间: |
|
| 查看次数: |
5000 次 |
| 最近记录: |