Anda memiliki numeric
bidang dengan typmod numeric(8,2)
dan Anda mencoba menyimpan nilai yang lebih besar dari 999999.99
di dalamnya. Lihat manual PostgreSQL di NUMERIC
untuk informasi tentang skala numerik dan presisi, yang merupakan kualifikasi yang ditampilkan setelah jenis dalam tanda kurung.
Pertanyaan sebelumnya ini tampaknya membahas masalah yang sama dengan Rails, menunjukkan model Rails dan bagaimana skala dan presisi ditetapkan.
NUMERIC
bukan bidang tanggal/waktu, ini bidang angka.
Demo masalah:
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.
Sangat disayangkan bahwa Pg tidak memberi tahu Anda bidang apa ini ketika itu adalah bidang. Namun, sulit untuk melakukannya, karena biasanya tidak tahu nilai mana yang akan masuk ke bidang mana saat menguraikan string literal. Aktifkan log_statement = 'all'
di postgresql.conf
, ALTER USER ... SET
, ALTER DATABASE ... SET
, atau per sesi dengan SET log_statement = 'all'
lalu uji ulang dan periksa log kueri.
Lihat juga definisi tabel dengan \dt
di psql
untuk melihat apa yang mungkin memiliki tipe numeric(8,2)
dan dapat menyebabkan masalah.
Adapun mengapa ini bekerja secara lokal:Apakah DB PostgreSQL lokal? Beberapa pengguna Rails tampaknya memiliki pengaturan yang sangat aneh di mana mereka menggunakan SQLite secara lokal, dan PostgreSQL di Heroku. Ini adalah resep untuk kekacauan dan masalah penyebaran. Gunakan database yang sama dalam pengembangan dan pengujian. Jika adalah PostgreSQL secara lokal, apakah versinya sama?