sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL volgende waarde van de reeksen?

RETURNING

Dat kan met een enkele retour naar de database:

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

tbl_id zou typisch een serial . zijn of IDENTITY (Postgres 10 of later) kolom. Meer in de handleiding.

Expliciet waarde ophalen

Als filename moet tbl_id . bevatten (overtollig), u kunt nog steeds een enkele zoekopdracht gebruiken.

Gebruik lastval() of de meer specifieke currval() :

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

Zie:

  • Referentiewaarde van seriële kolom in een andere kolom tijdens dezelfde INSERT

Als er meerdere sequenties in het proces kunnen worden gevorderd (zelfs door middel van triggers of andere bijwerkingen), is het zeker manier is om currval('tbl_tbl_id_seq') . te gebruiken .

Naam van reeks

De letterlijke tekenreeks 'tbl_tbl_id_seq' in mijn voorbeeld wordt verondersteld de werkelijke . te zijn naam van de reeks en wordt gecast naar regclass , die een uitzondering oplevert als er geen reeks van die naam kan worden gevonden in het huidige search_path .

tbl_tbl_id_seq is de automatisch gegenereerde standaard voor een tabel tbl met een seriële kolom tbl_id . Maar er zijn geen garanties. Een standaardkolom kan waarden ophalen uit elke volgorde indien zo gedefinieerd. En als de standaardnaam wordt gebruikt bij het maken van de tabel, kiest Postgres de volgende vrije naam volgens een eenvoudig algoritme.

Als u niet weet de naam van de reeks voor een serial kolom, gebruik dan de speciale functie pg_get_serial_sequence() . Kan on-the-fly worden gedaan:

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

db<>viool hier
Oude sqlfiddle



  1. Postgres dynamische queryfunctie

  2. Hoe krijg ik de namen van alle kolommen voor alle tabellen in MySQL?

  3. Hoe moet ik gegevens uit CSV in een Postgres-tabel importeren met pgAdmin 3?

  4. Tekst of Excel openen of koppelen als gegevensbronnen in Microsoft Access