sql >> Databáze >  >> RDS >> PostgreSQL

Postgres:Chyba při používání GROUP BY a ORDER (na heroku)

Váš bezprostřední problém je, že vytváříte neplatné SQL pro PostgreSQL:

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

Vaše ORDER BY neodpovídá zbytku vašeho dotazu. Sloupec nelze použít ve seskupeném dotazu, pokud tento sloupec není také seskupený nebo pokud se sloupec neobjeví v agregační funkci, to znamená chybová zpráva. Důvodem je, že PostgreSQL nebude vědět, který řádek je created_at použít, když je skupina řádků kombinována klauzulí GROUP BY; některé databáze si jen tiše vyberou řádek samy, PostgreSQL upřednostňuje přísnost a chce, abyste tuto nejednoznačnost odstranili sami.

Zkuste zadat objednávku sami:

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

Další možností je použít DISTINCT místo GROUP BY, aby se předešlo duplicitám:

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

BTW, opravdu byste neměli dělat takové věci v pohledu, možná to budete chtít přesunout do svého ovladače.

Váš skutečný problém je v tom, že vyvíjíte nad jednou databází a nasazujete na jinou. Doporučil bych vám přepnout vývojové prostředí na PostgreSQL 8.3 (pokud nasazujete do sdílené databáze Heroku) nebo PostgreSQL 9.0 (pokud nasazujete do vyhrazené databáze).



  1. Ani percentile_cont ani percentile_disc nevypočítávají požadovaný 75. percentil v PostgreSQL 9.6.3

  2. Mysql transakce v rámci transakcí

  3. Chyba databáze v paměti H2 Chyba převodu dat při převodu UUID jako primárního klíče

  4. Jak předat celý řádek (v SQL, ne PL/SQL) do uložené funkce?