Facilmente ho appena scritto un esempio di come farlo con file di testo semplice che si applicheranno ugualmente bene a xml
File. Consulta la domanda aggiornamento delle righe della tabella in base al file txt
.
Si scopre che puoi farlo con 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
Se stai facendo molto di questo, potresti voler drive psql
utilizzando un coprocesso
o almeno per generare SQL e reindirizzarlo a psql
's stdin, quindi non devi fare tutta quella configurazione/smontaggio della connessione più e più volte.
In alternativa, facendolo con la 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__
La generazione di separatori casuali serve a proteggere da attacchi (improbabili) di injection che si basano sulla conoscenza o sull'ipotesi del tag separatore di quotazione del dollaro.
Sarai molto più sano e più felice se usi un linguaggio di scripting appropriato e una libreria client PostgreSQL come Perl con DBI
e DBD::Pg
, Python con psycopg2
o Ruby con il Pg
chicca per qualsiasi lavoro non banale. Un lavoro significativo con i database nella shell porta a dolore, sofferenza e un uso eccessivo dei co-processi.