PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wstaw XML z pliku w PostgreSQL

Handily właśnie napisałem przykład, jak to zrobić ze zwykłymi plikami tekstowymi, które będą miały zastosowanie równie dobrze do xml akta. Zobacz pytanie aktualizowanie wierszy tabeli na podstawie pliku txt .

Okazuje się, że możesz to zrobić za pomocą 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

Jeśli robisz dużo tego, możesz dysk psql za pomocą współprocesu lub przynajmniej wygenerować SQL i przesłać go do psql jest standardowe, więc nie musisz w kółko wykonywać całej konfiguracji/zrywania połączenia.

Alternatywnie, robiąc to z powłoką:

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

Generowanie losowych separatorów ma na celu ochronę przed (mało prawdopodobnymi) atakami wstrzykiwania, które polegają na znajomości lub odgadnięciu znacznika separatora cytowania dolara.

Będziesz dużo rozsądniej i szczęśliwiej, jeśli użyjesz odpowiedniego języka skryptowego i biblioteki klienta PostgreSQL, takiej jak Perl z DBI i DBD::Pg , Python z psycopg2 lub Ruby z Pg klejnot dla każdej niebanalnej pracy. Znacząca praca z bazami danych w powłoce prowadzi do bólu, cierpienia i nadmiernego używania współprocesów.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Połączenie Postgres jest wolne od PHP

  2. Skopiuj z csv do tabeli z automatycznym przyrostem kolumny PSQL id serial

  3. Szczegółowe informacje na temat dostawców chmury:PostgreSQL na Microsoft Azure

  4. Dlaczego null równa się liczba całkowita w WHERE?

  5. PostgreSQL konwertuje kolumny na wiersze? Transponować?