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.