PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PG ::Lỗi - tràn trường số trên Heroku

Bạn có một numeric trường có typmod numeric(8,2) và bạn đang cố gắng lưu trữ một giá trị lớn hơn 999999.99 trong đó. Xem hướng dẫn PostgreSQL về NUMERIC để biết thông tin về thang đo và độ chính xác số, là các giá trị định tính được hiển thị sau loại trong dấu ngoặc đơn.

Câu hỏi trước đây này dường như đề cập đến cùng một vấn đề với Rails, hiển thị mô hình Rails và cách chỉ định tỷ lệ và độ chính xác.

NUMERIC không phải là trường ngày / giờ, mà là trường số.

Bản trình diễn của vấn đề:

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.

Thật tiếc khi Pg không cho bạn biết đây là lĩnh vực gì. Tuy nhiên, rất khó để làm như vậy vì nó thường không biết giá trị nào sẽ đi vào trường nào khi nó phân tích các ký tự chuỗi. Bật log_statement = 'all' trong postgresql.conf , ALTER USER ... SET , ALTER DATABASE ... SET hoặc mỗi phiên với SET log_statement = 'all' sau đó kiểm tra lại và kiểm tra nhật ký truy vấn.

Ngoài ra, hãy xem các định nghĩa bảng với \dt trong psql để xem những gì có thể có kiểu numeric(8,2) và có thể gây ra sự cố.

Về lý do tại sao nó hoạt động cục bộ:DB có phải là PostgreSQL cục bộ không? Một số người dùng Rails dường như có một thiết lập rất kỳ lạ khi họ sử dụng SQLite cục bộ và PostgreSQL trên Heroku. Đây là một công thức cho sự hỗn loạn và các vấn đề triển khai. Sử dụng cùng một cơ sở dữ liệu trong quá trình phát triển và thử nghiệm. Nếu nó PostgreSQL cục bộ, có phải là phiên bản giống nhau không?




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tạo bảng trong hình ảnh docker PostgreSQL

  2. Nhiều trình tạo trình tự Hibernate cho một thực thể với PostgreSQL

  3. Làm cách nào để đọc dấu thời gian có giá trị múi giờ (timestamptz) từ PostgreSQL trong Rust?

  4. Tại sao chỉ một siêu người dùng mới có thể TẠO MỞ RỘNG hstore mà không phải trên Heroku?

  5. Cách Cosh () hoạt động trong PostgreSQL