便利なことに、xml
にも同様に適用されるプレーンテキストファイルを使用してこれを行う方法の例を書きました。 ファイル。質問
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
これをたくさん行う場合は、ドライブpsql
コプロセスの使用
または、少なくともSQLを生成し、それをpsql
にパイプします。 のstdinなので、接続のセットアップ/ティアダウンを何度も繰り返す必要はありません。
または、シェルを使用して実行します:
#!/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__
ランダムセパレーターの生成は、ドル引用符セパレータータグを知っているか推測することに依存する(ありそうもない)インジェクション攻撃から保護するためのものです。
あなたは多くになるでしょう DBI
でPerlのような適切なスクリプト言語とPostgreSQLクライアントライブラリを使用すると、より安全で幸せになります およびDBD::Pg
、Pythonとpsycopg2
またはPg
を使用したRuby 些細なことではない仕事のための宝石。シェル内のデータベースでの重要な作業は、苦痛、苦痛、およびコプロセスの過度の使用につながります。