use*_*472 13 postgresql insert auto-increment select
有一个表“上下文”。有一个自动增量 ID“context_id”。我正在使用序列来检索下一个值。
SELECT nextval('context_context_id_seq')
Run Code Online (Sandbox Code Playgroud)
结果是:1, 2, 3,...20....
但是“上下文”表中有 24780 行
如何获得下一个值 (24781)?
我需要在 INSERT 语句中使用它
a_h*_*ame 27
显然,您在没有使用序列的情况下将行插入到该表中,这就是它们不同步的原因。
您需要使用 setval()
select setval('context_context_id_seq', (select max(context_id) from context));
Run Code Online (Sandbox Code Playgroud)
然后下一次调用nextval()应该返回正确的值。
如果该列确实定义为serial(Postgres 中没有“自动增量”),那么您应该让 Postgres 完成它的工作,并且在插入过程中永远不要提及它:
insert into context (some_column, some_other_column)
values (42, 'foobar');
Run Code Online (Sandbox Code Playgroud)
将确保应用 context_id 列的默认值。或者,您可以使用:
insert into context (context_id, some_column, some_other_column)
values (default, 42, 'foobar');
Run Code Online (Sandbox Code Playgroud)