Com facilidade, acabei de escrever um exemplo de como fazer isso com arquivos de texto simples que se aplicam igualmente bem a
xml
arquivos. Consulte a pergunta atualizando linhas da tabela com base no arquivo txt
. Acontece que você pode fazer isso com
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 você estiver fazendo muito disso, talvez queira drive
psql
usando um coprocesso
ou pelo menos para gerar SQL e canalizá-lo para psql
's stdin, para que você não precise fazer toda a configuração/desmontagem da conexão repetidamente. Alternativamente, fazendo isso com o 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__
A geração de separadores aleatórios é para proteger contra ataques de injeção (improváveis) que dependem de saber ou adivinhar a tag separadora de cotação de dólar.
Você vai ser muito mais sã e feliz se você usar uma linguagem de script adequada e uma biblioteca cliente PostgreSQL como Perl com
DBI
e DBD::Pg
, Python com psycopg2
ou Ruby com a Pg
gem para qualquer trabalho não trivial. O trabalho significativo com bancos de dados no shell leva a dor, sofrimento e uso excessivo de coprocessos.