首页 文章

Postgres:导入巨大的XML文件

提问于
浏览
0

我需要将巨大的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文件导入一个字段 . 上面的代码能够将我的250MB文件加载到我的机器上3m 57s的1773844行中 . 我觉得这还不错 . 导入文件后,我可以相对快速地转换数据,因为Postgres很擅长 .

还有更好的想法?

1 回答

  • 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
    

相关问题