Prova questo:
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;
Produce esattamente l'output richiesto.
Innanzitutto, nella sottoquery, recupero interi nodi pappagallo. Un nodo per riga.
Successivamente, ottengo il nome e i descrittori con xpath(). Entrambi sono array. Prendo il primo (e unico) elemento di name
e dividi il descriptor
array con `unnest(), arrivando così al risultato desiderato.
Ho scritto una risposta esauriente a una domanda correlata recentemente. Potrebbe interessarti.