Probeer dit:
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;
Produceert precies de gevraagde output.
Eerst haal ik in de subquery hele papegaai-knooppunten op. Eén knoop per rij.
Vervolgens krijg ik de naam en de descriptors met xpath(). Beide zijn arrays. Ik neem het eerste (en enige) element van name
en splits de descriptor
array met `unnest(), waardoor het gewenste resultaat wordt bereikt.
Ik schreef een uitgebreid antwoord op een gerelateerde vraag sinds kort. Wellicht interessant voor u.