PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres:Erro ao usar GROUP BY e ORDER (no heroku)


Seu problema imediato é que você está produzindo SQL inválido para PostgreSQL:
SELECT category FROM "microposts" GROUP BY category ORDER BY microposts.created_at DESC

Seu ORDER BY não corresponde ao restante de sua consulta. Você não pode usar uma coluna em uma consulta agrupada, a menos que essa coluna também esteja agrupada ou se a coluna aparecer em uma função agregada, é isso que a mensagem de erro significa. A razão é que o PostgreSQL não saberá qual linha created_at para usar quando um grupo de linhas é combinado pela cláusula GROUP BY; alguns bancos de dados escolherão silenciosamente uma linha por conta própria, o PostgreSQL prefere ser rigoroso e quer que você mesmo remova a ambiguidade.

Tente especificar o pedido você mesmo:
@categories = Micropost.select("category").group("category").order("category")

Outra opção é usar DISTINCT em vez de GROUP BY para evitar duplicatas:
@categories = Micropost.select('DISTINCT(category)')

BTW, você realmente não deveria estar fazendo essa coisa de classificação em uma visão, você pode querer mover isso para o seu controlador.

Seu problema real é que você está desenvolvendo em cima de um banco de dados enquanto implementa em outro. Eu recomendo que você mude seu ambiente de desenvolvimento para PostgreSQL 8.3 (se estiver implantando em um banco de dados compartilhado Heroku) ou PostgreSQL 9.0 (se estiver implantando em um banco de dados dedicado).