読者です 読者をやめる 読者になる 読者になる

めも帖

「めも帖」代わりにダラダラと書いていったり、めもしたりしているだけです。

Heroku で PostgreSQL のエラーが発生(PG::UndefinedFunction: ERROR: )

Ruby on Rails

Heroku を使っていると、ローカル環境では動いていたのに、Herokuだと動かない!ということが起きたりします。Heroku にステージング環境を用意していると、いいんですけれど、ローカルはSQLite で開発なんかしていると、気づかないでエラー発生ということになります(というか、しました)。 Heroku は、基本的にはPostgreSQL を利用しています(なので、ローカル環境もそうしろよ!というご指摘はごもっともです)。で、今回起こしてしまったのは、

PG::UndefinedFunction: ERROR:  operator does not exist: character varying = integer

エラー見た直後は、「は?」と思いました。調べたら、integer だと思っていたら、stringで作ってしまっていたカラムがありました。そこで、PostgreSQL から、「型が違うよ」と指摘されていました。

カラムの型を変更

ということで、変更しようと下記のようなコードを書いたらエラー 調べると、PostgreSQL では変更は違う方法が必要らしい...

class ChangeFoo < ActiveRecord::Migration
  def self.up
          change_column :table_name, :column_name, :integer
  end

  def self.down
          change_column :table_name, :column_name, :string
  end
end

PostgreSQL で string を integer に変換

class ChangeFoo < ActiveRecord::Migration
  def self.up
          change_column :table_name, :column_name, :'integer USING CAST(column_name AS integer)'
  end

  def self.down
          change_column :table_name, :column_name, :string
  end
end

というわけでした

参考