如何在Postgresql中将数据类型decimal分配给列?

6

我最近在使用postgresql-9.1。

由于某些原因,我必须使用一种不支持数据类型numeric而是支持decimal的技术。不幸的是,我在Postgresql中将列分配为decimal数据类型时,其数据类型始终为numeric。我尝试更改数据类型,但即使我收到了“查询返回成功,12毫秒内无结果”的消息,它也没有起作用。

因此,我想知道如何将这些列设置为decimal数据类型。

非常感谢任何帮助。

例如:

我的创建语句:

CREATE TABLE IF NOT EXISTS htest
(
  dsizemin decimal(8,3) NOT NULL,
  dsizemax decimal(8,3) NOT NULL,
  hidentifier character varying(10) NOT NULL,
  tgrade character varying(10) NOT NULL,
  fdvalue decimal(8,3),
  CONSTRAINT htest_pkey PRIMARY KEY (dsizemin , dsizemax , hidentifier , tgrade )
);

我的更改条款:

ALTER TABLE htest
ALTER COLUMN dsizemin TYPE decimal(8,3);

但是它没有起作用。


3
“decimal”和“numeric”类型是等效的。这个工具的问题在于它请求表的模式,并且当您创建一个“decimal”列时,它无法理解返回的“numeric”类型。 - mu is too short
3
decimal 只是 numeric 的别名,用于让针对 Oracle 编写的程序更加兼容。似乎不能使用 DOMAIN 将其变成“真正”的别名,因此,除非你可以让程序在表元数据显示期望的 decimal 而不是 numeric,否则你可能没有办法解决问题。尝试运行 SELECT '1'::decimal; 以了解我的意思。 - Craig Ringer
回复 @muistooshort:是啊,这个工具不理解数字,太遗憾了。 - user1918908
给@Craig Ringer:它只显示数字。也许我得试试另一种方式。谢谢你们两个。 - user1918908
这是一种内部工具吗?如果不是,那么它是什么工具?你能修复它或手动配置它吗?还是它非常友好和有帮助,以至于你不能让它表现得明智? - mu is too short
给 @muistooshort :嗨,这是一个关于数据库中数据的语义Web API。看起来我在从MySQL迁移到Postgresql的数据映射方面搞砸了。现在我已经修复了它,一切都正常了。毕竟还是要谢谢你。 - user1918908
2个回答

7
在PostgreSQL中,“decimal”是“numeric”的别名,这会导致应用程序认为它期望从数据库中返回一个名为“decimal”的类型时出现一些问题。正如Craig在上面指出的那样,您甚至无法创建一个名为“decimal”的域。
在数据库端没有好的解决方法。唯一能做的就是改变应用程序以期望返回数字数据类型。

3
使用 Numeric (precision, scale) 存储小数 precision 表示小数点两侧的期望数字总数。scale 是您希望存储的小数位数。
Numeric (5,5) 意味着您只想要小于1(负数或正数)且有5个小数位的数字。调试时,如果 postgre sql 错误地认为前导 0 是小数,则可能是 Numeric (6,5)。
例如,0.12345 就是上述情况的一个例子。
1.12345 需要一个 Numeric (6,5) 字段 100.12345 需要一个 Numeric (8,5) 字段 -100.12345 需要一个 Numeric (8,5) 字段
当您编写 select 语句以查看小数时,它会四舍五入到2位;但是如果您执行像 Select 100 * [field] from [table] 这样的操作,则应该开始出现额外的小数位....

(6,5)等的解释非常有帮助! - CodeSlave

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接