sql >> データベース >  >> RDS >> PostgreSQL

レール3.1。 Heroku PGError:演算子が存在しません:文字の変化=整数

    あなたの問題はここにあります:

    WHERE "reviews"."trip_id" = 32
    

    エラーメッセージには次のように表示されます:

    これで、trip_idが作成されました。 reviewsの列 整数ではなく文字列として。 SQLiteの型システムはかなり緩いので、これはSQLiteで正常に機能しますが、PostgreSQLはかなり厳密であるため、PostgreSQLでは機能しません。

    移行を追加して、trip_idのタイプを修正してみてください。 :

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

    それでも問題が解決しない場合は、テーブルを削除して再作成します。

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

    保存したいデータとchange_columnがある場合は、生のSQLを介してALTERTABLEを実行することもできます。 動作しません:

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

    trip_idに壊れたデータがない限り、これはPostgreSQL(SQLiteではない)で機能するはずです。 。

    それを整理したら、PostgreSQLをインストールし、開発環境をそれに切り替える必要があります。 SQLite上で開発してPostgreSQLにデプロイする(または1つのデータベース上で開発し、他のデータベースの上にデプロイする)ことは悪い考えであり、あらゆる種類の悲しみと混乱を引き起こします。



    1. mysql INSERT ... ON DUPLICATEKEYUPDATEがマスター/マスター構成でRBRレプリケーションを中断できる理由

    2. バックアップ履歴を使用したSQLServerデータベースサイズの増加

    3. 時間に基づいて2つのテーブルをマージします

    4. MySQLで一般的なエラーをトラブルシューティングするための便利なヒント