gpt4 book ai didi

postgresql - 如果插入一行,则在 PostgreSQL 中推进序列 (`nextval` )

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

我有条件地向 PostgreSQL 表中插入一行并手动指定 ID:

INSERT INTO foo (foo_id, foo_name)
SELECT 4, 'My Name'
WHERE NOT EXISTS (
SELECT * FROM foo WHERE foo_id = 4
);

这不会增加生成下一个 foo_id 的序列。

只有在上述查询中实际插入一行时,如何运行 SELECT nextval('foo_foo_id_seq'::regclass);

最佳答案

您可以使用 setval()

为序列提供一个新值

如果要更改序列以继续“强制”值,可以在选择中使用 setval():

INSERT INTO foo (id, foo_name)
select *
from (
VALUES (setval('foo_id_seq', 42), 'My Name')
) as t (id, foo_name)
WHERE NOT EXISTS (
SELECT * FROM foo WHERE id = 42
);

如果插入一行,序列将以 43 继续。

如果当前序列值已经大于 43,这在以后其他事务插入到表中并依赖于序列时给您带来问题。


如果你想从它当前的任何值推进序列,你可以使用这样的东西:

INSERT INTO foo (id, foo_name)
select id, foo_name
from (
VALUES (42, 'My Name', nextval('foo_id_seq'))
) as t (id, foo_name, nextval)
WHERE NOT EXISTS (
SELECT * FROM foo WHERE id = 42
);

关于postgresql - 如果插入一行,则在 PostgreSQL 中推进序列 (`nextval` ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35199543/

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