Insertar XML del archivo en PostgreSQL
file (1)
Tengo varios archivos XML y quiero insertar su contenido en una tabla de PostgreSQL. Esta tabla tiene dos columnas: id (tipo serie) y columna de tipo xml, en la que quiero insertar el contenido de un archivo xml (una fila, una columna = un archivo xml). En la documentación, no he encontrado cómo insertar xml de un archivo.
¿Hay alguna manera fácil de cómo hacerlo?
Marek
Handily Acabo de escribir un ejemplo de cómo hacer esto con archivos de texto sin formato que se aplicarán igualmente a los archivos xml
. Consulte la pregunta sobre la actualización de las filas de la tabla en función del archivo txt .
Resulta que puedes hacer esto 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
Si está haciendo mucho de esto, puede querer manejar psql
usando un co-proceso o al menos generar SQL y canalizarlo en el stdin de psql
, para que no tenga que hacer toda la configuración de conexión / desmontaje y encima.
Alternativamente, hacerlo con el 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 generación del separador aleatorio es para proteger contra los ataques de inyección (poco probables) que se basan en conocer o adivinar el dólar que cotiza la etiqueta de separación.
Serás mucho más sensato y feliz si utilizas un lenguaje de scripting adecuado y una librería cliente PostgreSQL como Perl con DBI
y DBD::Pg
, Python con psycopg2
o Ruby con la joya Pg
para cualquier trabajo no trivial. El trabajo significativo con bases de datos en el caparazón provoca dolor, sufrimiento y uso excesivo de coprocesos.