创建一个“临时”表,其中包含您要导入的每个 XML 的一行。
然后使用 XML 函数(例如 xpath_table)将该 XML 列分割成行和列。像这样的:
-- make sure xpath_table is available
create extension xml2;
-- create XML staging table
create table xml_test (id integer, xml text);
-- create sample XML document
insert into xml_test (id, data)
values
(1, '<person-list>
<person>
<id>42</id>
<firstname>Arthur</firstname>
<lastname>Dent</lastname>
</person>
<person>
<id>43</id>
<firstname>Zaphod</firstname>
<lastname>Beeblebrox</lastname>
</person>
</person-list>'
);
现在,如果您的目标表是例如:
create table person
(
id integer not null primary key,
firstname text,
lastname text
);
你可以使用:
insert into person (id, firstname, lastname)
select person_id, firstname, lastname
from xpath_table('id', 'xml', 'xml_test',
'/person-list/person/id|/person-list/person/firstname|/person-list/person/lastname', 'id=1')
as t (docid integer, person_id integer, firstname text, lastname text)
函数id=1 的最后一个参数是从包含XML 列的表中选择的行。如果那里有多个文档,则需要选择与 xpath 表达式匹配的文档
您也可以使用核心 XML 函数创建一个没有 xml2 模块的类似视图。请参阅 user272735 在 cmets 中发布的链接。