Поддерживает ли ArrayAgg только одно поле?В Django специфическая функция PostgreSQL ArrayAgg не поддерживает несколько полей?
Я замечаю, что команда sql, сгенерированная ArrayAgg в django, не имеет круглых скобок внутри array_agg(), которая является просто array_agg('field1','field2')
, что вызывает синтаксическую ошибку с несколькими полями и только буквально поддерживает только одно поле. Я считаю, array_agg(('field1','field2'))
может поддерживать несколько полей.
Кто-нибудь знает, поддерживает ли ArrayAgg только одно поле. И если есть какой-либо способ достичь той же функции в Django. Благодарности
Запрос:
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: функция array_agg (варьируя характер, характер изменения, характер изменения) не существует LINE 1: SELECT "iss_organisation" . "id", ARRAY_AGG ("iss_phone". "numbe ... ^ СОВЕТ: Никакая функция не соответствует указанному имени и типам аргументов. Возможно, вам придется добавлять явные типы приведения.
Я думаю, что если ARRAY_AGG("iss_phone"."number", "iss_phone"."kind", "iss_phone"."comment")
может быть заменен на ARRAY_AGG(("iss_phone"."number", "iss_phone"."kind", "iss_phone"."comment"))
, это сработает.
Опубликовать весь код/запрос. – ultrajohn