numericがあります typmodのフィールドnumeric(8,2) 999999.99より大きい値を保存しようとしています 初期化。 NUMERIC
括弧内のタイプの後に表示される修飾子である数値スケールと精度については、こちらをご覧ください。
この以前の質問 Railsで同じ問題をカバーしているようで、Railsモデルと、スケールと精度がどのように割り当てられているかを示しています。
NUMERIC 日付/時刻フィールドではなく、数値フィールドです。
問題のデモ:
regress=> SELECT NUMERIC(8,2) '999999.99';
numeric
-----------
999999.99
(1 row)
regress=> SELECT NUMERIC(8,2) '1000000.00';
ERROR: numeric field overflow
DETAIL: A field with precision 8, scale 2 must round to an absolute value less than 10^6.
Pgがフィールドであるときに、これがどのフィールドであるかを教えてくれないのは残念です。ただし、文字列リテラルを解析するときに、通常、どの値がどのフィールドに入力されるかがわからないため、これを行うのは困難です。 log_statement = 'all'を有効にします postgresql.conf内 、ALTER USER ... SET 、ALTER DATABASE ... SET 、またはSET log_statement = 'all'を使用したセッションごと 次に、クエリログを再テストして調べます。
\dtのテーブル定義も確認してください psqlで タイプがnumeric(8,2)である可能性があるものを確認する 問題を引き起こしている可能性があります。
ローカルで動作する理由:ローカルDB PostgreSQLですか?一部のRailsユーザーは、SQLiteをローカルで使用し、PostgreSQLをHerokuで使用するという非常に奇妙な設定をしているようです。これは、混乱と展開の問題のレシピです。開発とテストで同じデータベースを使用します。 の場合 ローカルのPostgreSQL、同じバージョンですか?