Prova detta:
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;
Ger exakt den efterfrågade utdata.
Först, i underfrågan, hämtar jag hela papegojnoder. En nod per rad.
Därefter får jag namnet och deskriptorerna med xpath(). Båda är arrayer. Jag tar det första (och enda) elementet i name
och dela upp descriptor
array med `unnest(), vilket kommer fram till det önskade resultatet.
Jag skrev ett uttömmande svar på en relaterad fråga nyligen. Kan vara av intresse för dig.