PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Schienen 3.1. Heroku PGError:Operator existiert nicht:Zeichen variieren =ganze Zahl

Ihr Problem ist hier:

WHERE "reviews"."trip_id" = 32

und die Fehlermeldung besagt:

Sie haben also Ihre trip_id erstellt Spalte in reviews als String statt als Integer. Das wird in SQLite gut funktionieren, weil das Typsystem von SQLite ziemlich locker ist, aber es wird nicht in PostgreSQL funktionieren, da PostgreSQL etwas strenger ist.

Sie könnten versuchen, eine Migration hinzuzufügen, um den Typ von trip_id zu korrigieren :

def change
  change_column :reviews, :trip_id, :integer
end

und wenn das nicht funktioniert, löschen Sie die Tabelle und erstellen Sie sie neu:

def change
  drop_table :reviews
  create_table :reviews do |t|
    #...
    t.integer :trip_id
    #...
  end
end

Sie können ALTER TABLE auch über rohes SQL ausführen, wenn Sie Daten haben, die Sie beibehalten möchten, und die change_column funktioniert nicht:

def change
  execute %q{
    alter table reviews
    alter column trip_id
    type int using cast(trip_id as int)
  }
end

Das sollte in PostgreSQL (aber nicht in SQLite) funktionieren, solange Sie keine fehlerhaften Daten in Ihrer trip_id haben .

Sobald Sie das geklärt haben, sollten Sie PostgreSQL installieren und Ihre Entwicklungsumgebung darauf umstellen. Die Entwicklung auf SQLite und die Bereitstellung auf PostgreSQL (oder die Entwicklung auf einer Datenbank und die Bereitstellung auf einer anderen Datenbank) ist eine schlechte Idee und wird Ihnen alle Arten von Kummer und Verwirrung bereiten.