PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O tipo de dados NUMERIC do Postgres pode armazenar valores assinados?


Você certamente pode usar o tipo de precisão arbitrária numeric com precisão de 5 e escala de 1, assim como @Simon comentou, mas sem o erro de sintaxe. Use uma vírgula(, ) em vez do ponto (. ) no modificador de tipo:
SELECT numeric(5,1) '-999.9' AS nr_lower
     , numeric(5,1) '9999.9' AS nr_upper;

 nr_lower | nr_upper
----------+----------
   -999.9 |   9999.9

O sinal de menos e o ponto na string literal não contam para o máximo permitido de dígitos significativos (precision ).
Se você não precisa restringir o comprimento, basta usar numeric .
Se você precisar impor mínimo e máximo, adicione uma restrição de verificação:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)

numeric armazena seu número exatamente . Se você não precisa da precisão absoluta e pequenos erros de arredondamento não são problema, você também pode usar um dos tipos de ponto flutuante double precision (float8 ) ou real (float4 ).

Ou, como você só permite um único dígito decimal fracionário, pode multiplicar por 10 e usar integer , que seria o armazenamento mais eficiente:4 bytes, sem erros de arredondamento e processamento mais rápido. Basta usar e documentar o número corretamente.

Detalhes para tipos numéricos no manual.