テーブル「コンテキスト」があります。自動インクリメント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()
を次に呼び出すと、正しい値が返されます。
If列は確かに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','');