跳转至

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;   -- 访问第一个元素