Postgresql数据类型
1 数值类型
数值类型由 2 字节、4 字节或 8 字节的整数以及 4 字节或 8 字节的浮点数和可选精度的十进制数组成
2 货币类型
money 类型存储带有固定小数精度的货币金额。
3字符类型
4日期和时间类型
5布尔类型
PostgreSQL 支持标准的 boolean 数据类型。
boolean 有"true"(真)或"false"(假)两个状态, 第三种"unknown"(未知)状态,用 NULL 表示。
6枚举类型
枚举类型是一个包含静态和值的有序集合的数据类型。
PostgtesSQL中的枚举类型类似于 C 语言中的 enum 类型。
与其他类型不同的是枚举类型需要使用 CREATE TYPE 命令创建
create table person ( name text , current_mood mood);
insert into person VALUES ('Moe','happy');
SELECT * FROM person WHERE current_mood = 'happy';
7集合类型
几何数据类型表示二维的平面物体。
下表列出了 PostgreSQL 支持的几何类型。
最基本的类型:点。它是其它类型的基础。
8JSON类型
json 数据类型可以用来存储 JSON(JavaScript Object Notation)数据, 这样的数据也可以存储为 text,但是 json 数据类型更有利于检查每个存储的数值是可用的 JSON 值。
此外还有相关的函数来处理 json 数据
9数组类型
PostgreSQL 允许将字段定义成变长的多维数组。
数组类型可以是任何基本类型或用户定义类型,枚举类型或复合类型。
声明数组:
创建表的时候,我们可以声明数组,方式如下
CREATE TABLE sal_emp (
name text,
pay_by_quarter integer[],
schedule text[][],
);
INSERT INTO sal_emp
VALUES ( 'BILL', ' {10000,10000,10000,10000}', '{{"MEETING" ,"LUNCH"},{"TRAINNING","PRESENTATION"}}');
INSERT INTO sal_emp
VALUES ('Carol', '{20000,25000,25000,25000}' '{{"breakfast","consulting"},{"meeting","lunch"}}');
SELECT name FROM sal_emp WHERE pay_by_quarter[1] <>pay_by_quarter[2];
修改数组:
UPDATE sal_emp SET pay_by_quarter = ['25000,25000,27000,27000'] WHERE name = 'Carol';
或者使用array构造器语法
UPDATE sal_emp SET pay_by_quarter = ARRAY[25000,25000,27000,27000] WHERE name = 'Carol';
数组组检索:
SELECT * FROM sal_emp WHERE pay_by_quarter [1] = 10000 OR
pay_by_quarter [2] = 10000 OR
pay_by_quarter [3] = 10000 OR
pay_by_quarter [4] = 10000;
SELECT * FROM sal_emp WHERE 10000 = ALL (pay_by_quarter);
10复合类型
复合类型表示一行或者一条记录的结构; 它实际上只是一个字段名和它们的数据类型的列表。PostgreSQL 允许像简单数据类型那样使用复合类型。比如,一个表的某个字段可以声明为一个复合类型。
CREATE TYPE inventory_item AS(
name text,
supplier_id integer,
price numeric
);
语法类似于 CREATE TABLE,只是这里只可以声明字段名字和类型。定义了类型,我们就可以用它创建表:
CREATE TABLE on_hand (
item inventory_item,
count integer
);
INSERT INTO on_hand VALUES (ROW ('FUZZY DICE',42,1.99),1000);
SELECT item.name FROM on_hand WHERE item.price > 9.99;
这样将不能工作,因为根据 SQL 语法,item是从一个表名字选取的, 而不是一个字段名字。你必须像下面这样写:
SELECT (item).name FROM on_hand WHERE (item).price > 9.99;
11对象标识符类型
PostgreSQL 在内部使用对象标识符(OID)作为各种系统表的主键。
同时,系统不会给用户创建的表增加一个 OID 系统字段(除非在建表时声明了WITH OIDS 或者配置参数default_with_oids设置为开启)。oid 类型代表一个对象标识符。除此以外 oid 还有几个别名:regproc, regprocedure, regoper, regoperator, regclass, regtype, regconfig, 和regdictionary。
12伪类型
PostgreSQL类型系统包含一系列特殊用途的条目, 它们按照类别来说叫做伪类型。伪类型不能作为字段的数据类型, 但是它可以用于声明一个函数的参数或者结果类型。 伪类型在一个函数不只是简单地接受并返回某种SQL 数据类型的情况下很有用。
下表列出了所有的伪类型: