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 数据类型的情况下很有用。

下表列出了所有的伪类型:

                 

 

原文地址:https://www.cnblogs.com/wangnengwu/p/12446501.html