我正在将sqlserver数据库转换为PostgreSQL,并且在SQL Server中看到一些列声明为Float。我只想在PostgreSQL中声明该列为float,但是我想知道这种转换是否足够好。在PostgreSQL中声明FLOAT(20)更好吗?还是仅FLOAT就足够了?
答案 0 :(得分:1)
两个DBMS都将不带精度参数的FLOAT解释为FLOAT(53)
(全精度双精度浮点数)。精度值等于或小于24可能会将内部表示形式更改为单精度浮点数,考虑到您拥有FLOAT(20)
,这似乎是您的情况。
在Postgres和MS SQL中,数据库在内部仅使用类型为REAL
(32位)或DOUBLE PRECISION
(64位)的列。 precision参数仅确保浮点数的尾数具有特定的最大精度(较长的尾数会被截断)。
FLOAT(20)
在两个DBMS上都是等效的,而FLOAT
将为您提供额外的33位精度,您可能需要也可能不需要。 FLOAT
/ REAL
/ DOUBLE PRECISION
列在SQL中很少见,很难,大多数人会改用NUMERIC,而Postgres文档实际上指出了这一点。不过,考虑到这是一次迁移,您可能要对此保持保守。
https://www.postgresql.org/docs/current/datatype-numeric.html#DATATYPE-FLOAT