1.整数类型
数据类型smallserial
、serial
和bigserial
并不是真正的类型,类似于其它一些数据库支持的AUTO_INCREMENT
属性。
类型 | 存储 | 描述 | 范围 |
smallint | 2 字节 | 有符号小范围整数 | -32768 ~ +32767 |
integer | 4 字节 | 有符号整数 | -2147483648 ~ +2147483647 |
bigint | 8 字节 | 有符号大范围整数 | -9223372036854775808 ~ +9223372036854775807 |
smallserial | 2 字节 | 无符号小自增整数 | 1 ~ 32767 |
serial | 4 字节 | 无符号自增整数 | 1 ~ 2147483647 |
bigserial | 8 字节 | 无符号大自增整数 | 1 ~ 9223372036854775807 |
2.任意精度数字(精确值)
数字 28.5181
的精度(precision
)为 6
,小数位数(scale
)为 4
。整数可以被认为是小数位数为零。
类型 | 存储 | 精度 |
numeric [ (precision, | 可变的 | 小数点前最多 131072 十进制位,小数点后最多 16383 十进制位。 |
decimal [ (precision, | 可变的 | 小数点前最多 131072 十进制位,小数点后最多 16383 十进制位。 |
除了普通的数值,任意精度数字(精确值)还有几个特殊的值:
类型 | 范围 |
Infinity | 正无穷大 |
-Infinity | 负无穷大 |
NaN | 非数字 |
3.浮点类型(近似值)
浮点类型遵循IEEE 754二进制浮点算术标准。
类型 | 存储 | 精度 |
real | 4 字节 | 6 位十进制数字精度 |
double precision | 8 字节 | 15 位十进制数字精度 |
除了普通的数值,浮点类型(近似值)还有几个特殊的值:
类型 | 范围 |
Infinity | 正无穷大 |
-Infinity | 负无穷大 |
NaN | 非数字 |
4.货币类型
money
类型的小数位数(scale
)是固定的,小数位数是由数据库的 lc_monetary
配置项决定的。
类型 | 存储 | 描述 | 范围 |
money | 8 字节 | 货币金额 | -92233720368547758.08 ~ +92233720368547758.07 |
5.布尔类型
类型 | 存储 | 值 |
boolean | 1 字节 | true 或 flase |
6.位字符串类型
位字符串是由1和0组成的字符串。它们可以用来存储或可视化位掩码。n
是一个代表长度的正整数。
类型 | 描述 | 长度n |
bit [ ( | 固定长度位字符串 | 必须精确匹配固定长度n |
bit varying [ ( | 可变长度位字符串 | 最大长度不超过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 [ ( | 8 字节 | 日期和时间(无时区) | 公元前 4713 年 | 公元 294276 年 | 1 微秒 |
timestamp [ ( | 8 字节 | 日期和时间(带时区) | 公元前 4713 年 | 公元 294276 年 | 1 微秒 |
date | 4字节 | 日期(无时间) | 公元前 4713 年 | 公元 5874897 年 | 1天 |
time [ ( | 8 字节 | 时间(无日期无时区) | 00:00:00 | 24:00:00 | 1 微秒 |
time [ ( | 12 字节 | 时间(无日期带时区) | 00:00:00+1559 | 24:00:00-1559 | 1 微秒 |
interval [ | 16 字节 | 时间间隔 | -1.78亿年 | 1.78亿年 | 1 微秒 |
8.字符(character)字符串类型
类型 | 描述 |
character( ,char( | 固定长度字符字符串,达不到n空白填充 |
character varying( , varchar( | 可变长度字符字符串,不可超过n |
text | 可变无限长度字符串 |
9.二进制(binary)字符串类型
bytea
是字节数组(byte array)的缩写。
类型 | 存储 | 描述 |
bytea | 1 或 4 个字节加上实际的二进制字符串 | 可变长度二进制字符串(字节数组) |
10.几何(geometric)类型
几何数据类型表示二维空间的几何类型。
类型 | 存储 | 描述 | 表示 |
point | 16 字节 | 点 | (x, y) |
line | 32 字节 | 无限大直线 | {A,B,C} |
lseg | 32 字节 | 有限大线段 | ((x1,y1),(x2,y2)) |
box | 32 字节 | 长方形盒子 | ((x1,y1),(x2,y2)) |
path | 16+16n 字节 | 封闭路径(类似polygon ) | ((x1,y1),…) |
path | 16+16n 字节 | 打开路径 | [(x1,y1),…] |
polygon | 40+16n 字节 | 多边形(类似封闭路径) | ((x1,y1),…) |
circle | 24 字节 | 圆 | <(x,y),r>(中心点和半径) |
11.网络地址类型
类型 | 存储 | 描述 |
cidr | 7 或 19 字节 | IPv4 和 IPv6 网络地址 |
inet | 7 或 19 字节 | IPv4 和 IPv6 主机和网络地址 |
macaddr | 6 字节 | MAC地址 |
macaddr8 | 8 字节 | 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 , int4multirange | integer |
int8range , int8multirange | bigint |
numrange , nummultirange | numeric |
tsrange , tsmultirange | timestamp without time zone |
tstzrange , tstzmultirange | timestamp with time zone |
daterange , datemultirange | date |
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 数据,分解 |
xml | XML 数据 |
pg_lsn | PostgreSQL日志序列号 |
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