我想在将大数据移入数据库之前检查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
谢谢!
我认为这是对基础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。