正在将 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|
*/
我有以下 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|
*/