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

Heroku - ActiveRecord::StatementInvalid (PG::Error:ERROR:żądana kolumna nie istnieje

Standardowe łańcuchy SQL używają pojedynczych cudzysłowów, podwójne cudzysłowy są dla identyfikatorów (takich jak nazwy tabel i kolumn); PostgreSQL jest tutaj zgodny ze standardem, MySQL i SQLite są mniej rygorystyczne, inne bazy danych robią inne rzeczy z różnym stopniem rygorystyczności. W każdym razie pojedyncze cudzysłowy dla literałów ciągu SQL powinny działać wszędzie tak samo.

Używasz podwójnych cudzysłowów w ciągu SQL:

@holidays = Holiday.find(:all, :conditions => 'state = "requested"')
#------------------------------------------------------^---------^

Musisz pojedyncze cudzysłowy:

@holidays = Holiday.find(:all, :conditions => %q{state = 'requested'})

lub zmodernizuj go i pozwól ActiveRecord zająć się cytowaniem:

@holidays = Holiday.where(:state => 'requested')

Prawdopodobnie będziesz musiał również poprawić cytat w tym przypadku:

@holidays = Holiday.find(:all, :conditions => ["approver_id = #{current_user.id}", "state = requested"])

Ponownie, modernizacja jest najłatwiejszym sposobem:

@holidays = Holiday.where(:approver_id => current_user.id, :state => 'requested')

Zgaduję, że programujesz na SQLite, ale wdrażasz na PostgreSQL. To zły pomysł, zawsze rozwijaj i wdrażaj na tym samym stosie.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć użytkownika tylko do odczytu w PostgreSQL

  2. Wykonaj zapytanie o godziny pracy w PostgreSQL

  3. PostgreSQL Upsert (w przypadku konfliktu) z tymi samymi wartościami w Insert i Update

  4. Zoptymalizuj tabele PostgreSQL tylko do odczytu

  5. Czy PL/pgSQL i SQL w PostgreSQL są na tym samym poziomie co standard SQL/PSM, a nie tylko jako standard SQL?