Diese Anleitung zeigt, wie Sie die Spalte einer Postgres-Tabelle mithilfe von Daten aus einer CSV-Datei selektiv aktualisieren und andere Spalten unberührt lassen. Nehmen wir an, wir müssen die Spalte „Banane“ in unserer Tabelle aktualisieren und gleichzeitig die vorhandenen Werte der Spalte „Apfel“ beibehalten.
Lösung:
Diese Methode nutzt eine temporäre Tabelle für eine effiziente und sichere Datenbearbeitung.
1. Erstellen Sie eine temporäre Tabelle:
Erstellen Sie zunächst eine temporäre Tabelle (tmp_x
), die die Struktur Ihrer Zieltabelle widerspiegelt, einschließlich des Primärschlüssels („ID“):
<code class="language-sql">CREATE TEMP TABLE tmp_x (id int, apple text, banana text);</code>
2. CSV-Daten importieren:
Als nächstes importieren Sie Ihre CSV-Daten mit dem Befehl COPY
in die temporäre Tabelle. Denken Sie daran, /absolute/path/to/file
durch den tatsächlichen Pfad zu Ihrer CSV-Datei zu ersetzen:
<code class="language-sql">COPY tmp_x FROM '/absolute/path/to/file' (FORMAT csv);</code>
3. Aktualisieren Sie die Zieltabelle:
Aktualisieren Sie nun die Spalte „Banana“ in Ihrer Haupttabelle (tbl
) mithilfe von Daten aus der temporären Tabelle und gleichen Sie Zeilen basierend auf der Spalte „ID“ ab:
<code class="language-sql">UPDATE tbl SET banana = tmp_x.banana FROM tmp_x WHERE tbl.id = tmp_x.id;</code>
4. Entfernen Sie die temporäre Tabelle:
Entfernen Sie abschließend die temporäre Tabelle, um Ressourcen freizugeben:
<code class="language-sql">DROP TABLE tmp_x;</code>
Wichtige Überlegungen:
Berechtigungen: Vor Postgres 11 erforderte der Befehl COPY
normalerweise Superuser-Berechtigungen. Ab Postgres 11 können Rollen wie pg_read_server_files
oder pg_write_server_files
verwendet werden. Alternativ vermeidet der copy
-Metabefehl in psql
Superuser-Anforderungen.
Leistung: Verbessern Sie bei großen CSV-Dateien die Leistung, indem Sie temp_buffers
anpassen und einen Index für die Spalte „ID“ der temporären Tabelle erstellen. Eine manuelle Analyse der temporären Tabelle (ANALYZE tmp_x;
) wird empfohlen, da diese nicht automatisch analysiert wird.
Dieser Ansatz gewährleistet einen sauberen und effizienten Aktualisierungsprozess und minimiert das Risiko unbeabsichtigter Datenänderungen. Denken Sie daran, Ihre Daten immer zu sichern, bevor Sie größere Datenbankaktualisierungen durchführen.
Das obige ist der detaillierte Inhalt vonWie aktualisiere ich die Spalte einer Postgres-Tabelle mit Daten aus einer CSV-Datei und behalte gleichzeitig andere Spalten bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!