gpt4 book ai didi

node.js - PostgreSQL上次插入的ID不是自动递增的 typescript Sequelize

转载 作者:行者123 更新时间:2023-12-03 22:32:17 25 4
gpt4 key购买 nike

用户(
身份证号码 ,
名称:字符串pk)
如何获得最大的最新 ID 以插入新 ID?目标是取前一个 id 并添加一个值,但 id 不是自动递增的。我正在考虑进行查询以获取最新的 id 但我希望可能有其他优化建议
谢谢

最佳答案

你可以做你想做的。但仅仅因为你可以做某事并不意味着你应该做。我再说一遍,您应该使用序列号或身份。 @Stefanov.sm 在 MVCC 环境中是正确的,这是一个非常糟糕的主意;因为它是 虚拟保证 你会在某个时候得到一个副本。
获得它的一种方法是编写一个函数来执行插入操作。此函数获取 MAX(ID) + 增量。它还处理重复错误并在需要时重试插入。

create or replace 
function establish_user (user_name_in text )
returns integer
language plpgsql
as $$
declare
k_id_inc constant integer := 1;
l_id integer;
l_inserted boolean = false;
begin
select coalesce(max(id) + k_id_inc)
into l_id
from users;

while not l_inserted
loop
begin
insert into users (id, name)
values (l_id, user_name_in);

l_inserted = true;
exception
when others then
if sqlstate != '23505'
or sqlerrm not like '%users_id_uk%'
then
raise;
else
l_id = l_id + 1;
end if;
end;
end loop;

return l_id;
end;
$$;
请参阅此处的 Demo

关于node.js - PostgreSQL上次插入的ID不是自动递增的 typescript Sequelize ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65715596/

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