Prueba esto:
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 exactamente el resultado solicitado.
Primero, en la subconsulta, recupero nodos de loro completos. Un nodo por fila.
Luego, obtengo el nombre y los descriptores con xpath(). Ambos son matrices. Tomo el primer (y único) elemento de name
y dividir el descriptor
array con `unnest(), llegando así al resultado deseado.
Escribí una respuesta completa a una pregunta relacionada recientemente. Puede ser de su interés.