POstgreSQL 数据类型
一. 数值类型
整数类型
-- 整数类型
smallint -- 2字节,-32768到+32767
integer -- 4字节,-2147483648到+2147483647
bigint -- 8字节,-9223372036854775808到+9223372036854775807
-- 自增整数
smallserial -- 2字节自增
serial -- 4字节自增
bigserial -- 8字节自增
精确小数
-- 精确小数s
numeric(precision,scale) -- 例如: numeric(10,2)总共10位数,小数有两位
decimal(precision,scale) -- 与numeric相同
浮点数
-- 浮点数
real -- 4字节,6位十进制精度
double precision -- 8字节,15位十进制精度
二. 字符类型
-- 固定长度
char(n) -- 定长,不足补空格
character(n) -- char(n)的别名
-- 可变长度
varchar(n) -- 变长,最大n字符
character varying(n) -- varchar(n)的别名
text -- 无限长度变长字符串
-- 示例
CREATE TABLE text_exaple (
fixed_char CHAR(10), -- 总是占用10个字符
variable_char VARCHAR(50), -- 最大50字符
unlimited_text TEXT -- 无长度限制
);
CREATE TABLE text_exaple (
fixed_char CHAR(10), -- 总是占用10个字符
variable_char VARCHAR(50), -- 最大50字符
unlimited_text TEXT -- 无长度限制
);
三. 时间/日期类型
-- 日期时间类型
timestamp [without time zone] -- 日期和时间(无时区)
timestamp with time zone -- 日期和时间(包含时区)
date -- 只包含日期
time [without time zone] -- 只包含时间(无时区)
time with time zone -- 只包含时间(带时区)
interval -- 时间间隔
-- 示例
CREATE TABLE text_example (
event_time TIMESTAMP, -- 2026-07-30 11:30:00
event_time_tz TIMESTAMPTZ, -- 2026-07-30 11:30:00+8
event_date DATE, -- 2026-07-30
duration INTERVAL -- 2hours 30 minutes
);
klm=# CREATE TABLE text_example (
klm(# event_time TIMESTAMP, -- 2026-07-30 11:30:00
klm(# event_time_tz TIMESTAMPTZ, -- 2026-07-30 11:30:00+8
klm(# event_date DATE, -- 2026-07-30
klm(# duration INTERVAL -- 2hours 30 minutes
klm(# );
CREATE TABLE
四. 布尔类型
-- 布尔类型
boolean
-- 可接受的值: TRUE,FALSE,ULL
-- 缩写: t,f,yes,no,1,0,on,off
CREATE TABLE bool_example (
is_active BOOLEAN DEFAULT TRUE,
is_deleted BOOLEAN DEFAULT FALSE
);
五. 二进制数据类型
-- 二进制数据
bytea --变长二进制字符串
-- 示例
CREATE TABLE binary_example (
image_data BYTEA,
file_content BYTEA
);
六. 几何类型
-- 几何类型
point -- 平面上的点(x,y)
line -- 无限长的线
lseg -- 线段
box -- 矩形
path -- 几何路径
polygon -- 多边形
circle -- 圆
-- 示例
CREATE TABLE geometry_example (
location POINT,
area POLYGON,
redius CIRCLE
);
七. 网络地址类型
-- 网络地址类型
cidr -- IPv4 或 IPv6 网络
inet -- IPv4 或 IPv6 主机地址
macaddr -- MAC地址
-- 示例
CREATE TABLE network_example (
ip_address INET,
network CIDR,
mac_address MACADDR
);
八. 数组类型
-- 数组类型 (任何数据类型都可以创建数组)
integer[] -- 整数数组
text[] -- 文本数组
varchar(10)[] -- 可变字符串数组
-- 示例
CREATE TABLE array_example (
user_ids INTEGER[], -- {1,2,3,4,5}
tags TEXT[], -- {'sql','postgres','database'}
scores DOUBLE PRECISION[] -- {98.5,87.2,92.0}
);
-- 数组操作
INSERT INTO array_example VALUES
(ARRAY[1,2,3],ARRAY['a','b','c'],ARRAY[1.1,2..-2,3.3]);
SELECT user_ids[1] FROM array_example; -- 访问第一个元素