PostgreSQL学习笔记-PostgreSQL数据类型

PostgreSQL学习笔记

数据类型

数字类型

类型 长度 描述 范围 说明
smallint 2字节 小范围的整数 -32768 至 +32767
integer 4字节 整数 -2147483648 to +2147483647
bigint 8字节 大整数 -9223372036854775808 至+9223372036854775807
decimal 可变长度 用户自定义的精度。精确 小数点前高达131072位;小数点后高达16383位
numeric 可变长度 用户自定义的精度数字。精确 小数点前高达131072位;小数点后高达16383位
real 4字节 可变精度,不精确 6位小数精度
double precision 8字节 双精度。可变精度,不精确 15位小数精度
smallserial 2字节 小型递增整数 1至32767
serial 4字节 递增整数 1至2147483647
bigserial 8字节 大型递增整数 1至 9223372036854775807
int4range integer范围
int8range bigint范围
numrange numeric范围

日期/时间类型

类型 长度 描述 最低值 最高值 范围
timestamp 8字节 日期和时间,无时区 4713 BC 294276 AD 1微秒/14位
timestamp 8字节 日期和时间,有时区 4713 BC 294276 AD 1微秒/14位
date 4字节 日期,没有当天时间 4713 BC 5874897 AD 1微秒/14位
time 8字节 时间,无时区,无日期 00:00:00 24:00:00 1微秒/14位
time 8字节 时间,有时区,无日期 00:00:00+1459 24:00:00-1459 1微秒/14位
interval 16字节 时间间隔 -178000000 年 178000000 年 1微秒/14位
tsrange 时间戳范围,无时区
tstzrange 时间戳范围,有时区
daterange 日期范围

几何类型

类型 长度 描述 表现形式
point 16字节 平面上的点 (x,y)
line 32字节 无限线 {A,B,C}
lseg 32字节 有限限度 ((x1,y1),(x2,y2))
box 32字节 矩形 ((x1,y1),(x2,y2))
path 16+16n bytes 闭合path(和椭圆类似) ((x1,y1),…)
path 16+16n bytes 不闭合 [(x1,y1),…]
polygon 40+16n bytes 椭圆(和闭合path类似) ((x1,y1),…)
circle 24字节 <(x,y),r> (圆心和半径)

网络地址类型

类型 长度 描述
cidr 7或19字节 Classless Inter-Domain Routing,无类域间路由选择。IPv4和IPv6网络
inet 7或19字节 IPv4,IPv6网络的主机和网络
macaddr 6字节 MAC地址

字符类型

类型 描述
character varying(n) 有限可变长度空间
varchar(n) 有限可变长度空间
character(n) 固定长度,空白填充
char(n) 固定长度,空白填充
text 可变无限长度

数组类型

​ 在postgresql中可以创建任何内置的,用户自定义。或者枚举类型的数组。默认情况下,数组没有现在,但是可以定义限制。

声明数组
CREATE TABLE sal_emp (
    name            text,
    pay_by_quarter  integer[],
    schedule        text[][]
);
CREATE TABLE tictactoe (
    squares   integer[3][3]
);
插入数组值

​ 高纬度的数组值须对应好每个维度,对应错了就会造成错误。

INSERT INTO sal_emp
    VALUES ('Bill',
    '{10000, 10000, 10000, 10000}',
    '{{"meeting", "lunch"}, {"training", "presentation"}}');
数组获取
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT int_arr[1] FROM arr; --获取指定索引的数组值
-- 结果 0
数组切片
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT int_arr[1:2] FROM arr;
-- 结果 {0,1}
获取数组相关信息
-- 获取数组维度
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT ARRAY_DIMS(int_arr) FROM arr;
-- 结果 [1:3] 
-- 一行三列
获取某个维度的长度
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT ARRAY_LENGTH(int_arr,1) FROM arr;
-- 结果 3
-- 第1行的长度是3(列)
获取数组所有元素总数
WITH arr AS (SELECT ARRAY[0,1,2] int_arr) SELECT cardinality(int_arr) FROM arr;
-- 3

你可能感兴趣的:(postgresql)