Je viens d'écrire un exemple de la façon de procéder avec des fichiers de texte brut qui s'appliqueront aussi bien à xml
des dossiers. Voir la question mise à jour des lignes du tableau en fonction du fichier txt
.
Il s'avère que vous pouvez le faire avec 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
Si vous faites beaucoup de cela, vous voudrez peut-être drive psql
en utilisant un co-processus
ou au moins pour générer du SQL et le diriger vers psql
est stdin, vous n'avez donc pas à refaire toute cette configuration/démontage de la connexion encore et encore.
Alternativement, faites-le avec le 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 génération de séparateurs aléatoires vise à se protéger contre les attaques par injection (improbables) qui reposent sur la connaissance ou la devinette de la balise de séparation en dollars.
Vous allez être beaucoup plus sain et plus heureux si vous utilisez un langage de script approprié et une bibliothèque cliente PostgreSQL comme Perl avec DBI
et DBD::Pg
, Python avec psycopg2
ou Ruby avec le Pg
bijou pour tout travail non trivial. Un travail important avec des bases de données dans le shell entraîne des douleurs, des souffrances et une utilisation excessive des co-processus.