进口 XML 文件B. PostgreSQL
我真的有很多文件 XML, 我想进口到桌子
:
为此,我有一个简单的脚本 bash 循环:
但是,这将尝试将每个文件的每行作为单独的字符串导入。 这导致错误:
我明白为什么它失败了,但我无法理解如何制作
立即在一行中导入整个文件。
xml_data
:
create table xml_data/result xml/;
为此,我有一个简单的脚本 bash 循环:
#!/bin/sh
FILES=/folder/with/xml/files/*.xml
for f in $FILES
do
psql psql -d mydb -h myhost -U usr -c \'\copy xml_data from $f \'
done
但是,这将尝试将每个文件的每行作为单独的字符串导入。 这导致错误:
ERROR: invalid XML content
CONTEXT: COPY address_results, line 1, column result: "xml version="1.0" encoding="UTF-8"?"
我明白为什么它失败了,但我无法理解如何制作
\copy
立即在一行中导入整个文件。
没有找到相关结果
已邀请:
4 个回复
快网
赞同来自:
对于那些需要工作示例的人:
或噪音较小
在这个例子中 XML 文件 /MyData.xml/:
笔记:
MyData.xml 必须在目录中 PG_Data /父目目录 pg_stat/.
例如
这是必需的 PostGreSQL 9.1+
通常,您可以在没有这样的文件的情况下实现这一点:
注意相比之下 MS-SQL, xpath text// 回报 NULL 通过意思 NULL, 不是空字符串。
如果由于任何原因,您需要清楚地检查可用性 NULL, 您可以使用
[not/@xsi:nil="true"/]
, 您需要传递NameSpaces数组,因为否则您会弄错 /但是,您可以省略所有命名空间,除外 xsi/.
您还可以检查字段是否包含在内 XML-text, 按照以下步骤
,xmlexists/'//xmlEncodeTest[1]' PASSING BY REF myTempTable.myXmlColumn/ AS c1e
例如,当您传递该值时 XML 价值 stored-procedure/function 为了 CRUD.
/看上面/
另外,请注意,通过该值的正确方法 null 在XML中是
, 但不是
或者什么都没有。 没有正确的方式传达 NULL 在属性 /你只能省略这个属性,但是它变得困难/慢慢确定一大集数据中的列数及其名称/.
例如。
/这更紧凑,但如果需要导入它,特别是如果来自带有几个的XML文件 GB 达尼斯 - 在数据转储中看到一个精彩的例子 stackoverflow/
董宝中
赞同来自:
快多了
更可靠。
你需要权利
超级菲尔德
, 并且文件应该是
本地服务器
DB, 在经济实惠的目录中。
具有其他解释和链接的完整示例代码:
https://coderoad.ru/7491479/
二哥
赞同来自:
特定父节点的元素
/.
我用数据遇到了这个问题,并寻找了很长一段时间的决定; 他的答案对我最有用。
示例数据文件,
:
在旁边:
原始文件 XML 我有 URL 在文档元素中
这防止了
分析数据。 他
将
工作 /没有错误消息/, 但 / 表是空的:
自源文件 - 3.4GB, 我决定用来编辑这个字符串
:
[
添加
/指导
编辑 "期限 2"/ 此外,巧合,在这种情况下,命令的执行速度加倍
.
]
我的数据文件夹 postgres /PSQL:
/
这样
, 我需要在那里复制我的数据文件 XML 和
使用B. PostgreSQL:
设想 /
/:
执行,输出 /在
/:
</hmdb></hmdb></synomyms></synonym>
董宝中
赞同来自:
, 用空白替换所有新行。 这将创建一个文件 XML 只有一行。 这样的文件我可以在一行中轻松导入
.
显然,当你有多线的值时,这不是一个好主意 XML. 幸运的是,这不是我的案子。
导入所有文件 XML 在文件夹中,您可以使用此脚本 bash: