Verwenden von CSV-Daten zum Aktualisieren bestimmter Postgres-Zeilen
Diese Anleitung zeigt, wie Sie ausgewählte Zeilen in einer PostgreSQL-Tabelle mithilfe von Daten aus einer CSV-Datei effizient aktualisieren. Für diese Aufgabe nutzen wir die Befehle COPY
und UPDATE
.
Szenario:
Stellen Sie sich eine PostgreSQL-Tabelle „tbl“ mit den Spalten „id“, „banana“ und „apple“ vor. Das Ziel besteht darin, basierend auf den Informationen in einer CSV-Datei nur die Spalte „Banane“ für bestimmte Zeilen zu aktualisieren.
Vorgehensweise:
Die Lösung umfasst diese Schritte:
Erstellen Sie eine temporäre Tabelle:
Erstellen Sie eine temporäre Tabelle tmp_x
, die die Struktur der Tabelle „tbl“ widerspiegelt:
<code class="language-sql">CREATE TEMP TABLE tmp_x (id int, apple text, banana text);</code>
CSV-Daten importieren:
Importieren Sie den Inhalt der CSV-Datei mit dem Befehl tmp_x
in COPY
. Denken Sie daran, /absolute/path/to/file
durch den tatsächlichen Dateipfad zu ersetzen:
<code class="language-sql">COPY tmp_x FROM '/absolute/path/to/file' (FORMAT csv);</code>
Aktualisieren Sie die Haupttabelle:
Führen Sie eine UPDATE
-Anweisung aus, um die Spalte „Banane“ in „tbl“ zu ändern. Dabei werden Daten aus tmp_x
verwendet, die Zeilen basierend auf der Spalte „id“ abgleichen:
<code class="language-sql">UPDATE tbl SET banana = tmp_x.banana FROM tmp_x WHERE tbl.id = tmp_x.id;</code>
Entfernen Sie die temporäre Tabelle:
Entfernen Sie nach dem Update die temporäre Tabelle:
<code class="language-sql">DROP TABLE tmp_x;</code>
Alternative Ansätze:
Vereinfachte temporäre Tabellenerstellung: Wenn Ihre CSV-Datei mit der Struktur von „tbl“ übereinstimmt, können Sie tmp_x
prägnanter erstellen:
<code class="language-sql"> CREATE TEMP TABLE tmp_x AS SELECT * FROM tbl LIMIT 0;</code>
Vermeiden von Superuser-Berechtigungen: Für COPY
Vorgänge ohne Superuser-Rechte verwenden Sie den psql-Metabefehl:
<code class="language-sql"> \copy tmp_x FROM '/absolute/path/to/file' (FORMAT csv);</code>
Hilfreiche Links:
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich bestimmte Postgres-Zeilen aus einer CSV-Datei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!