正在将 XML 数据导入 PostgreSQL

Importing XML Data into PostgreSQL

我有以下 XML 文件,我需要将其放入 Postgresql 中的 Table。

<?xml version="1.0" encoding="UTF-8"?>
<session xmlns="http://winscp.net/schema/session/1.0" name="KenWiens@205.138.249.107" start="2021-07-05T22:48:17.866Z">
  <ls>
    <destination value="/" />
    <files>
      <file>
        <filename value="ALL_ELAN_CLAIMS_20180601_20210531.txt" />
        <type value="-" />
        <size value="202286572" />
        <modification value="2021-06-03T15:45:25.000Z" />
        <permissions value="rw-rw-rw-" />
        <owner value="user" />
        <group value="group" />
      </file>
      <file>
        <filename value="ALL_ELAN_CLAIMS_20180701_20210630.txt" />
        <type value="-" />
        <size value="208553108" />
        <modification value="2021-07-03T12:16:37.000Z" />
        <permissions value="rw-rw-rw-" />        <owner value="user" />
        <group value="group" />
      </file>

每组文件名、类型、大小、修改应该在新的单行中table。我无法使用在线发布的示例来完成此操作。你能帮忙吗?

您可以使用 xmltable 执行此操作。下面是一个例子。请。请注意,我在您的 XML 文档中添加了一些缺失的结束标记以使其有效。

with t(xml_value) as
(
select
$XML$<?xml version="1.0" encoding="UTF-8"?>
<session xmlns="http://winscp.net/schema/session/1.0" name="KenWiens@205.138.249.107" start="2021-07-05T22:48:17.866Z">
  <ls>
    <destination value="/" />
    <files>
      <file>
        <filename value="ALL_ELAN_CLAIMS_20180601_20210531.txt" />
        <type value="-" />
        <size value="202286572" />
        <modification value="2021-06-03T15:45:25.000Z" />
        <permissions value="rw-rw-rw-" />
        <owner value="user" />
        <group value="group" />
      </file>
      <file>
        <filename value="ALL_ELAN_CLAIMS_20180701_20210630.txt" />
        <type value="-" />
        <size value="208553108" />
        <modification value="2021-07-03T12:16:37.000Z" />
        <permissions value="rw-rw-rw-" />        <owner value="user" />
        <group value="group" />
      </file>
    </files>
  </ls>
</session>
$XML$::xml
)
select x.* from t, xmltable 
(
  xmlnamespaces ('http://winscp.net/schema/session/1.0' as ns),
  '/ns:session/ns:ls/ns:files/ns:file' 
  passing xml_value
  columns 
    filename text path 'ns:filename/@value',
    type text path 'ns:type/@value',
    size integer path 'ns:size/@value',
    modification timestamptz path 'ns:modification/@value'
) x;

/* result:
filename                             |type|size     |modification       |
-------------------------------------+----+---------+-------------------+
ALL_ELAN_CLAIMS_20180601_20210531.txt|-   |202286572|2021-06-03 18:45:25|
ALL_ELAN_CLAIMS_20180701_20210630.txt|-   |208553108|2021-07-03 15:16:37|
*/