PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Inserir XML do arquivo no PostgreSQL


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.