sql >> データベース >  >> RDS >> PostgreSQL

PG::Error-Herokuでの数値フィールドのオーバーフロー

    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 ... SETALTER DATABASE ... SET 、またはSET log_statement = 'all'を使用したセッションごと 次に、クエリログを再テストして調べます。

    \dtのテーブル定義も確認してください psqlで タイプがnumeric(8,2)である可能性があるものを確認する 問題を引き起こしている可能性があります。

    ローカルで動作する理由:ローカルDB PostgreSQLですか?一部のRailsユーザーは、SQLiteをローカルで使用し、PostgreSQLをHerokuで使用するという非常に奇妙な設定をしているようです。これは、混乱と展開の問題のレシピです。開発とテストで同じデータベースを使用します。 の場合 ローカルのPostgreSQL、同じバージョンですか?




    1. mysqlサーバーで永続的なデフォルトのタイムゾーンを設定する方法

    2. 検証でキャッチする必要があるRails4.2.0での単純な整数割り当てのRangeError

    3. postgresqlで月ごとのリスト日データを取得する方法

    4. 上級ユーザー向けのSQLServer2016での全文検索の実装