2017-02-19 1 views
0

Unterstützt ArrayAgg nur einzelne Felder?In Django unterstützt die PostgreSQL-spezifische Funktion ArrayAgg nicht mehrere Felder?

Ich bemerke, dass der von ArrayAgg in django erzeugte Befehl keine Klammern innerhalb von array_agg() hat, was einfach array_agg('field1','field2') ist, was Syntaxfehler bei mehreren Feldern verursacht und nur buchstäblich nur einzelne Felder unterstützt. Ich denke, array_agg(('field1','field2')) kann mehrere Felder unterstützen.

Wer weiß, ob ArrayAgg nur einzelne Felder wirklich unterstützt. Und wenn es irgendeine Möglichkeit gibt, die gleiche Funktion in Django zu erreichen. Dank

Abfrage:

Organisation.objects.values('id').annotate(results=ArrayAgg('phones__number','phones__kind','phones__comment')) 

connection.queries:

SELECT "iss_organisation"."id", ARRAY_AGG("iss_phone"."number", "iss_phone"."kind", "iss_phone"."comment") AS "results" FROM "iss_organisation" LEFT OUTER JOIN "iss_phone" ON ("iss_organisation"."id" = "iss_phone"."object_id" AND ("iss_phone"."content_type_id" = 37)) GROUP BY "iss_organisation"."id" 

ProgrammingError: function array_agg (Rolle variiert wird, Variieren Charakter, Charakter unterschiedlicher) nicht vorhanden Zeile 1: SELECT "iss_organisation" . "ID", ARRAY_AGG ("iss_phone". "numbe ... ^ HINWEIS: Keine Funktion stimmt mit den angegebenen Namen und Argumenttypen überein. Möglicherweise müssen Sie explizite Typumwandlungen hinzufügen.

Ich denke, wenn ARRAY_AGG("iss_phone"."number", "iss_phone"."kind", "iss_phone"."comment") mit ARRAY_AGG(("iss_phone"."number", "iss_phone"."kind", "iss_phone"."comment")) ersetzt werden kann, würde es funktionieren.

+0

Geben Sie den gesamten Code/die Abfrage ein. – ultrajohn

Antwort

0

Bitte lesen Sie array_aggdocumentation, um ein besseres Verständnis der Funktionsweise der Funktion zu erhalten.

Verwandte Themen