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.