一,数值类型

1. 整数类型
类型smallint, integer和bigint存储的全部是数字的数,也就是没有小数部分。试图存储超出范围以外的数值将导致一个错误。常用的类型是integer, 因为它提供了在范围,存储空间和性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用smallint,而只有在integer的范围不够的时候才使用bigint,因为integer绝对快得多。
2. 任意精度数值
类型numberic可以存储最多1000位精度的数字并且准确的进行计算。因此非常适合用于货币金额和其他要求计算准确的数量。不过,numberic类型上的算数运算要比整数类型或者浮点类型慢得多。
numberic字段的最大精度和最大比例都是可以配置的。要声明一个类型为numberic的字段,可以用下面的语法:
NUMBERIC(precision, scale)
比如23.5141的精度为6, 而刻度为4
3. 浮点数类型
数据类型real和double是不准确的,牺牲精度的数字类型。不准确意味着一些数值不能准确地转换内部格式并且是以近似的形式存储的,因此存储后再把数据打印出来可能显示一些缺失。
4. Serial(序号)类型
即,序列。serial和bigserial类型不是真正的类型,只是为在表中设置唯一标识做的概念上的便利。
二,字符类型

SQL定义了两种基本的字符类型,varchar(n)和char(n),这里的n是一个正整数。两种类型都可以存储最多n个字符长的字串,试图存储更长的字符串到这些类型的字段会产生错误,除非超出长度字符串都是空白,这种情况下该字串将被截断为最大长度。
如果没有长度声明,char等于char(1),而varchar则可以接受任何长度的字符串。






三种类型之间没有性能差别,只不过是在使用chat类型时增加了存储尺寸。虽然在某些其他的数据库里,char(n)有一定的性能优势,但在postgresql里没有。大多数情况下,应该使用text或者varchar。
三,日期/时间类型:

1. 日期/时间输入:
任何日期或者时间的文本输入均需要由单引号包围,就像一个文本字符串一样。
(1). 日期:
以下为合法的日期格式列表:

(2). 时间:
以下为合法的时间格式列表:

(3). 时间戳
时间戳类型的有效输入由一个日期和时间的连接组成,后面跟着一个可选的时区。因此,1999-01-08 04:05:06和1999-01-08 04:05:06 -8:00都是有效的数值。
2. 实例:


四,布尔类型
PostgreSQL支持标准的SQL boolean数据类型。boolean只能有两个状态:真(true)或假(false)。该类型占用1个字节。
"真"值的有效文本值是:TRUE,'t','true','y','yes','1'
"假"值的有效文本值是:FALSE,'f','false','n','no','0'
(大小写均可)


五,位串类型
位串就是一串1和0的字串。它们可以存储和视觉化位掩码。有两种类型的SQL位类型:bit(n)和bit varying(n),这里的n是一个正整数。bit类型的数据必须准确匹配长度n;试图存储短些或者长一些的数据都是错误的。
类型bit varying数据是最长为n的变长类型,更长的串会被拒绝。写一个没有长度的bit等效于bit(1),没有长度的bit varying相当于没有长度限制。
针对该类型,最后需要提醒的是,如果我们明确地把一个位串值转换成bit(n),那么它的右边将被截断或者在右边补齐0,直到刚好n位,而不会抛出任何错误。
类似地,如果我们明确把一个位串数值转换成bit varying(n),如果它超过n位,那么它的右边将被截断。




六,数组类型
PostgreSQL支持表的字段使用定长或可变长度的一维或多维数组,数组的类型可以是任何数据库内建的类型、用户自定义的类型、枚举类型,以及组合类型。但目前还不支持区域类型(domain)。

1. 插入数组类型数据

2. 二维数组可以查看和修改某一维度的单元素的值,无法查看某一维数组的值

3. 更新数组中的某一元素

更新数组某一范围的元素

也可以直接扩大数组的范围

如果该字段为二维数组,则无法直接修改某一维数组的值

4. 以数组为条件检索数据

更简便的方法检索数据


5. 数组类型的比较





七,复合类型
PostgreSQL中复合类型有些类似于C语言的结构体,也可以被视为Oracle的记录类型。它实际上只是一个字段名和它们的数据类型的列表。PostgreSQL允许像简单数据类型那样使用复合类型。比如表字段可以声明一个复合类型。
1. 声明复合类型
和声明一个数据表相比,声明类型时需要加AS关键字,同时在声明TYPE时不能定义任何约束。

在表中指定复合类型的字段。在创建表的时候,PostgreSQL也会自动创建一个与该表对应的复合类型,名字与表字相同,即表示该表的复合类型。

2. 复合类型值输入
插入错误类型的数据到复合类型字段会报错

输入正确类型的数据

3. 访问复合类型
访问复合类型中的字段和访问数据表中的字段在形式上极为相似,只是为了对二者加以区分,PostgreSQL设定在访问复合类型中的字段时,类型部分需要用圆括号括起,以避免混淆

如果在查询中也需要用到表名,那么表名和类型名都需要被圆括号括起

可以在插入中,直接插入复合类型中字段

4. 修改复合类型
在更新操作中,也是可以通过ROW表达式来完成
注:在更新复合类型中的一个字段时,我们不能在SET后面出现的字段名周围加圆括号,但是在等号右边的表达式里引用同一个字段时却需要圆括号

本文参考:https://www.cnblogs.com/orangeform/archive/2012/04/30/2293602.html
网友评论