Postgresql

Postgres:如何插入具有自動增量 ID 的行

  • July 24, 2019

有一個表“上下文”。有一個自動增量 ID“context_id”。我正在使用序列來檢索下一個值。

SELECT nextval('context_context_id_seq')

結果是:1,2,3,…20….

但是“上下文”表中有 24780 行

如何獲得下一個值(24781)?

我需要在 INSERT 語句中使用它

顯然,您在沒有使用序列的情況下將行插入到該表中,這就是它們不同步的原因。

您需要使用為序列設置正確的值setval()

select setval('context_context_id_seq', (select max(context_id) from context));

然後下一次呼叫nextval()應該返回正確的值。

如果該列確實被定義為serial(Postgres 中沒有“自動增量”),那麼你應該讓 Postgres 完成它的工作,並且在插入時永遠不要提及它:

insert into context (some_column, some_other_column)
values (42, 'foobar');

將確保應用 context_id 列的預設值。或者,您可以使用:

insert into context (context_id, some_column, some_other_column)
values (default, 42, 'foobar');
INSERT INTO public.tablename (id, operator, text) values((SELECT MAX(id)+1 FROM public.tablename), 'OPERATOR',''); 

引用自:https://dba.stackexchange.com/questions/65662