3

文字列フィールドとテキストフィールドに関連する2つのSO質問を見つけた後、リンクフィールドがすでにテキストであることがわかりました。

create_table "answers", :force => true do |t|
  t.string   "text"
  t.text     "link"

Postgresが次のエラーをスローするのはなぜですか?

ActiveRecord::StatementInvalid: PG::Error: ERROR:  value too long for type character varying(255)

移行を試みましたchange_column :answers, :link, :text, :limit => nilが、何も起こらないと思います。

編集:したがって、問題は、スキーマがフィールドがテキストであると言っているが、実際には文字列であるということです。

Answer.new.column_for_attribute('link').type
=> :string

それを修正するための最良の方法は何ですか?スキーマからデータベースを再構築することによって?文字列に変更してからテキストに戻すことで?

Rails 3.2.2、Postgres 9、Heroku。

4

2 に答える 2

1

それがどのように起こったかはよくわかりませんが、次のいずれかです。

  1. 移行の実行後にスキーマを確認したので、実際には同期していました。
  2. タイプを文字列に変更するために移行を実行し、スキーマを同期させました。
于 2012-09-05T15:32:49.830 に答える
0

Postgresに送信された生のSQLステートメントを使用して移行を記述します。executepsqlコンソールで直接実行するものを使用して呼び出すだけです。これは、DBがどのような状態になるかを正確に知るための最良の方法です。多くの場合、これはRailsにスキーマを定義させるよりも優れたソリューションです。特に移行を実行した後は、スキーマを定期的に確認する必要があります。

于 2012-09-05T15:14:24.190 に答える