添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
刚毅的火车  ·  TypeScript ...·  2 年前    · 
幸福的领带  ·  XML ...·  3 年前    · 

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