sql >> Database teknologi >  >> RDS >> PostgreSQL

PostgreSQL næste værdi af sekvenserne?

RETURNING

Det er muligt med en enkelt tur-retur til databasen:

INSERT INTO tbl(filename)
VALUES ('my_filename')
RETURNING tbl_id;

tbl_id vil typisk være en serial eller IDENTITY (Postgres 10 eller senere) kolonne. Mere i manualen.

Hent eksplicit værdi

Hvis filename skal inkludere tbl_id (redundant) kan du stadig bruge en enkelt forespørgsel.

Brug lastval() eller den mere specifikke currval() :

INSERT INTO tbl (filename)
VALUES ('my_filename' || currval('tbl_tbl_id_seq')   -- or lastval()
RETURNING tbl_id;

Se:

  • Referenceværdi for seriel kolonne i en anden kolonne under samme INSERT

Hvis flere sekvenser kan blive avanceret i processen (selv i form af triggere eller andre bivirkninger), er det sikkert måden er at bruge currval('tbl_tbl_id_seq') .

Navn på sekvens

strengen literal 'tbl_tbl_id_seq' i mit eksempel formodes det at være den faktiske navn på sekvensen og castes til regclass , som rejser en undtagelse, hvis der ikke kan findes en sekvens af dette navn i den aktuelle search_path .

tbl_tbl_id_seq er den automatisk genererede standard for en tabel tbl med en seriel kolonne tbl_id . Men der er ingen garantier. En kolonnestandard kan hente værdier fra enhver rækkefølge, hvis den er defineret. Og hvis standardnavnet tages ved oprettelse af tabellen, vælger Postgres det næste ledige navn ifølge en simpel algoritme.

Hvis du ikke ved det navnet på sekvensen for en serial kolonne, skal du bruge den dedikerede funktion pg_get_serial_sequence() . Kan gøres i farten:

INSERT INTO tbl (filename)
VALUES ('my_filename' || currval(pg_get_serial_sequence('tbl', 'tbl_id'))
RETURNING tbl_id;

db<>spil her
Gamle sqlfiddle



  1. Introduktion til Python SQL-biblioteker

  2. Sådan nulstiller du MySQL root-adgangskode

  3. SQL Server tilfældig sortering

  4. FLOOR() Eksempler i SQL Server