PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres:Fehler bei Verwendung von GROUP BY und ORDER (auf heroku)

Ihr unmittelbares Problem ist, dass Sie ungültiges SQL für PostgreSQL erzeugen:

SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC

Ihr ORDER BY stimmt nicht mit dem Rest Ihrer Suchanfrage überein. Sie können eine Spalte nicht in einer gruppierten Abfrage verwenden, es sei denn, diese Spalte ist auch gruppiert oder wenn die Spalte in einer Aggregatfunktion erscheint, bedeutet dies die Fehlermeldung. Der Grund dafür ist, dass PostgreSQL nicht weiß, welche Zeile created_at ist zu verwenden, wenn eine Gruppe von Zeilen durch die GROUP BY-Klausel kombiniert wird; Einige Datenbanken wählen einfach stillschweigend eine Zeile aus, PostgreSQL zieht es vor, streng zu sein und möchte, dass Sie die Mehrdeutigkeit selbst entfernen.

Versuchen Sie, die Reihenfolge selbst anzugeben:

@categories = Micropost.select("category").group("category").order("category")

Eine weitere Option ist die Verwendung von DISTINCT statt GROUP BY, um Duplikate zu vermeiden:

@categories = Micropost.select('DISTINCT(category)')

Übrigens, Sie sollten so etwas wirklich nicht in einer Ansicht tun, Sie sollten das vielleicht auf Ihren Controller verschieben.

Ihr eigentliches Problem besteht darin, dass Sie auf einer Datenbank entwickeln, während Sie auf einer anderen bereitstellen. Ich würde empfehlen, dass Sie Ihre Entwicklungsumgebung auf PostgreSQL 8.3 (wenn Sie in einer gemeinsam genutzten Heroku-Datenbank bereitstellen) oder PostgreSQL 9.0 (wenn Sie in einer dedizierten Datenbank bereitstellen) umstellen.