PostgreSql 常见数据类型
1.CREATE TYPE命令增加新的数据类型 2.数据类型
3.数值类型
3. 整数类型 常用的类型是 integer ,因为它提供了在范围、存储空间、性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用 smallint 。而只有在 integer 的范围不够的时候才使用 bigint ,因为前者绝对快得多。 bigint 类型可能不是在所有平台上都运转正确,因为它依赖编译器对八字节整数的支持。在那些没有八字节整数支持的机器上,bigint 的作用和 integer 一样(但是仍然占据八字节存储)。不过,我们目前还没听说过有这样的平台。 SQL 只声明了整数类型 integer(或 int) 和 smallint 。类型 bigint 和类型别名 int2,int4,int8 都是扩展,并且也在许多其它 SQL 数据库系统中使用。 4.任意精度数值 术语:一个 numeric 类型的标度(scale)是小数部分的位数,精度(precision)是全部数据位的数目,也就是小数点两边的位数总和。因此数字 23.5141 的精度为 6 而标度为 4 。你可以认为整数的标度为零。 numeric 字段的最大精度和最大标度都是可以配置的。要声明一个字段的类型为 numeric ,你可以用下面的语法: NUMERIC(precision,scale) NUMERIC(precision) NUMERIC 如果一个要存储的数值的标度比字段声明的标度高,那么系统将尝试圆整(四舍五入)该数值到指定的小数位。然后,如果小数点左边的数据位数超过了声明的精度减去声明的标度,那么将抛出一个错误。 numeric 类型的数据值在物理上是不带任何前导或者后缀零的形式存储的。因此,字段上声明的精度和标度都是最大值,而不是固定分配的。在这个方面,numeric 类型更类似于 varchar(n) 而不是 char(n) 。实际存储是每四个十进制位两个字节,然后在整个数据上加上八个字节的额外开销。 除了普通的数字值之外,numeric 类型允许用特殊值 NaN 表示"不是一个数字"。任何在 NaN 上面的操作都生成另外一个 NaN 。如果在 SQL 命令里把这些值当作一个常量写,你必须在其周围放上单引号,比如 UPDATE table SET x = 'NaN' 。在输入时,字符串 NaN 是大小写无关的。 类型 decimal 和 numeric 是等效的。两种类型都是 SQL 标准。 5.浮点数类型 如果你想用这些类型做任何重要的复杂计算,尤其是那些你对范围情况(无穷/下溢)严重依赖的事情,那你应该仔细评诂你的实现。 拿两个浮点数值进行相等性比较可能像、也可能不像你想像那样运转。 在大多数平台上,real 类型的范围是至少 1E-37 到 1E+37 ,精度至少是 6 位小数。double precision 的范围通常是 1E-307 到 1E+308 ,精度是至少 15 位数字。太大或者太小的数值都会导致错误。如果输入数据的精度太高,那么将会发生园整。太接近零的数字,如果无法与零值的表现形式相区分就会产生下溢错误。 除了普通的数字值之外,浮点类型还有几个特殊值: Infinity 这些值分别表示 IEEE 754 特殊值"正无穷大"、"负无穷大"、"不是一个数字"。在不遵循 IEEE 754 浮点算术的机器上,这些值的含义可能不是预期的。如果在 SQL 命令里把这些数值当作常量写,你必须在它们周围放上单引号,像这样:UPDATE table SET x = 'Infinity' 。输入时,这些值是以大小写无关的方式识别的。 PostgreSQL 还支持 SQL 标准表示法 float 和 float(p) 用于声明非精确的数值类型。其中的 p 声明以二进制位表示的最低可接受精度。在选取 real 类型的时候,PostgreSQL 接受 float(1) 到 float(24),在选取 double precision 的时候,接受 float(25) 到 float(53) 。在允许范围之外的 p 值将导致一个错误。没有声明精度的 float 将被当作 double precision 。 【注意】PostgreSQL 7.4以前,在 float(p) 里面的精度会被当作是这么多位数的十进制位。到 7.4 已经被修改成与 SQL 标准匹配,标准声明这个精度是以二进制位度量的。假设 real 和 double precision 分别有 24 和 53 个二进制位的位数对 IEEE 标准的浮点实现来说是正确的。在非 IEEE 平台上,这个数值可能略有偏差,但是为了简化,我们在所有平台上都用了同样的 p 值范围。 6.序列号类型 CREATE TABLE tablename ( CREATE SEQUENCE tablename_colname_seq; 【注意】PostgreSQL 7.3以前,serial 隐含 UNIQUE 。但现在不再如此。如果你希望一个序列字段有一个唯一约束或者一个主键,那么你现在必须声明,就像其它数据类型一样。 要在 serial字段中插入序列中的下一个数值,主要是要注意 serial字段应该赋予缺省值。我们可以通过在 INSERT 语句中把该字段排除在字段列表之外来实现,也可以通过使用 DEFAULT 关键字来实现。 类型名 serial 和 serial4 是等效的:两者都创建 integer 字段。类型名 bigserial 和 serial8 也一样,只不过它创建一个 bigint 字段。如果你预计在表的生存期中使用的标识数目可能超过 231 个,那么你应该使用 bigserial 。 一个 serial 类型创建的序列在所属的字段被删除的时候自动删除。你可以只删除序列而不删除字段,不过这将删除该字段的缺省值表达式。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |