4

過去 7 日間のデータを Google アナリティクスに照会するアプリを作成しました。すべてがローカルで機能します。Heroku では、今日の日付のデータを取得しようとするまで、プロセスはスムーズに実行されます。次に、次のエラーが表示されます。

2012-10-29T02:32:02+00:00 app[web.1]: ActiveRecord::StatementInvalid (PG::Error: ERROR:   numeric field overflow
2012-10-29T02:32:02+00:00 app[web.1]: DETAIL:  A field with precision 8, scale 2 must round to an absolute value less than 10^6.

満足していない変数を見つけようとしましたが、今はわかりません。日付または時刻に関連するものだと思います。

どんな考えやアイデアも素晴らしいでしょう:)

- アップデート - -

ActiveRecord::Schema.define(:version => 20121014153338) do
  create_table "analytics", :force => true do |t|
    t.string   "site"
    t.integer  "visits"
    t.date     "start_date"
    t.date     "end_date"
    t.decimal  "revenue_per_transaction", :precision => 8, :scale => 2
    t.integer  "transactions"
    t.decimal  "item_quantity",           :precision => 8, :scale => 2
    t.integer  "goal_starts"
    t.integer  "goal_completes"
    t.decimal  "goal_conversion",         :precision => 8, :scale => 2
    t.datetime "created_at",                                            :null => false
    t.datetime "updated_at",                                            :null => false
    t.decimal  "goal_abandon",            :precision => 8, :scale => 2
    t.decimal  "revenue",                 :precision => 8, :scale => 2
    t.string   "source"
  end

end
4

1 に答える 1

5

numerictypmodを持つフィールドがあり、numeric(8,2)それよりも大きな値を格納しようとして999999.99います。括弧内の型の後に示される修飾子である数値スケールと精度については、PostgreSQL のマニュアルを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.confALTER USER ... SETALTER DATABASE ... SETSET log_statement = 'all'

\dtまた、 inを使用してテーブル定義を調べpsqlて、その型numeric(8,2)を持っている可能性があり、問題を引き起こしている可能性があるものを確認します。

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

于 2012-10-29T02:42:34.347 に答える