sql >> Databasteknik >  >> RDS >> PostgreSQL

Infoga XML från fil i PostgreSQL

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.




  1. När behöver jag använda semikolon kontra snedstreck i Oracle SQL?

  2. Enhetstestning av DDL-satser som måste finnas i en transaktion

  3. mysql.connector ger inte det senaste databastillståndet i Python

  4. Markörtyp ändrad fel på Perl OLE32 MSSQL dateadd funktionsresultat