为什么PostgreSQL不解析大型XML数据?

问题描述 投票:0回答:1

我想在将大数据移入数据库之前检查PostgreSQL中XML的功能。

我有一个简单的测试来检查PostgreSQL中的XML功能。它适用于3000000 XML格式的数据,但不适用于4000000。

select xml_is_well_formed('<test>' || repeat('월', 3000000) || '</test>');

select xml_is_well_formed('<test>' || repeat('월', 4000000) || '</test>');

这是我的XML能力测试的样子:XML_Test.sh

#### XML capabilities
sql1="select xml_is_well_formed('<test>' || repeat('월', 3000000) || '</test>');"
sql2="select xml_is_well_formed('<test>' || repeat('월', 4000000) || '</test>');"

status="OK:"

ret=$(echo "$sql1" | psql -At -U $user -h $host $db)

if [ "$ret" != "t" ]
then
  status="FAILED:"
fi
echo "  $status XML capability (test 1/libxml): "

status="OK:"

ret=$(echo "$sql2" | psql -At -U $user -h $host $db)

if [ "$ret" != "t" ]
then
  status="FAILED:"
fi
echo "  $status XML capability (test 2/libxml): "

我正在使用Amazon Linux AMI,我的PostgreSQL版本是:9.2.24,并使用默认的PostgreSQL配置。

编辑:我的系统总内存为32 GB。

运行以下命令仅表示测试是否通过:

$ echo "select xml_is_well_formed('<test>' || repeat('월', 4000000) || '</test>')" | psql -At -U USER -h localhost DB
f


$ echo "select xml_is_well_formed('<test>' || repeat('월', 3000000) || '</test>')" | psql -At -U USER -h localhost DB
t

谢谢!

sql xml postgresql postgresql-9.1
1个回答
0
投票

我认为这是对基础xml解析器库的限制。

=> SELECT xmlparse(document '<?xml version="1.0"?><test>' || repeat('월', 4000000) || '</test>');
ERROR:  invalid XML document
DETAIL:  line 1: xmlSAX2Characters: huge text node
��월월월월월월월월월월월월월월월월월월월월월월월월월월
                                                                               ^
line 1: Extra content at the end of the document
��월월월월월월월월월월월월월월월월월월월월월월월월월월
                                                                               ^

也许在文本节点上有1GB的限制。

老实说,如果您打算使用多GB的xml文档,我怀疑您想要的是专用系统,而不是通用的RDBMS。

© www.soinside.com 2019 - 2024. All rights reserved.