Ich habe viele XML-Dateien, die ich in die Tabelle xml_data
importieren möchte:
Dazu habe ich ein einfaches Bash-Skript mit Schleife:
%Vor%Dies wird jedoch versuchen, jede Zeile jeder Datei als separate Zeile zu importieren. Dies führt zu einem Fehler:
%Vor% Ich verstehe, warum es fehlschlägt, kann aber nicht herausfinden, wie \copy
die ganze Datei gleichzeitig in eine einzelne Zeile importiert.
Ich würde einen anderen Ansatz versuchen: Lies die XML-Datei direkt in eine Variable innerhalb einer plpgsql-Funktion und fahre von dort fort. Sollte viel schneller und viel robuster sein. Sie benötigen jedoch Superuser-Berechtigungen.
%Vor%Finden Sie ein vollständiges Codebeispiel mit Erklärungen und Links in dieser eng verwandten Antwort:
Necromancing: Für diejenigen, die ein funktionierendes Beispiel benötigen:
%Vor%Oder mit weniger Lärm
%Vor%Mit dieser XML-Beispieldatei (MyData.xml):
%Vor% Hinweis:
MyData.xml muss sich in dem PG_Data-Verzeichnis (das Parent-Verzeichnis des Pg_stat-Verzeichnisses) befinden.
z.B. /var/lib/postgresql/9.3/main/MyData.xml
Dies erfordert PostGreSQL 9.1 +
Insgesamt können Sie es dateilos wie folgt erstellen:
%Vor% Ich habe tr
verwendet, um alle Zeilenumbrüche durch Leerzeichen zu ersetzen. Dadurch wird eine XML-Datei mit nur einer Zeile erstellt. Eine solche Datei kann ich einfach mit \copy
in eine Zeile importieren.
Offensichtlich ist dies keine gute Idee, wenn Sie mehrzeilige Werte in XML haben. Zum Glück ist das nicht mein Fall.
Um alle XML-Dateien im Ordner zu importieren, können Sie dieses Bash-Skript verwenden:
%Vor%Tags und Links xml bash postgresql