从 PostgreSQL 中的文件插入 XML

Mar*_*man 3 xml postgresql file insert

我有几个 XML 文件,想要将它们的内容插入到 PostgreSQL 表中。该表有两列 - id(类型为serial)和一个xml类型列,我想在其中插入一个xml文件的内容(一行,一列=一个xml文件)。在文档中我还没有找到如何从文件插入 xml。

有一些简单的方法可以做到吗?

马雷克

Cra*_*ger 6

我刚刚写了一个示例,说明如何使用纯文本文件执行此操作,该示例同样适用于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
Run Code Online (Sandbox Code Playgroud)

如果您要做很​​多这样的事情,您可能希望使用协进程来驱动psql,或者至少生成 SQL 并将其通过管道传输到 的psqlstdin 中,这样您就不必一遍又一遍地执行所有连接设置/拆卸。

或者,使用 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__
Run Code Online (Sandbox Code Playgroud)

随机分隔符生成是为了防止(不太可能的)依赖于了解或猜测美元引用分隔符标签的注入攻击。

如果您使用适当的脚本语言和 PostgreSQL 客户端库(例如 Perl 和)、Python或 Ruby 和gem 来完成任何重要的工作,您将会变得更加理智和快乐。在 shell 中大量使用数据库会导致痛苦和过度使用协进程。DBIDBD::Pgpsycopg2Pg