Versuchen Sie Folgendes:
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;
Erzeugt genau die angeforderte Ausgabe.
Zuerst rufe ich in der Unterabfrage ganze Parrot-Knoten ab. Ein Knoten pro Zeile.
Als nächstes bekomme ich den Namen und die Deskriptoren mit xpath(). Beides sind Arrays. Ich nehme das erste (und einzige) Element von name
und teilen Sie den descriptor
auf array mit `unnest(), wodurch man zum gewünschten Ergebnis kommt.
Ich habe eine umfassende Antwort auf eine verwandte Frage geschrieben in letzter Zeit. Könnte für Sie interessant sein.