我需要将大型XML文件导入到数据库中,然后将其转换为另一种格式。
目前我正在尝试使用Postgres完成此操作。
我已经使用以下方法将一个250 MB的文件导入到表中:
insert into test
(name, "element")
SELECT
(xpath('//title/text()', myTempTable.myXmlColumn))[1]::text AS name
,myTempTable.myXmlColumn as "element"
FROM unnest(
xpath
( '//test'
,XMLPARSE(DOCUMENT convert_from(pg_read_binary_file('test.xml'), 'UTF8'))
)
) AS myTempTable(myXmlColumn)
;
但是当处理大文件时(我尝试了一个大于1GB的文件),我得到了以下错误:
SQL 错误[22023]: 错误:请求的长度过长 错误: 请求的长度过大。 错误: 请求的长度过大。
我的目标是导入和转换大小约为50 GB的文件。
有任何建议/替代方案吗?
更新:
这个想法不是将1GB文件导入到一个字段中。上面的代码能够在我的机器上将我的250MB文件在3m 57s内加载并拆分成1773844行。 我认为这不错。 在导入文件后,我可以相对快速地转换数据,因为Postgres擅长此项工作。
有更好的建议吗?