Posted on: January 04, 2022 09:30 AM
Posted by: Renato
Categories: postgresql Laravel sql database dba
Views: 2853
Postgres’s NumericValueOutOfRange
Quando você encontra um erro parecido com este,
ActiveRecord::RangeError: PG::NumericValueOutOfRange:
ERROR: numeric field overflow
DETAIL: A field with precision 18, scale 6 must round to an absolute value less than 10^¹²
No banco de dados Postgres, uma das minhas tabelas tinha um campo definido como numérico (18,6). Definição do tipo de dado numérico de acordo com a docs: “até 131072 dígitos antes da vírgula decimal; até 16383 dígitos após a vírgula decimal ”.
https://www.postgresql.org/docs/9.6/static/datatype-numeric.html
Quando tentei inserir números inteiros de 18 dígitos, obtive o erro abaixo.
— SQL Error [22003]: ERROR: numeric field overflow Detail: A field with precision 18, scale 6 must round to an absolute value less than 10¹².
Escala de 6 anexada ao valor inteiro, o total foi de 24 dígitos. Daí o erro. A escala de 6 é parte de 18 dígitos.
123456789012345678 (18 digits integer number)
the scale of 6 to be appended.
123456789012345678.000000 (the digits 000000 besides dot(.) scales of 6)
Total de números 24,
Aqui, o valor da parte inteira deve ser inferior a 12 dígitos 123456789012 (12 dígitos).
Registro inserido com sucesso.
insert into my_table values (‘Test’, 1234567890.1234567);
Aqui eu tenho 7 dígitos após a vírgula decimal, a escala de 6 não é extensível, em vez disso, o valor do lado direito é arredondado para 6 e armazenado.
como ponto de otimização, precisamos aumentar o número de dígitos antes da vírgula decimal.
ALTER TABLE my_table ALTER COLUMN value NUMERIC(22,6)
Francium Tech é uma empresa de tecnologia a laser focada em fornecer software de escala de alta qualidade em velocidades extremas. Números e tamanho dos dados não nos assustam. Se você tiver algum requisito ou quiser uma verificação gratuita da saúde de seus sistemas ou arquitetura, fique à vontade para enviar um e-mail para [email protected], entraremos em contato com você!
Fonte: https://blog.francium.tech/postgress-numericvalueoutofrange-ad7bcb01f2f8
Donate to Site
Renato
Developer