2.PostgreSQL数据类型一览表

1.整数类型

数据类型smallserialserialbigserial并不是真正的类型,类似于其它一些数据库支持的AUTO_INCREMENT属性。

类型存储描述范围
smallint2 字节有符号小范围整数-32768 ~ +32767
integer4 字节有符号整数-2147483648 ~ +2147483647
bigint8 字节有符号大范围整数-9223372036854775808 ~ +9223372036854775807
smallserial2 字节无符号小自增整数1 ~ 32767
serial4 字节无符号自增整数1 ~ 2147483647
bigserial8 字节无符号大自增整数1 ~ 9223372036854775807

2.任意精度数字(精确值)

数字 28.5181 的精度(precision)为 6,小数位数(scale)为 4。整数可以被认为是小数位数为零。

类型存储精度
numeric [ (precision,
scale
) ]
可变的小数点前最多 131072 十进制位,小数点后最多 16383 十进制位。
decimal [ (precision,
scale
) ]
可变的小数点前最多 131072 十进制位,小数点后最多 16383 十进制位。

除了普通的数值,任意精度数字(精确值)还有几个特殊的值:

类型范围
Infinity正无穷大
-Infinity负无穷大
NaN非数字

3.浮点类型(近似值)

浮点类型遵循IEEE 754二进制浮点算术标准

类型存储精度
real4 字节6 位十进制数字精度
double precision8 字节15 位十进制数字精度

除了普通的数值,浮点类型(近似值)还有几个特殊的值:

类型范围
Infinity正无穷大
-Infinity负无穷大
NaN非数字

4.货币类型

money类型的小数位数(scale)是固定的,小数位数是由数据库的 lc_monetary 配置项决定的。

类型存储描述范围
money8 字节货币金额-92233720368547758.08 ~ +92233720368547758.07

5.布尔类型

类型存储
boolean1 字节true 或 flase

6.位字符串类型

位字符串是由1和0组成的字符串。它们可以用来存储或可视化位掩码。n是一个代表长度的正整数。

类型描述长度n
bit [ (n) ]固定长度位字符串必须精确匹配固定长度n
bit varying [ (n) ]可变长度位字符串最大长度不超过n
//示例
CREATE TABLE test (a BIT(3), b BIT VARYING(5));
INSERT INTO test VALUES (B'101', B'00');
INSERT INTO test VALUES (B'10', B'101');

ERROR:  bit string length 2 does not match type bit(3)

INSERT INTO test VALUES (B'10'::bit(3), B'101');
SELECT * FROM test;

  a  |  b
-----+-----
 101 | 00
 100 | 101

7.日期/时间类型

类型存储描述低值高值解析度
timestamp [ (p) ] [ without time zone ]8 字节日期和时间(无时区)公元前 4713 年公元 294276 年1 微秒
timestamp [ (p) ] with time zone8 字节日期和时间(带时区)公元前 4713 年公元 294276 年1 微秒
date4字节日期(无时间)公元前 4713 年公元 5874897 年1天
time [ (p) ] [ without time zone ]8 字节时间(无日期无时区)00:00:0024:00:001 微秒
time [ (p) ] with time zone12 字节时间(无日期带时区)00:00:00+155924:00:00-15591 微秒
interval [ fields ] [ (p) ]16 字节时间间隔-1.78亿年1.78亿年1 微秒

8.字符(character)字符串类型

类型描述
character(n),char(n)固定长度字符字符串,达不到n空白填充
character varying(n)varchar(n)可变长度字符字符串,不可超过n
text可变无限长度字符串

9.二进制(binary)字符串类型

bytea是字节数组(byte array)的缩写。

类型存储描述
bytea1 或 4 个字节加上实际的二进制字符串可变长度二进制字符串(字节数组)

10.几何(geometric)类型

几何数据类型表示二维空间的几何类型。

类型存储描述表示
point16 字节(x, y)
line32 字节无限大直线{A,B,C}
lseg32 字节有限大线段((x1,y1),(x2,y2))
box32 字节长方形盒子((x1,y1),(x2,y2))
path16+16n 字节封闭路径(类似polygon)((x1,y1),…)
path16+16n 字节打开路径[(x1,y1),…]
polygon40+16n 字节多边形(类似封闭路径)((x1,y1),…)
circle24 字节<(x,y),r>(中心点和半径)

11.网络地址类型

类型存储描述
cidr7 或 19 字节IPv4 和 IPv6 网络地址
inet7 或 19 字节IPv4 和 IPv6 主机和网络地址
macaddr6 字节MAC地址
macaddr88 字节MAC 地址(EUI-64 格式)

12.枚举(enum)类型

枚举类型是由一组静态、有序的值组成的数据类型。

枚举名称是区分大小的。

枚举类型中的值是有顺序的,值的顺序是由创建枚举类型时值的排序所决定的。

//创建枚举类型
CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
//使用枚举类型
CREATE TABLE person (
    name text,
    current_mood mood
);
INSERT INTO person VALUES ('Moe', 'happy');
SELECT * FROM person WHERE current_mood = 'happy';
 name | current_mood
------+--------------
 Moe  | happy
(1 row)

13.数组(array)类型

PostgreSQL允许将表的列定义为可变长多维数组。可以创建任何内置或用户定义的基类型、枚举类型、组合类型、范围类型或域的数组。

CREATE TABLE sal_emp (
    name            text,
    pay_by_quarter  integer[],
    schedule        text[][]
);

14.复合(composite)类型

复合类型表示行或记录的结构,它本质上只是字段名及其数据类型的列表。PostgreSQL允许以许多与简单类型相同的方式使用复合类型。例如,表的列可以声明为组合类型。

//创建复合类型
CREATE TYPE complex AS (
    r       double precision,
    i       double precision
);

CREATE TYPE inventory_item AS (
    name            text,
    supplier_id     integer,
    price           numeric
);
//使用复合类型
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;

15.范围(range)类型

15.1范围类型

范围(range)类型表示某些类型的值的范围,多范围(multirange)类型是一个非连续、非空(empty)、非空(null)范围的有序列表。

范围类型对应类型
int4range, int4multirangeinteger
int8range, int8multirangebigint
numrange, nummultirangenumeric
tsrange, tsmultirangetimestamp without time zone
tstzrange, tstzmultirangetimestamp with time zone
daterange, datemultirangedate

15.2范围边界(bound)

每个非空(empty)范围都有两个边界,下界(lower bound)和上界(upper bound)。

范围如果包含边界的值,用“[”和“]”表示,如果不包含边界的值,用“(”和“)”表示。

简述示例
正无穷[3,)
负无穷(,3]
正负无穷(,)
//示例
CREATE TABLE reservation (room int, during tsrange);
INSERT INTO reservation VALUES
    (1108, '[2010-01-01 14:30, 2010-01-01 15:30)');

-- Containment
SELECT int4range(10, 20) @> 3;

-- Overlaps
SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0);

-- Extract the upper bound
SELECT upper(int8range(15, 25));

-- Compute the intersection
SELECT int4range(10, 20) * int4range(15, 25);

-- Is the range empty?
SELECT isempty(numrange(1, 5));

16.域(domain)类型

域是一种基于另一种基础类型的用户自定义数据类型。

可选地,它可以具有约束,将其有效值限制为基础类型所允许的子集。否则,它的行为就像基础类型一样——例如,任何可以应用于基础类型的操作符或函数都可以在域类型上工作。

基础类型可以是任何内置或用户定义的基类型、枚举类型、数组类型、复合类型、范围类型或其它域。

//创建域类型
CREATE DOMAIN posint AS integer CHECK (VALUE > 0);
//使用域类型
CREATE TABLE mytable (id posint);
//正常
INSERT INTO mytable VALUES(1);
//错误
INSERT INTO mytable VALUES(-1);

17.其它数据类型

类型描述
json文本 JSON 数据
jsonb二进制 JSON 数据,分解
xmlXML 数据
pg_lsnPostgreSQL日志序列号
pg_snapshot用户级事务 ID 快照
tsquery文本搜索查询
tsvector文本搜索文档
uuid通用唯一标识符
oid对象标识符

18.自定义类型

我们可以通过CREATE TYPE命令创建自定义数据类型。

19.伪(pseudo)类型

伪类型不能用作列数据类型,但可以用于声明函数的形参类型或返回类型。

类型描述
any表示函数接受任何输入数据类型。
anyelement表示函数接受任何数据类型。
anyarray表示函数接受任何数组数据类型。
anynonarray表示函数接受任何非数组数据类型。
anyenum表示函数接受任何枚举数据类型。
anyrange表示函数接受任何范围数据类型。
anymultirange表示函数接受任何多范围数据类型。
anycompatible表示函数接受任何数据类型,并自动将多个参数提升为公共数据类型。
anycompatiblearray表示函数接受任何数组数据类型,并自动将多个参数提升为公共数据类型。
anycompatiblenonarray表示函数接受任何非数组数据类型,并自动将多个参数提升为公共数据类型。
anycompatiblerange表示函数接受任何范围数据类型,并自动将多个参数提升为公共数据类型。
anycompatiblemultirange表示函数接受任何多范围数据类型,并自动将多个参数提升为公共数据类型。
cstring表示函数接受或返回以空字符结尾的C字符串。
internal表示函数接受或返回服务器内部数据类型。
language_handler过程性语言调用处理程序(procedural language call handler)被声明为返回language_handler。
fdw_handler外部数据包装处理程序(foreign-data wrapper handler)被声明为返回fdw_handler。
table_am_handler表访问方法处理器(table access method handler)被声明为返回table_am_handler。
index_am_handler索引访问方法处理程序(index access method handler)被声明为返回index_am_handler。
tsm_handler表例方法处理程序(tablesample method handler)被声明为返回tsm_handler。
record标识函数可以接受或返回未指定行类型。
trigger触发器(trigger)函数被声明为返回trigger。
event_trigger事件触发(event trigger)函数被声明为返回event_trigger。
pg_ddl_command标识事件触发器可用的DDL命令的表示形式。
void表示函数无返回值。
unknown标识尚未解析的类型,例如未修饰的字符串字面量。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/sql/postgresql/9301.html

(0)
上一篇 2023年1月1日 23:37
下一篇 2023年1月2日 23:38

相关推荐

发表回复

登录后才能评论