sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Puede el tipo de datos de Postgres NUMERIC almacenar valores firmados?

Ciertamente puede usar el tipo de precisión arbitraria numeric con una precisión de 5 y una escala de 1, tal como comentó @Simon, pero sin el error de sintaxis. Use una coma (, ) en lugar del punto (. ) en el 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

El signo menos y el punto en el literal de cadena no cuentan contra el máximo permitido de dígitos significativos (precision ).
Si no necesita restringir la longitud, simplemente use numeric .
Si necesita aplicar un mínimo y un máximo, agregue una restricción de verificación:

CHECK (nr_column BETWEEN -999.9 AND 9999.9)

numeric almacena su número exactamente . Si no necesita la precisión absoluta y los pequeños errores de redondeo no son un problema, también puede usar uno de los tipos de punto flotante double precision (float8 ) o real (float4 ).

O, dado que solo permite un solo dígito decimal fraccionario, puede multiplicar por 10 y usar integer , que sería el almacenamiento más eficiente:4 bytes, sin errores de redondeo y procesamiento más rápido. Simplemente use y documente el número correctamente.

Detalles para tipos numéricos en el manual.