sql >> Database >  >> RDS >> PostgreSQL

Postgres:fout bij gebruik van GROUP BY en ORDER (op heroku)

Uw directe probleem is dat u ongeldige SQL produceert voor PostgreSQL:

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

Uw ORDER BY komt niet overeen met de rest van uw zoekopdracht. U kunt geen kolom in een gegroepeerde query gebruiken, tenzij die kolom ook is gegroepeerd of als de kolom in een aggregatiefunctie wordt weergegeven, dat is wat het foutbericht betekent. De reden is dat PostgreSQL niet weet van welke rij created_at te gebruiken wanneer een groep rijen wordt gecombineerd door de GROUP BY-component; sommige databases kiezen gewoon stilletjes een rij, PostgreSQL geeft er de voorkeur aan streng te zijn en wil dat je de dubbelzinnigheid zelf verwijdert.

Probeer zelf de bestelling op te geven:

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

Een andere optie is om DISTINCT te gebruiken in plaats van GROUP BY om duplicaten te voorkomen:

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

Trouwens, je zou dat soort dingen eigenlijk niet in een view moeten doen, misschien wil je dat naar je controller verplaatsen.

Uw echte probleem is dat u zich bovenop de ene database ontwikkelt terwijl u deze op een andere implementeert. Ik raad u aan uw ontwikkelomgeving over te schakelen naar PostgreSQL 8.3 (als u implementeert naar een gedeelde Heroku-database) of PostgreSQL 9.0 (als u implementeert naar een speciale database).



  1. Fout bij 'DELIMITER $$'

  2. Controleer of dit duplicaat is

  3. INFO-uitvoer ondanks SET client_min_messages TO WAARSCHUWING vlak ervoor

  4. Loop over array-dimensie in plpgsql