PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

XML aus Datei in PostgreSQL einfügen

Praktischerweise habe ich gerade ein Beispiel geschrieben, wie man dies mit einfachen Textdateien macht, die sich genauso gut auf xml anwenden lassen Dateien. Siehe die Frage Tabellenzeilen basierend auf txt-Datei aktualisieren .

Es stellt sich heraus, dass Sie dies mit psql tun können :

regress=> CREATE TABLE xmldemo(id serial primary key, blah xml);
regress=> \set test = `cat some.xml`
regress=> INSERT INTO xmldemo(blah) VALUES (:'test');
INSERT 0 1

Wenn Sie viel davon tun, möchten Sie vielleicht Laufwerk psql Verwenden eines Co-Prozesses oder zumindest um SQL zu generieren und es in psql zu leiten 's stdin, so dass Sie nicht immer wieder den ganzen Verbindungsaufbau/-abbau durchführen müssen.

Alternativ mit der Shell:

#!/bin/bash
xmlfilename=$1
sep=$(printf '%04x%04x\n' $RANDOM $RANDOM)
psql <<__END__
INSERT INTO mytable(myxmlcolumn) VALUES (
\$x${sep}\$$(cat ${xmlfilename})\$x${sep}\$
);
__END__

Die Generierung von zufälligen Trennzeichen dient zum Schutz vor (unwahrscheinlichen) Einschleusungsangriffen, die darauf beruhen, das Trennzeichen-Tag für Dollarnotierungen zu kennen oder zu erraten.

Du wirst viel sein gesünder und glücklicher, wenn Sie eine geeignete Skriptsprache und PostgreSQL-Client-Bibliothek wie Perl mit DBI verwenden und DBD::Pg , Python mit psycopg2 oder Ruby mit dem Pg Juwel für jede nicht triviale Arbeit. Umfangreiche Arbeit mit Datenbanken in der Shell führt zu Schmerzen, Leiden und übermäßiger Nutzung von Co-Prozessen.