【问题标题】:Insert XML from file in PostgreSQL从 PostgreSQL 中的文件插入 XML
【发布时间】:2013-03-25 09:19:51
【问题描述】:

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

有什么简单的方法吗?

马雷克

【问题讨论】:

  • 您使用什么语言和客户端库? PostgreSQL 版本?
  • PostgreSQL 9.0.7。将从 php 代码 (php 5.3) 访问数据库。是不是说没有简单的(内置PostgreSQL)方式将xml文件内容加载到数据库表列中?
  • 这通常由客户端软件完成,但我想不出一个简单的方法来使用psql。您使用的是哪个 SQL 客户端?
  • 我在 SUSE linux (SLED) 下使用 psql 或者在 Windows 下可以使用 pgAdmin III v1.16.1。

标签: xml file postgresql insert


【解决方案1】:

我刚刚写了一个示例,说明如何使用纯文本文件执行此操作,该示例同样适用于xml 文件。见问题updating table rows based on txt file

事实证明你可以用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

如果您正在做很多这样的事情,您可能想要 drive psql using a co-process 或至少生成 SQL 并将其通过管道传输到 psql 的标准输入,因此您不必进行所有连接设置/拆卸及以上。

或者,使用 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__

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

如果您使用适当的脚本语言和 PostgreSQL 客户端库(例如带有 DBIDBD::Pg 的 Perl、带有 psycopg2 的 Python 或带有Pg gem 用于任何重要的工作。在 shell 中使用大量数据库会导致痛苦、痛苦和过度使用协同进程。

【讨论】:

  • 另一种选择是使用支持“扩展”语法的 SQL Workbench/J,例如:insert into foo (id, content) values (42, {$clobfile='/foo/bar.xml')
  • 这个呢?如果它适用于文本文件,它也应该适用于 xml 文件 stackoverflow.com/questions/10968039/… 我的意思是使用 \set content cat file INSERT INTO testtable VALUES(15, :'content');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多