SQLiteのinteger型とPostgreSQLのinteger型は違うんですね

railsアプリを開発していてherokuに移行した際、エラーが発生してしまった。
ローカルで動いていたのになぜ...

$ heroku logs

でログを確認してみると

ERROR:  operator does not exist: character varying = integer

と書かれている。
ググってみるとやはりデータ型に関するエラーのよう。
調べてみるとローカルで使用してるSQLiteとherokuで使用されているPostgreSQL

integer型のバイト数に違いがあるそうだ。

SQLite:    4バイト
PostgreSQL: 1、2、3、4、6、8バイト(データサイズに依存)


今回はデータバイト数や頭にゼロが来た場合への考慮からstring型に変更するよう対応した。

class ChangeUidInUsers < ActiveRecord::Migration
  def up
    change_column :users, :uid, :string
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end
end