postgres autoincrement nicht aktualisiert, auf explizite id-Einsätze
Ich habe folgende Tabelle in der postgres:
CREATE TABLE "test" (
"id" serial NOT NULL PRIMARY KEY,
"value" text
)
Mache ich folgende Einfügungen:
insert into test (id, value) values (1, 'alpha')
insert into test (id, value) values (2, 'beta')
insert into test (value) values ('gamma')
In den ersten 2 Einsätzen bin ich ausdrücklich erwähnen, die id. Aber die Tabelle ist auto increment Zeiger ist in diesem Fall nicht fortgeschrieben. Also in der 3. einfügen bekomme ich die Fehlermeldung:
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
Ich nie vor dieses problem in Mysql in beide MyISAM-und INNODB-Motoren. Ausdrücklich oder nicht, mysql update immer autoincrement-pointer basierend auf der maximalen Zeilen-id.
Was ist die Problemumgehung für dieses problem in postgres? Ich brauche es, weil ich will eine strengere Kontrolle für einige ids in meiner Tabelle.
UPDATE:
Ich brauche es, weil einige Werte zu haben brauche ich eine Feste id. Für neue Einträge, die ich nicht Verstand neue zu erstellen.
Denke ich, kann es möglich sein, durch manuelles Inkrementieren der nextval
Zeiger auf max(id) + 1
immer, wenn ich explizit einfügen der ids. Aber ich bin nicht sicher, wie das zu tun.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist, wie es funktionieren sollte -
next_val('test_id_seq')
wird nur aufgerufen, wenn das system muss einen Wert für diese Spalte, und haben Sie nicht ein. Wenn Sie Wert kein solcher Anruf erfolgt und somit die Reihenfolge ist nicht "aktualisiert".Könnten Sie umgehen dies, indem Sie manuell Einstellung den Wert der Sequenz nach dem letzten Einsatz mit explizit Werte angegeben:
In der jüngsten version von Django, der dieses Thema besprochen wird in der Dokumentation:
Ref: https://docs.djangoproject.com/en/dev/ref/databases/#manually-specified-autoincrement-pk
Gibt es auch management-Befehl
manage.py sqlsequencereset app_label ...
, die in der Lage ist zum generieren von SQL-Anweisungen für das zurücksetzen von Sequenzen, die für die gegebene app-name(s)Ref: https://docs.djangoproject.com/en/dev/ref/django-admin/#django-admin-sqlsequencereset
Zum Beispiel diese SQL-Anweisungen generiert wurden, durch
manage.py sqlsequencereset my_app_in_my_project
: