我很难理解PostgreSQL中float(p)
的精度参数p。例如,float(1)
和float(24)
在我看来是完全一样的。
手册里有:
然而,这里的关键是它指定了最小可接受的精度。PostgreSQL使用此选项来选择符合要求的底层数据类型(PostgreSQL还支持sql标准符号float和float(p)用于指定不精确的数字类型。这里,p表示最小值可接受的二进制精度。PostgreSQL接受float(1)到Float(24)选择实数类型,Float(25)选择Float (53)选择双精度。超出允许范围的p值绘制an错误。未指定精度的Float表示双精度精度。
float4
或float8
)。
regress=> x
Expanded display is on.
regress=> SELECT
'1.123456789123456789'::float,
'1.123456789123456789'::double precision,
'1.123456789123456789'::float(1),
'1.123456789123456789'::float(2),
'1.123456789123456789'::float(24),
'1.123456789123456789'::float(48);
-[ RECORD 1 ]------------
float8 | 1.12345678912346
float8 | 1.12345678912346
float4 | 1.12346
float4 | 1.12346
float4 | 1.12346
float8 | 1.12345678912346
您可以使用pg_typeof
来确认类型选择。
实际上,它只是在那里支持标准语法,并被翻译成PostgreSQL的方言-通过选择适当的类型-在使用它的地方