PostgreSQL(简称 Postgres)是一种功能强大的开源对象-关系数据库系统,由 PostgreSQL 全球开发组维护。它最初由 Michael Stonebraker 领导的 POSTGRES 项目于 1986 年在加州大学伯克利分校开始开发,1996 年以 PostgreSQL 的名称正式开源发布。
PostgreSQL 的核心定位是 "世界上最先进的开源数据库"。它提供了:
PostgreSQL 的前身是 POSTGRES 项目,由 Michael Stonebraker 于 1986 年在加州大学伯克利分校领导开发。POSTGRES 的目标是 扩展关系数据库模型,支持复杂数据。1996 年,项目更名为 PostgreSQL,并正式开源发布。
-- 创建 JSON 列
CREATE TABLE users (
id SERIAL PRIMARY KEY,
data JSONB
);
-- 插入 JSON 数据
INSERT INTO users (data) VALUES
('{"name": "Alice", "age": 30, "city": "Beijing"}'),
('{"name": "Bob", "age": 25, "city": "Shanghai"}');
-- 查询 JSON 字段
SELECT data->>'name' AS name FROM users;
SELECT data @> '{"city": "Beijing"}' FROM users;
-- JSONB 索引(加速查询)
CREATE INDEX idx_users_data ON users USING GIN (data);
-- JSON 聚合
SELECT json_agg(data) FROM users;
-- 创建全文搜索向量列
CREATE TABLE articles (
id SERIAL PRIMARY KEY,
title TEXT,
content TEXT,
tsvector TSVECTOR
);
-- 生成搜索向量
UPDATE articles SET tsvector =
setweight(to_tsvector('english', title), 'A') ||
setweight(to_tsvector('english', content), 'B');
-- 全文搜索查询
SELECT * FROM articles
WHERE tsvector @@ to_tsquery('english', 'postgresql & database');
-- 创建 GIN 索引加速
CREATE INDEX idx_articles_tsvector ON articles USING GIN (tsvector);
-- 显示排名
SELECT title, ts_rank(tsvector, query) AS rank
FROM articles, to_tsquery('postgresql') query
WHERE tsvector @@ query
ORDER BY rank DESC;
-- 排名
SELECT name, salary,
RANK() OVER (ORDER BY salary DESC) AS rank,
DENSE_RANK() OVER (ORDER BY salary DESC) AS dense_rank
FROM employees;
-- 分组排名
SELECT name, department, salary,
RANK() OVER (PARTITION BY department ORDER BY salary DESC) AS dept_rank
FROM employees;
-- 累计聚合
SELECT date, revenue,
SUM(revenue) OVER (ORDER BY date) AS cumulative_revenue
FROM sales;
-- 移动平均
SELECT date, value,
AVG(value) OVER (ORDER BY date ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING) AS moving_avg
FROM stock_prices;
-- 声明式分区(PostgreSQL 10+)
CREATE TABLE orders (
id SERIAL,
order_date DATE,
amount DECIMAL
) PARTITION BY RANGE (order_date);
-- 创建分区
CREATE TABLE orders_2023_01 PARTITION OF orders
FOR VALUES FROM ('2023-01-01') TO ('2023-02-01');
CREATE TABLE orders_2023_02 PARTITION OF orders
FOR VALUES FROM ('2023-02-01') TO ('2023-03-01');
-- 插入数据自动路由到对应分区
INSERT INTO orders (order_date, amount) VALUES ('2023-01-15', 100.50);
PostgreSQL 安装、基础 SQL、数据类型、约束
索引、视图、事务、JSON 操作、窗口函数
存储过程、触发器、分区、流复制、全文搜索
PostGIS(GIS)、TimescaleDB(时序)、pgvector(AI)、Citus(分布式)
PostgreSQL 是开源数据库的"终极答案"。
它不仅是功能最全面的开源数据库,更是 SQL 标准的模范生。PostgreSQL 的 JSONB 支持让它兼具 NoSQL 的灵活性,PostGIS 扩展让它在地理信息领域无可替代。
对于新项目,PostgreSQL 应该是最优先考虑的关系数据库。它正在逐步取代 MySQL 和 Oracle,成为企业级应用的首选开源数据库。
"PostgreSQL 是数据库世界的瑞士军刀。" 🐘