Handig, ik heb zojuist een voorbeeld geschreven van hoe je dit kunt doen met platte tekstbestanden die even goed van toepassing zijn op xml
bestanden. Zie de vraag tabelrijen bijwerken op basis van txt-bestand
.
Het blijkt dat je dit kunt doen met 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
Als je veel van dit doet, wil je misschien drive psql
een co-proces gebruiken
of in ieder geval om SQL te genereren en het in psql
te pipen 's stdin, dus u hoeft niet steeds opnieuw verbinding te maken/af te breken.
Of doe het met de 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__
Het genereren van willekeurige scheidingstekens is bedoeld om te beschermen tegen (onwaarschijnlijke) injectieaanvallen die afhankelijk zijn van het kennen of raden van de scheidingstag die de dollar aangeeft.
Je wordt veel gezonder en gelukkiger als je een goede scripttaal en PostgreSQL-clientbibliotheek zoals Perl met DBI
gebruikt en DBD::Pg
, Python met psycopg2
of Ruby met de Pg
juweeltje voor elk niet-triviaal werk. Aanzienlijk werken met databases in de shell leidt tot pijn, lijden en overmatig gebruik van co-processen.