PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres:Błąd podczas używania GROUP BY i ORDER (w heroku)

Twoim bezpośrednim problemem jest to, że tworzysz nieprawidłowy SQL dla PostgreSQL:

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

Twoje ORDER BY nie pasuje do reszty zapytania. Nie możesz użyć kolumny w zapytaniu zgrupowanym, chyba że ta kolumna jest również zgrupowana lub jeśli kolumna pojawia się w funkcji agregującej, właśnie to oznacza komunikat o błędzie. Powodem jest to, że PostgreSQL nie będzie wiedział, który wiersz zawiera created_at do użycia, gdy grupa wierszy jest połączona klauzulą ​​GROUP BY; niektóre bazy danych po prostu samodzielnie wybierają wiersz, PostgreSQL woli być surowy i chce, abyś sam usunął niejednoznaczność.

Spróbuj samodzielnie określić zamówienie:

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

Inną opcją jest użycie DISTINCT zamiast GROUP BY, aby uniknąć duplikatów:

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

BTW, naprawdę nie powinieneś robić tego typu rzeczy w widoku, możesz chcieć przenieść to do swojego kontrolera.

Twój prawdziwy problem polega na tym, że programujesz na jednej bazie danych podczas wdrażania na innej. Zalecam zmianę środowiska programistycznego na PostgreSQL 8.3 (jeśli wdrażasz do współdzielonej bazy danych Heroku) lub PostgreSQL 9.0 (jeśli wdrażasz do dedykowanej bazy danych).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - jak renderować datę w innej strefie czasowej?

  2. Funkcja PostgreSQL do iteracji/działania na wielu wierszach ze stanem

  3. Brak wyników zwróconych przez błąd zapytania w PostgreSQL

  4. pgpredict – Analiza predykcyjna w PostgreSQL

  5. Jak mogę sprawdzić wszystkie moje dane w odległości do 5 metrów?