2016-05-14 3 views
0

スキーマを複数の通貨に対応させる必要があります。したがって、通貨フィールドを使用することは選択肢ではありません。だから、通貨列を数値に変換しようとしています(12,2)。テーブルの通貨列をpostgresqlの数値列に変換する方法

ALTER TABLE lead ALTER COLUMN deal_size TYPE NUMERIC(12, 2); 
ALTER TABLE lead ALTER COLUMN deal_size TYPE NUMERIC(12, 2) using deal_size::money::numeric(12,2); 

Iは、次のエラーを取得するたび:

ERROR:数値フィールドオーバーフロー 詳細:私は以下のアプローチを試みた精度12を持つフィールドを、スケール2はより小さい絶対値に丸める必要があります10^10

私は、テーブルのこの列の値のどれもが以上$ 1,000,000個の

答えて

0

は私のPostgreSQLに次のようにテストしても完璧に動作しないことを確認しました。 PostgreSQLのどのバージョンを実行していますか?

create temp table lead (id serial not null primary key, deal_size money); 
insert into lead (deal_size) select (random()*100000000)::numeric(14,4) from generate_series(1,10000) a; 
ALTER TABLE lead ALTER COLUMN deal_size TYPE NUMERIC(12, 2); 

値が100万を超えていません。大きな負の値をテストしましたか?

+0

お返事ありがとうございます。それは私の愚かな間違いです。私は大きな負の値(テストの一部として挿入された)が2つあったことを認識しませんでした。 –

関連する問題