Опитайте това:
SELECT (xpath('./@name', parrot.node))[1] AS name
, unnest(xpath('./descriptor/text()', parrot.node)) AS descriptor
FROM (
SELECT unnest(xpath('./parrot', parrot_xml.document)) AS node
FROM parrot_xml
) parrot;
Произвежда точно искания резултат.
Първо, в подзаявката извличам цели папагалски възли. Един възел на ред.
След това получавам името и дескрипторите с xpath(). И двете са масиви. Вземам първия (и единствен) елемент от name
и разделете descriptor
масив с `unnest(), като по този начин се достига до желания резултат.
Написах изчерпателен отговор на свързан въпрос наскоро. Може да представлява интерес за вас.