我需要将巨大的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)
;
但是对于更大的文件(我尝试了> 1 GB的文件,我得到了
SQL错误[22023]:错误:请求的长度太大 错误:请求的长度太大 错误:请求的长度太大
我的目标是导入和转换大小约为50 GB的文件。
有任何建议/替代方案吗?
这个想法不是将1GB文件导入一个字段。上面的代码能够在我的机器上加载AND淘汰我的250MB文件到3个57秒的1773844行。我觉得这还不错。导入文件后,我可以相对快速地转换数据,因为Postgres很擅长。
有更好的想法吗?
答案 0 :(得分:0)
您是否尝试过\COPY
+ UNNEST
?
使用中间表..
CREATE TABLE tmp_tb (tmp_xml XML);
使用psql
..
cat huge.xml | psql db -c "\COPY tmp_tb (tmp_xml) FROM STDIN;"
加载XML后,您可以在内部解析它..
INSERT INTO tb (test)
SELECT UNNEST(XPATH('//test',tmp_xml)) FROM tmp_tb