Дайте ему любую базовую модель, скажем;
class Post(models.Model):
created = models.DateTimeField(auto_now_add=True)
title = models.CharField(_('Title'), max_length=100)
content = models.TextField(_('Content html'), max_length=65000)
author = models.ForeignKey('user.User', on_delete=models.SET_NULL)
Запрос типа Post.objects.annotate(Count('id'))
(или любое поле, любое аннотирование ()) завершается с ошибкой:
ProgrammingError: column "post.created" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT "post"."id", "post"."created", "post"."ti...
Использование django 1.11.16 и postgres 9.4.19.
Как я читал здесь, в другой вопрос stackoverflow пробовал разные версии django и postgres версии;используя django 2.0, 2.1.2, postgres 9.5 .. та же ошибка!Читая вокруг, я видел, что это может быть проблемой, связанной с SQL, но у меня эта проблема только на одном сервере с Ubuntu 18.04 (бионический).Локальный запуск запроса в Ubuntu 16.04 с django 1.11.16 или любой версией выше и postgres 9.4 или выше работает нормально в моей локальной системе. Так что проблема может быть связана с некоторыми низкоуровневыми библиотекамивозможно, я не выполняю сложные запросы, любой простой annotate () с django 1.11+ не работает в ubuntu 18.04 с postgres 9.4 или 9.5
[ОБНОВЛЕНИЕ] Может быть полезно дляЕсли вы оказались в этом сценарии, не имея ни малейшего представления о том, что происходит, убедитесь, что в рассматриваемой таблице созданы индексы .Моя проблема оказалась в том, что таблица posts
не имела ни определения PRIMARY KEY
, ни каких-либо других ограничений, сбой в pg_restore
, который восстановил все данные, и некоторые определения схемы, да, вы правильно прочитали некоторые другие определения схемы отсутствовали , понятия не имею почему .. Но вместо того, чтобы попытаться отладить то, что произошло с pg_restore
, во-первых, я запустил начальный python manage migrate
на пустой БД, поэтому схема былаправильно созданный на этот раз и проверенный (psql -d <db_name> -c '\d posts'
), затем снова запустите pg_restore
с флагами --data-only
и --disable-triggers
. Итак, наконец-то я получил схему и данные, правильно восстановленные и запрос сработал