sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres:Fel vid användning av GROUP BY och ORDER (på heroku)

Ditt omedelbara problem är att du producerar ogiltig SQL för PostgreSQL:

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

Din ORDER BY matchar inte resten av din fråga. Du kan inte använda en kolumn i en grupperad fråga om inte den kolumnen också är grupperad eller om kolumnen visas i en aggregerad funktion, det är vad felmeddelandet betyder. Anledningen är att PostgreSQL inte vet vilken rad som är created_at att använda när en grupp rader kombineras av GROUP BY-satsen; vissa databaser kommer bara tyst att välja en rad på egen hand, PostgreSQL föredrar att vara strikt och vill att du själv ska ta bort oklarheten.

Prova att ange beställningen själv:

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

Ett annat alternativ är att använda DISTINCT istället för GROUP BY för att undvika dubbletter:

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

BTW, du borde verkligen inte göra sånt i en vy, du kanske vill flytta det till din handkontroll.

Ditt verkliga problem är att du utvecklar ovanpå en databas medan du distribuerar på en annan. Jag skulle rekommendera att du byter utvecklingsmiljö till PostgreSQL 8.3 (om du distribuerar till en Heroku delad databas) eller PostgreSQL 9.0 (om du distribuerar till en dedikerad databas).



  1. CakePHP 3 tidskolumn läggs till datum

  2. Sparar ändringar efter tabellredigering i SQL Server Management Studio

  3. Formatera det totala värdet till en valuta med 2 decimaler

  4. SQL, frågor om join