Prøv dette:
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;
Producerer præcis det ønskede output.
Først, i underforespørgslen, henter jeg hele papegøje-noder. Én node pr. række.
Dernæst får jeg navnet og deskriptorerne med xpath(). Begge er arrays. Jeg tager det første (og eneste) element i name
og opdel descriptor
array med `unnest(), og derved kommer frem til det ønskede resultat.
Jeg skrev et omfattende svar på et relateret spørgsmål for nylig. Kan være interessant for dig.