COMMIT ist ein SQL-Befehl, der eine Transaktion abschließt und ihre Änderungen dauerhaft in der Datenbank speichert. Eine Transaktion fasst Datenbankoperationen zusammen, beispielsweise &A...
Wie lassen sich PostgreSQL-INSERT-RETURNING-Werte in eine andere bestehende Tabelle einfügen?
Antwort vomSetze das erste INSERT in eine WITH-Abfrage und übernimm dessen RETURNING-Ergebnis mit INSERT … SELECT in die zweite Tabelle.
Beispiel
Angenommen, die bestehenden Tabellen heißen „personen“ und „personen_protokoll“. Die erste Tabelle erzeugt die ID automatisch; die zweite soll diese ID und den Namen übernehmen. RETURNING liefert auch automatisch erzeugte Werte zurück.
WITH eingefuegt AS (
INSERT INTO personen (name)
VALUES ('Anna'), ('Ben')
RETURNING id, name
)
INSERT INTO personen_protokoll (person_id, name)
SELECT id, name
FROM eingefuegt;
Die WITH-Abfrage „eingefuegt“ stellt das Ergebnis von RETURNING id, name bereit. Das äußere INSERT liest diese Ergebniszeilen und fügt sie in die bereits existierende Zieltabelle ein. Eine zusätzliche temporäre Tabelle ist dafür nicht erforderlich.
Wichtige Details
- Spaltenzuordnung: Die SELECT-Werte werden in der angegebenen Reihenfolge den Zielspalten zugeordnet: hier „id“ zu „person_id“ und „name“ zu „name“. Die Datentypen müssen kompatibel sein.
- Mehrere Zeilen: Das Muster übernimmt sämtliche zurückgegebenen Zeilen, nicht nur eine einzelne ID. Bei
ON CONFLICT DO NOTHINGwerden übersprungene Zeilen nicht zurückgegeben und deshalb auch nicht weitergereicht. - Ergebnisquelle: Lies im äußeren SELECT aus der WITH-Abfrage, nicht erneut aus der ersten Tabelle. Die Teilanweisungen verwenden denselben Snapshot; ihre Änderungen werden über
RETURNINGweitergegeben.
Soll auch das zweite INSERT Werte an die Anwendung zurückgeben, kannst du am Ende beispielsweise RETURNING person_id, name ergänzen.
Quellen:
Erstellt mit GPT-6.1 Sol (OpenAI) auf Basis einer aktuellen Websuche.
Verwandte Fragen
Wie wandelt man in SQL ein Textfeld in ein Zahlenfeld um?
Mit CAST wandelst du Text in einer Abfrage in Zahlen um; mit ALTER TABLE änderst du den Spaltentyp dauerhaft. Umwandlung in einer Abfrage Für eine Ganzzahl kannst du beispielsweise schreibe...