PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Вмъкнете XML от файл в PostgreSQL

Удобно, току-що написах пример как да направите това с обикновени текстови файлове, които ще се прилагат еднакво добре към xml файлове. Вижте въпроса актуализиране на редове на таблица въз основа на txt файл .

Оказва се, че можете да направите това с 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

Ако правите много от това, може да искате да устройство psql използване на съвместен процес или поне да генерира SQL и да го насочи към psql stdin, така че не е нужно да правите цялата тази настройка/разкъсване на връзката отново и отново.

Като алтернатива го правите с обвивката:

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

Произволното генериране на разделител е за защита срещу (малко вероятни) атаки за инжектиране, които разчитат на познаване или отгатване на етикета за разделяне на долари.

Ще станеш много по-разумни и щастливи, ако използвате подходящ скриптов език и клиентска библиотека PostgreSQL като Perl с DBI и DBD::Pg , Python с psycopg2 или Ruby с Pg скъпоценен камък за всяка нетривиална работа. Значителна работа с бази данни в обвивката води до болка, страдание и прекомерно използване на съвместни процеси.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Безопасно преименувайте таблици, като използвате колони от сериен първичен ключ

  2. Разлика между INSERT и COPY

  3. Генерирайте серии от месеци за всеки ред в Oracle

  4. Как да внедрите високодостъпен Canvas LMS с клъстер от база данни PostgreSQL

  5. Връщане на динамична таблица с неизвестни колони от функцията PL/pgSQL