481 Stimmen

PostgreSQL-Funktion für die zuletzt eingefügte ID

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

4voto

Sandip Debnath Punkte 715

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)

2voto

Oozman Punkte 41

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.

0voto

Cristian Punkte 480

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

https://jdbc.postgresql.org/download/postgresql-42.2.12.jar

0voto

Chaster johnson Punkte 135

Es ist hilfreich, wenn Ihre id-Spalte primär und indiziert ist. Sie können verwenden:

SELECT
    *
FROM
    table
LIMIT 1
    ORDER BY id DESC
;

-1voto

K8sN0v1c3 Punkte 111

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...)

Psuedo-Code

$insert_next_id = $return_result->query(" select (setval('"your_id_seq"', (select nextval('"your_id_seq"')) - 1, true)) +1; ")

CodeJaeger.com

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.

Powered by:

X