Postgresql
Postgres:如何插入具有自動增量 ID 的行
有一個表“上下文”。有一個自動增量 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','');