架构与数据类型
命令速查见 基础命令。
与 MySQL 核心对比
| 维度 | MySQL | PostgreSQL |
|---|---|---|
| 事务隔离默认级别 | REPEATABLE READ | READ COMMITTED |
| JSON 支持 | JSON(文本存储) | JSONB(二进制,可索引) |
| 数组类型 | 不支持 | 原生支持 |
| 全文搜索 | FULLTEXT 索引(较弱) | 内置强大全文搜索 |
| 窗口函数 | 8.0+ 支持 | 支持,更完善 |
| CTE / 递归查询 | 8.0+ 支持 | 支持,更完善 |
| 并发控制 | MVCC + 锁 | 纯 MVCC,读不阻塞写 |
| 扩展性 | 插件较少 | 丰富扩展(PostGIS、pgvector 等) |
| 适用场景 | 互联网高并发读写 | 复杂查询、数据分析、GIS |
PostgreSQL 特有 / 增强类型
| 类型 | 说明 |
|---|---|
SERIAL / BIGSERIAL | 自增整数,等价于 INT + SEQUENCE |
UUID | 原生 UUID 类型 |
JSONB | 二进制 JSON,支持索引,推荐使用 |
JSON | 文本 JSON,保留原始格式,不支持索引 |
ARRAY | 任意类型的数组,如 INT[]、TEXT[] |
INTERVAL | 时间间隔,如 '2 hours 30 minutes' |
INET / CIDR | IP 地址类型 |
TSVECTOR | 全文搜索文档类型 |
TSQUERY | 全文搜索查询类型 |
JSONB 示例
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name TEXT,
attrs JSONB
);
INSERT INTO products (name, attrs)
VALUES ('手机', '{"brand": "Apple", "color": "black", "storage": 256}');
-- 取值(->> 返回文本)
SELECT attrs->>'brand' FROM products;
-- 条件查询(走 GIN 索引)
SELECT * FROM products WHERE attrs @> '{"brand": "Apple"}';
-- 更新某个字段
UPDATE products SET attrs = attrs || '{"storage": 512}' WHERE id = 1;索引:索引(GIN on JSONB)。
数组示例
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
tags TEXT[]
);
INSERT INTO posts (tags) VALUES ('{java, spring, mybatis}');
-- 查包含某个 tag 的帖子
SELECT * FROM posts WHERE 'java' = ANY(tags);
-- 查同时包含多个 tag
SELECT * FROM posts WHERE tags @> ARRAY['java', 'spring'];