Verwendung von Postgres CTE zum sequenziellen Einfügen von Daten in mehrere Tabellen
In Postgres können Sie datenmodifizierende allgemeine Tabellenausdrücke (CTE) verwenden, um Daten mit einer einzigen Abfrage in mehrere Tabellen einzufügen. CTE bietet eine praktische Möglichkeit, temporäre Ergebnismengen zu definieren und Daten in einer einzigen Abfrage zu bearbeiten.
Verwenden Sie Daten, um den CTE zu ändern
Die folgende Abfrage zeigt, wie CTE zum sequentiellen Einfügen von Daten in drei Tabellen verwendet wird:
<code class="language-sql">WITH ins1 AS ( INSERT INTO sample(firstname, lastname) VALUES ('fai55', 'shaggk') RETURNING id AS sample_id ), ins2 AS ( INSERT INTO sample1 (sample_id, adddetails) SELECT sample_id, 'ss' FROM ins1 RETURNING user_id ) INSERT INTO sample2 (user_id, value) SELECT user_id, 'ss2' FROM ins2;</code>
In dieser Abfrage:
ins1
, fügt eine Zeile in die Tabelle sample
ein und gibt die ID der eingefügten Zeile als sample_id
zurück. ins2
, verwendet das von ins1
zurückgegebene sample_id
, um eine Zeile in die sample1
-Tabelle einzufügen. Es gibt das user_id
der eingefügten Zeile zurück. INSERT
-Anweisung fügt mithilfe des von ins2
zurückgegebenen user_id
eine Zeile in die sample2
-Tabelle ein. Mit diesem Ansatz können Sie mehrere INSERT
-Anweisungen verketten und von vorherigen Einfügungen zurückgegebene Werte wiederverwenden.
Verarbeitung gleichzeitiger Schreibvorgänge
Wenn mehrere Sitzungen gleichzeitig Daten einfügen, müssen Sie die Möglichkeit gleichzeitiger Schreibvorgänge in Betracht ziehen. Dazu können Sie die ON CONFLICT
-Klausel verwenden, um das Verhalten beim Versuch, einen doppelten Datensatz einzufügen, festzulegen.
Alternativen mit temporären Tabellen
Alternativ zur Verwendung von CTE können Sie auch eine temporäre Tabelle erstellen, um die Zwischendaten zu speichern, und dann die Einfügungen nacheinander durchführen:
<code class="language-sql">CREATE TEMP TABLE tmp AS SELECT * FROM sample; INSERT INTO sample1 (sample_id, adddetails) SELECT id, 'ss' FROM tmp; INSERT INTO sample2 (user_id, value) SELECT user_id, 'ss2' FROM tmp; DROP TABLE tmp;</code>
Bei diesem Ansatz wird eine temporäre Tabelle als Datenquelle für nachfolgende Einfügungen verwendet, ohne den CTE direkt zu verknüpfen.
Durch die Verwendung eines Datenänderungs-CTE oder einer temporären Tabelle können Sie Daten mit einer einzigen Postgres-Abfrage effizient in mehrere Tabellen einfügen und so die Dateneinfügungsvorgänge vereinfachen.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von CTEs oder einer temporären Tabelle nacheinander Daten in mehrere Postgres-Tabellen einfügen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!