Postgres:导入巨大的XML文件

时间:2018-02-21 08:28:33

标签: xml database postgresql import

我需要将巨大的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很擅长。

有更好的想法吗?

1 个答案:

答案 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