我正在尝试从表中获取XML并将XML元素附加到该表。我不想物理更新数据库中的XML。只需修改SELECT结果。
假设我们有一个带有该blob的XML字段,
<Test>
<ID>1</ID>
<Name>test123</Name>
</Test>
,我们要为此添加一个Type元素
<Test>
<ID>1</ID>
<Name>test123</Name>
<Type>Employee</Type>
</Test>
我们如何使用postgres XML函数实现这一目标? XML函数here的postgres文档似乎没有add_child方法。实际上,与字符串不同,postgres提供了很少的XML方法。我没有找到任何方法来使用SQL查询来修改XML数据,而不必从数据库中获取它们,在应用程序中对其进行修改以及使用修改后的条目更新表。尽管我的用例不需要我修改数据库中的数据,但我想将任何此类功能与SELECT查询一起使用以实现我的用例。有没有一种方法可以通过单个查询来实现?
答案 0 :(得分:1)
也许这不是最好的方法,但是它将满足您的要求:
SELECT
'<Test>' ||
xmlconcat(
xmlagg(parts),
xmlelement(name "Type", null, 'Employee')
) ||
'</Test>'
FROM
unnest(
xpath('/Test/*', '<Test><ID>1</ID><Name>test123</Name></Test>')
) AS parts;
首先,它使用Test
函数获取xpath()
元素的所有子元素。然后将这些部分聚合并与新的Type
元素连接。最后,再次添加根元素Test
。