PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Inserisci XML da file in PostgreSQL

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.