Mar*_*man 3 xml postgresql file insert
我有几个 XML 文件,想要将它们的内容插入到 PostgreSQL 表中。该表有两列 - id(类型为serial)和一个xml类型列,我想在其中插入一个xml文件的内容(一行,一列=一个xml文件)。在文档中我还没有找到如何从文件插入 xml。
有一些简单的方法可以做到吗?
马雷克
我刚刚写了一个示例,说明如何使用纯文本文件执行此操作,该示例同样适用于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 并将其通过管道传输到 的psql
stdin 中,这样您就不必一遍又一遍地执行所有连接设置/拆卸。
或者,使用 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 中大量使用数据库会导致痛苦和过度使用协进程。DBI
DBD::Pg
psycopg2
Pg