Zkuste toto:
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;
Vytváří přesně požadovaný výstup.
Nejprve v poddotazu získám celé uzly papoušků. Jeden uzel na řádek.
Dále získám název a deskriptory pomocí xpath(). Oba jsou pole. Beru první (a jediný) prvek name
a rozdělte descriptor
pole pomocí `unnest(), čímž se dosáhne požadovaného výsledku.
Napsal jsem komplexní odpověď na související otázku nedávno. Může vás to zajímat.