1.1 整数类型
integer 4字节
smallint 2字节
bigint 8字节
1.2 任意精度类型
NUMERIC(precision, scale)
1.3 浮点数类型
float4 单精度,4字节
float8 双精度,8字节
1.4 金额类型
/* 显示和客户端参数lc monetary有关 */
money 存储空间 8字节,默认有2位小数
/* 显示和客户端参数lc monetary有关 */
> show lc_monetary;
zh_CN.UTF-8
/* 设置为美元 */
> set lc_monetary='en_US.UTF-8';
/* numeric、int、bigint型数据类型转换为money */
> SELECT '12.34'::numeric::money;
¥12.34
> SELECT '12.34'::money::numeric;
12.34
1.5 序列类型
/* 序列类型通常用于自增ID */
smallserial 2字节
serial 4字节
bigserial 8字节
1.6 字符类型
varchar(n) 有长度限制的字符串
char(n) 定长字符串,长度不足则向后填充空白字符
text 不限长度
枚举类型
枚举类型中指定的值大小写敏感,匹配时值必须完全一致,
CREATE TYPE mood AS ENUM ('sad', ok', 'happy');
输入一个不存在的枚举值将报错
SELECT * FROM person WHERE current_hood = 'happ':
避免报错的方法把举转换成text
SELECT * FROM person WHERE current_hood::text = 'happ':
查询枚举的大小,枚举的标签在定义中最大限制由NAMEDATALEN决定,默认是64-1。
select oid,typname from pg_type where typname='mood';
select * from pg_enum where enumtypid=3952969;
select enum_first('sad'::mood); // 返回此枚举类型的第一个值
select enum_last('sad'::mood); // 返回此枚举类型的最后一个值
select enum_range('sad'::mood); // 返回枚举类型的所有值
select enum_range('sad'::mood , 'happy'::mood); // 返回两个枚举类型之间的范围
枚举类型
cidr IPv4 或 IPv6 网络
inet IPv4 或 IPv6 主机和网络
macaddr 6 字节 MAC 地址
几何类型
point 二维平面上的点,用(x, y)表示,x、y分别表示x轴、y轴的坐标值
/* ?- :是否横向齐平(y坐标是否相同) */
SELECT * FROM test_point WHERE pt ?- '(0,22)';
/* ?| :是否纵向齐平(x坐标是否相同) */
SELECT * FROM test_point WHERE pt ?| '(1.1,0)';
circle,圆,用圆心和半径表示,如 (x, y, r)其中(x,y)为圆心,r为半径。
<@ 点是否位于圆内
@> 圆是否包含点
<< 圆是否严格在圆的左侧
>> 圆是否严格在圆的右侧
<-> 两个圆之间的距离
line,线,在坐标系上用Ax + By + C = 0表示,也就是一个二元一次方程,A、B表示斜率,C表示偏移量。
?|| 两条线是否平行
?-| 两条线是否垂直
https://zhuanlan.zhihu.com/p/105097036