Wie erhalte ich in PostgreSQL die letzte in eine Tabelle eingefügte ID?
In MS SQL gibt es SCOPE_IDENTITY().
Bitte raten Sie mir nicht, so etwas zu verwenden:
select max(id) from table
Wie erhalte ich in PostgreSQL die letzte in eine Tabelle eingefügte ID?
In MS SQL gibt es SCOPE_IDENTITY().
Bitte raten Sie mir nicht, so etwas zu verwenden:
select max(id) from table
Postgres hat einen eingebauten Mechanismus für dasselbe, der in derselben Abfrage die ID oder was immer Sie wollen, dass die Abfrage zurückgibt. Hier ist ein Beispiel. Nehmen wir an, Sie haben eine Tabelle erstellt, die 2 Spalten hat, Spalte1 und Spalte2, und Sie wollen, dass Spalte1 nach jedem Einfügen zurückgegeben wird.
# create table users_table(id serial not null primary key, name character varying);
CREATE TABLE
#insert into users_table(name) VALUES ('Jon Snow') RETURNING id;
id
----
1
(1 row)
# insert into users_table(name) VALUES ('Arya Stark') RETURNING id;
id
----
2
(1 row)
Versuchen Sie dies:
select nextval('my_seq_name'); // Returns next value
Wenn dies 1 zurückgibt (oder was auch immer der start_value für Ihre Sequenz ist), dann setzen Sie die Sequenz wieder auf den ursprünglichen Wert zurück und übergeben das false-Flag:
select setval('my_seq_name', 1, false);
Ansonsten,
select setval('my_seq_name', nextValue - 1, true);
Dadurch wird der ursprüngliche Zustand des Sequenzwertes wiederhergestellt, und "setval" gibt den gesuchten Sequenzwert zurück.
Ich hatte dieses Problem mit Java und Postgres. Ich habe es behoben, indem ich eine neue Connector-J-Version aktualisiert habe.
postgresql-9.2-1002.jdbc4.jar
https://jdbc.postgresql.org/download.html : Version 42.2.12
Basierend auf der obigen Antwort von @ooZman scheint dies für PostgreSQL v12 zu funktionieren, wenn Sie mit dem nächsten Wert einer "Sequenz" (ähnlich wie bei auto_increment) INSERT machen müssen, ohne etwas in Ihren Tabellenzähler(n) zu versauen. (Hinweis: Ich habe es allerdings nicht in komplexeren DB-Cluster-Konfigurationen getestet...)
$insert_next_id = $return_result->query(" select (setval('"your_id_seq"', (select nextval('"your_id_seq"')) - 1, true)) +1;
")
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.