Praktiskt skrev jag precis ett exempel på hur man gör detta med vanliga textfiler som passar lika bra på xml
filer. Se frågan uppdatering av tabellrader baserat på txt-fil
.
Det visar sig att du kan göra detta med 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
Om du gör mycket av det här kanske du vill enhet psql
med hjälp av en samprocess
eller åtminstone för att generera SQL och överföra det till psql
's stdin, så du behöver inte göra all den där anslutningskonfigurationen/nedbrytningen om och om igen.
Alternativt, gör det med skalet:
#!/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__
Genereringen av slumpmässiga separatorer är till för att skydda mot (osannolika) injektionsattacker som är beroende av att känna till eller gissa separatortaggen för dollarnotering.
Du kommer att bli mycket sundare och gladare om du använder ett korrekt skriptspråk och PostgreSQL-klientbibliotek som Perl med DBI
och DBD::Pg
, Python med psycopg2
eller Ruby med Pg
pärla för något icke-trivialt arbete. Betydande arbete med databaser i skalet leder till smärta, lidande och överdriven användning av samprocesser.