我正在使用Django 1.11和Postgresql 9.6。
在我的应用中,有一个名为Person的模型,它有几个字段。在数据库中,它是一个物化视图。
class Person(models.Model):
personid = models.CharField(max_length=18, primary_key=True)
count = models.BigIntegerField()
native = models.CharField(max_length=2)
...
当执行时
persons = Person.objects.values('personid', 'native')\
.annotate(total=Count('native'))
它指出 psycopg2.ProgrammingError: column "person.native" must appear in the GROUP BY clause or be used in an aggregate function
只有当选择一个列或未将personid设置为主键或未执行annotate操作时,它才不会出现错误。
我打印查询SQL:
SELECT
"person"."native",
"person"."personid",
COUNT("person"."native") AS "total"
FROM "person"
GROUP BY "person"."native", "person"."personid"
我该怎么做?
我将视图转换为表格,并将personid设置为主键,然后就没有问题了。
psql
shell(或任何其他允许您直接发出查询的界面)中尝试此查询,而没有使用Django或Python,会发生什么? - W.Mannpersonid
是主键。如果您按此字段分组,它不会产生任何影响。 - alfonso.kim