Skip to content

Table Operations

类型存储大小描述范围
smallint2字节小范围整数-32,768 到 +32,767
integer4字节最常用整数-2,147,483,648 到 +2,147,483,647
bigint8字节大范围整数-9.22e18 到 +9.22e18
decimal(p,s)可变精确小数(财务数据)最高精度131,072位
numeric(p,s)可变精确小数同decimal,推荐使用
real4字节单精度浮点数6位十进制精度
double precision8字节双精度浮点数15位十进制精度
serial4字节自增整数1 到 2,147,483,647
bigserial8字节自增大整数1 到 9.22e18
  • 普通ID用integerbigint
  • 金融用numeric(10,2) (10位总数,2位小数)
  • 自增主键用serialbigserial
类型别名特点使用场景
varchar(n)character varying(n)变长,限制长度用户名、标题
char(n)character(n)定长,空格填充固定代码(如状态码)
text-推荐使用,无限长描述、内容、备注
bpchar-变长,去尾部空格较少使用

大多数情况用text,有明确长度限制时用varchar(n)

类型存储大小格式示例说明
date4字节2026-01-15仅日期
time8字节15:30:50.123仅时间
timestamp8字节2026-01-15 15:30:50常用,日期+时间
timestamptz8字节2026-01-15T15:30:50+08:00推荐,带时区
interval16字节3 days 02:00:00时间间隔

生产环境强烈推荐使用timestamptz

类型用途示例
boolean布尔值true/false
json / jsonbJSON数据{“name”: “张三”, “age”: 30}
uuid唯一标识符a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
array数组{1,2,3}, {“a”,“b”,“c”}
inet / cidrIP地址192.168.1.1
-- 创建用户表
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50UNIQUE NOT NULL,
    full_name TEXT NOT NULL,
    age INTEGER,
    email VARCHAR(200UNIQUE NOT NULL
);
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    price NUMERIC(10,2NOT NULL CHECK (price > 0),
    stock INTEGER DEFAULT 0 CHECK (stock >= 0),
    created_at TIMESTAMPTZ DEFAULT NOW()
);
命令说明示例
\dt查看所有表\dt
\dt+查看详细表信息\dt+
\d 表名查看表结构\d users
\d+ 表名查看表详细信息\d+ users
-- 插入单条数据
INSERT INTO users (username, full_name, email, age)
VALUES ('zhangsan''张三''zhangsan@example.com'25);
-- 插入多条数据
INSERT INTO users (username, full_name, email, age) VALUES
('lisi''李四''lisi@example.com'28),
('wangwu''王五''wangwu@example.com'32),
('zhaoliu''赵六''zhaoliu@example.com'22);
-- 查询所有
SELECT * FROM users;
-- 选择特定列
SELECT id, full_name, email FROM users;
-- 条件查询
SELECT * FROM users WHERE age > 25;
-- 模糊查询
SELECT * FROM users WHERE full_name LIKE '张%';
-- ILIKE 不区分大小写
SELECT * FROM users WHERE email ILIKE '%EXample.com';
-- 分页
SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 0;  -- 第1页
SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 10-- 第2页
-- 聚合函数
SELECT COUNT(*FROM users;
SELECT AVG(age) as avg_age FROM users;
-- 更新单个字段
UPDATE users SET age = 26 WHERE full_name = 'zhangsan';
-- 更新多个字段
UPDATE users SET
    age = 27,
    full_name = '李四四'
WHERE email = 'lisi@example.com';
-- 删除特定记录
DELETE FROM users WHERE username = 'zhangsan';
-- 清空表(谨慎使用!)
TRUNCATE TABLE users;
TRUNCATE TABLE users RESTART IDENTITY;  -- 同时重置自增ID