2017-02-19 9 views
0

Поддерживает ли 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")), это сработает.

+0

Опубликовать весь код/​​запрос. – ultrajohn

ответ

0

Для получения лучшего понимания того, как работает эта функция, прочитайте array_agg's documentation.