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

16voto

jishi Punkte 23417
SELECT CURRVAL(pg_get_serial_sequence('my_tbl_name','id_col_name'))

Sie müssen natürlich den Tabellennamen und den Spaltennamen angeben.

Dies gilt für die aktuelle Sitzung/Verbindung http://www.postgresql.org/docs/8.3/static/functions-sequence.html

16voto

RINSON KE Punkte 252

Siehe das folgende Beispiel

CREATE TABLE users (
    -- make the "id" column a primary key; this also creates
    -- a UNIQUE constraint and a b+-tree index on the column
    id    SERIAL PRIMARY KEY,
    name  TEXT,
    age   INT4
);

INSERT INTO users (name, age) VALUES ('Mozart', 20);

Um die zuletzt eingefügte ID zu erhalten, verwenden Sie für die Tabelle "user" seq den Spaltennamen "id".

SELECT currval(pg_get_serial_sequence('users', 'id'));

16voto

Mohammad Fallah Punkte 636

Sie können RETURNING id nach einer Insert-Abfrage verwenden.

INSERT INTO distributors (id, name) VALUES (DEFAULT, 'ALI') RETURNING id;

und Ergebnis:

 id 
----
  1

Im obigen Beispiel ist id automatisch inkrementiert worden.

13voto

emreoktem Punkte 2147

Für diejenigen, die alle Datensätze abrufen müssen, können Sie Folgendes hinzufügen

returning *

an das Ende Ihrer Abfrage an, um das gesamte Objekt einschließlich der ID zu erhalten.

12voto

Sunil Garg Punkte 12298

Der bessere Weg ist die Verwendung von einfügen. mit Rückkehr. Obwohl es bereits dieselben Antworten gibt, möchte ich nur hinzufügen, dass Sie, wenn Sie dies in einer Variablen speichern möchten, Folgendes tun können

insert into my_table(name) returning id into _my_id;

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