PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Insérer XML à partir d'un fichier dans PostgreSQL

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.