PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres :erreur lors de l'utilisation de GROUP BY et ORDER (sur heroku)

Votre problème immédiat est que vous produisez du SQL invalide pour PostgreSQL :

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

Votre ORDER BY ne correspond pas au reste de votre requête. Vous ne pouvez pas utiliser une colonne dans une requête groupée à moins que cette colonne soit également groupée ou si la colonne apparaît dans une fonction d'agrégation, c'est ce que signifie le message d'erreur. La raison en est que PostgreSQL ne saura pas quelle ligne created_at à utiliser lorsqu'un groupe de lignes est combiné par la clause GROUP BY ; certaines bases de données choisiront simplement une ligne en silence, PostgreSQL préfère être strict et souhaite que vous supprimiez vous-même l'ambiguïté.

Essayez de spécifier vous-même la commande :

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

Une autre option consiste à utiliser DISTINCT au lieu de GROUP BY pour éviter les doublons :

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

BTW, vous ne devriez vraiment pas faire ce genre de choses dans une vue, vous voudrez peut-être déplacer cela vers votre contrôleur.

Votre vrai problème est que vous développez sur une base de données tout en déployant sur une autre. Je vous recommande de basculer votre environnement de développement vers PostgreSQL 8.3 (si vous déployez sur une base de données partagée Heroku) ou PostgreSQL 9.0 (si vous déployez sur une base de données dédiée).