Sie können natürlich den Typ numeric mit beliebiger Genauigkeit verwenden mit einer Genauigkeit von 5 und einer Skalierung von 1, genau wie @Simon kommentiert, aber ohne den Syntaxfehler. Verwenden Sie ein Komma (, ) anstelle des Punktes (. ) im Typmodifikator:
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
Das Minuszeichen und der Punkt im String-Literal werden nicht auf die zulässige Höchstzahl signifikanter Stellen angerechnet (precision ).
Wenn Sie die Länge nicht einschränken müssen, verwenden Sie einfach numeric .
Wenn Sie Minimum und Maximum erzwingen müssen, fügen Sie eine Check-Einschränkung hinzu:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric speichert Ihre Nummer genau . Wenn Sie die absolute Genauigkeit nicht benötigen und kleine Rundungsfehler kein Problem darstellen, können Sie auch einen der Fließkommatypen double precision verwenden (float8 ) oder real (float4 ).
Da Sie nur eine einzelne Nachkommastelle zulassen, können Sie auch mit 10 multiplizieren und integer verwenden , was die effizienteste Speicherung wäre:4 Bytes, keine Rundungsfehler und schnellste Verarbeitung. Verwenden und dokumentieren Sie einfach die Nummer ordnungsgemäß.
Details zu numerischen Typen im Handbuch.