Spróbuj tego:
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;
Tworzy dokładnie żądany wynik.
Najpierw w podzapytaniu pobieram całe węzły papugi. Jeden węzeł na wiersz.
Następnie otrzymuję nazwę i deskryptory za pomocą xpath(). Oba są tablicami. Biorę pierwszy (i jedyny) element name
i podziel descriptor
tablica z `unnest(), tym samym osiągając pożądany wynik.
Napisałem kompleksową odpowiedź na powiązane pytanie ostatnio. Może Cię zainteresować.