postgresql 基本类型

发布时间 2023-12-15 00:13:16作者: osbreak

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