Dengan mudah saya baru saja menulis contoh bagaimana melakukan ini dengan file teks biasa yang akan berlaku sama baiknya untuk xml file. Lihat pertanyaan memperbarui baris tabel berdasarkan file txt
.
Ternyata Anda dapat melakukan ini dengan psql :
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
Jika Anda melakukan banyak hal, Anda mungkin ingin drive psql menggunakan proses bersama
atau setidaknya untuk menghasilkan SQL dan menyalurkannya ke psql stdin, jadi Anda tidak perlu melakukan semua penyiapan/penghancuran koneksi itu berulang-ulang.
Bergantian, melakukannya dengan 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__
Pembuatan pemisah acak adalah untuk melindungi dari serangan injeksi (yang tidak mungkin) yang mengandalkan mengetahui atau menebak tag pemisah kutipan dolar.
Anda akan menjadi banyak lebih waras dan bahagia jika Anda menggunakan bahasa skrip yang tepat dan pustaka klien PostgreSQL seperti Perl dengan DBI dan DBD::Pg , Python dengan psycopg2 atau Ruby dengan Pg permata untuk pekerjaan non-sepele. Pekerjaan yang signifikan dengan database di shell menyebabkan rasa sakit, penderitaan, dan penggunaan proses bersama yang berlebihan.