PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Chèn XML từ tệp trong PostgreSQL

Tiện tay, tôi vừa viết một ví dụ về cách thực hiện việc này với các tệp văn bản thuần túy sẽ áp dụng tốt như nhau cho xml các tập tin. Xem câu hỏi cập nhật các hàng trong bảng dựa trên tệp txt .

Hóa ra bạn có thể làm điều này với 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

Nếu bạn đang làm nhiều điều này, bạn có thể muốn psql sử dụng đồng quy trình hoặc ít nhất để tạo SQL và chuyển nó vào psql của stdin, vì vậy bạn không cần phải thực hiện lặp đi lặp lại tất cả việc thiết lập / gỡ bỏ kết nối đó.

Cách khác, làm điều đó với shell:

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

Việc tạo dấu phân tách ngẫu nhiên là để bảo vệ chống lại các cuộc tấn công tiêm (không chắc) dựa vào việc biết hoặc đoán thẻ dấu phân tách báo giá đô la.

Bạn sẽ được nhiều tốt hơn và hạnh phúc hơn nếu bạn sử dụng ngôn ngữ kịch bản thích hợp và thư viện ứng dụng khách PostgreSQL như Perl với DBIDBD::Pg , Python với psycopg2 hoặc Ruby với Pg đá quý cho bất kỳ công việc không tầm thường. Công việc quan trọng với cơ sở dữ liệu trong shell dẫn đến đau đớn, khổ sở và việc sử dụng quá nhiều đồng quy trình.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để sử dụng truy vấn con trong django?

  2. thay đổi cơ sở dữ liệu (postgresql) trong python bằng cách sử dụng psycopg2 động

  3. Hiểu các ràng buộc kiểm tra trong PostgreSQL

  4. yêu cầu postgresql qua một số giản đồ

  5. Cải thiện hiệu suất của ORDER BY trên tham gia chéo jsonb với nhóm tham gia nội bộ bằng cách