PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Rails 3.1. Heroku PGError :l'opérateur n'existe pas :caractère variable =entier

Votre problème est ici :

WHERE "reviews"."trip_id" = 32

et le message d'erreur indique que :

vous avez donc créé votre trip_id colonne dans reviews sous forme de chaîne plutôt que sous forme d'entier. Cela fonctionnera bien dans SQLite car le système de type de SQLite est plutôt lâche, mais cela ne fonctionnera pas dans PostgreSQL car PostgreSQL est un peu plus strict.

Vous pouvez essayer d'ajouter une migration pour corriger le type de trip_id :

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

et si cela ne fonctionne pas, supprimez et recréez la table :

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

Vous pouvez également faire un ALTER TABLE via SQL brut si vous avez des données que vous souhaitez conserver et le change_column ne fonctionne pas :

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

Cela devrait fonctionner dans PostgreSQL (mais pas SQLite) tant que vous n'avez pas de données cassées dans votre trip_id .

Une fois que vous avez réglé cela, vous devez installer PostgreSQL et basculer votre environnement de développement vers celui-ci. Développer au-dessus de SQLite et déployer sur PostgreSQL (ou développer au-dessus d'une base de données et déployer au-dessus de n'importe quelle autre base de données d'ailleurs) est une mauvaise idée et vous causera toutes sortes de chagrin et de confusion.