sql >> Database teknologi >  >> RDS >> PostgreSQL

Indsæt XML fra fil i PostgreSQL

Praktisk har jeg lige skrevet et eksempel på, hvordan man gør dette med almindelige tekstfiler, der vil gælde lige så godt for xml filer. Se spørgsmålet opdatering af tabelrækker baseret på txt-fil .

Det viser sig, at du kan gøre dette 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

Hvis du laver meget af dette, vil du måske drev psql ved hjælp af en co-proces eller i det mindste at generere SQL og overføre det til psql 's stdin, så du behøver ikke at gøre al den forbindelse opsætning/nedrivning igen og igen.

Alternativt kan du gøre det med skallen:

#!/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__

Generering af tilfældige separatorer er for at beskytte mod (usandsynlige) injektionsangreb, der er afhængige af at kende eller gætte dollar-citat-separator-tagget.

Du kommer til at være meget sundere og gladere, hvis du bruger et ordentligt scriptsprog og PostgreSQL-klientbibliotek som Perl med DBI og DBD::Pg , Python med psycopg2 eller Ruby med Pg perle til ethvert ikke-trivielt arbejde. Betydeligt arbejde med databaser i skallen fører til smerte, lidelse og overdreven brug af co-processer.




  1. Sådan opdateres JSON-kolonnen i Oracle 12.1

  2. Cpp-Mysql udefineret reference til 'en funktion'-fejl

  3. Hvorfor CONCAT() ikke som standard er standardtegnsæt i MySQL?

  4. Sådan viser du sys_refcursor output pl sql med Toad tool