sql >> Base de Datos >  >> RDS >> PostgreSQL

Insertar XML desde archivo en PostgreSQL

Prácticamente, acabo de escribir un ejemplo de cómo hacer esto con archivos de texto sin formato que se aplicarán igualmente bien a xml archivos Consulte la pregunta actualización de las filas de la tabla según el 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, es posible que desee drive psql usando un co-proceso o al menos para generar SQL y canalizarlo a psql 's stdin, por lo que no tiene que hacer toda la configuración/desconexión de la conexión una y otra vez.

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 de separadores aleatorios es para protegerse contra ataques de inyección (poco probables) que se basan en conocer o adivinar la etiqueta del separador de cotización del dólar.

Vas a ser mucho más cuerdo y feliz si usa un lenguaje de secuencias de comandos adecuado y una biblioteca de cliente PostgreSQL como Perl con DBI y DBD::Pg , Python con psycopg2 o Ruby con el Pg joya para cualquier trabajo no trivial. El trabajo significativo con bases de datos en el shell genera dolor, sufrimiento y un uso excesivo de coprocesos.