it-swarm.com.de

Postgres: Einfügen einer Zeile mit der Autoincrement-ID

Es gibt eine Tabelle "Kontext". Es gibt eine Autoincrement-ID "context_id". Ich verwende Sequenz, um den nächsten Wert abzurufen.

SELECT nextval('context_context_id_seq')

Das Ergebnis ist: 1, 2, 3, ... 20 ....

Die Tabelle "context" enthält jedoch 24780 Zeilen

Wie kann ich den nächsten Wert (24781) erhalten?

Ich muss es in der INSERT-Anweisung verwenden

7
user3631472

Anscheinend haben Sie Zeilen in diese Tabelle eingefügt ohne unter Verwendung der Sequenz und deshalb sind sie nicht synchron.

Sie müssen den richtigen Wert für die Sequenz mit setval() einstellen

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

Dann sollte der nächste Aufruf von nextval() den richtigen Wert zurückgeben.

If Die Spalte ist in der Tat als serial definiert (es gibt kein "automatisches Inkrement" in Postgres), dann sollten Sie Postgres seine Arbeit machen lassen und es niemals während des Insers erwähnen:

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

stellt sicher, dass der Standardwert für die Spalte context_id angewendet wird. Alternativ können Sie verwenden:

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