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.