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、同じバージョンですか?