Dariush Abbasi
简体中文版 · 面向 PostgreSQL 17
准备工作
练习环境、示例数据与阅读顺序
本书面向 PostgreSQL 17,使用 psql 命令行客户端。更高版本才有的功能会明确标注。阅读时可以配合查阅官方文档。
下载完整 SQL 示例包,解压到一个新目录,然后在包含 source/ 的目录中运行命令。请使用可以随时丢弃的练习数据库:本书会创建、修改和删除示例表。示例中的数据库名为 postgres,运行时请替换成自己的练习数据库,例如 pbe:
请按章序阅读。在学习第 6 章之前,先用第 16 章和第 24 章介绍的文件创建示例表:
第 16 章会重新创建表,第 24 章会再次填入数据。后面的连接章节依赖第 29 章的示例,递归示例还会用到第 31 章。跳读时,请先完成该章要求的准备步骤。选做练习可能改变后续示例的结果。日期、UUID、系统目录列表、查询计划和执行耗时可能不同;终端记录中的省略号表示省去的输出。
第 46 章会故意触发重复键错误,请设置 ON_ERROR_STOP=off,以便继续执行后面的回滚和清理。第 55 章需要使用非超级用户、且没有 BYPASSRLS 属性的数据库所有者;即使启用了 FORCE ROW LEVEL SECURITY,超级用户也会绕过行级安全。
示例
按章节查找 SQL 示例
- 示例 1.1 — 第一次查询
- 示例 2.1 — psql 基础
- 示例 3.1 — SELECT 基础
- 示例 4.1 — WHERE
- 示例 5.1 — ORDER BY
- 示例 6.1 — 从表中查询数据
- 示例 7.1 — LIMIT 与 OFFSET
- 示例 8.1 — DISTINCT
- 示例 9.1 — 空值(NULL)
- 示例 10.1 — 表达式
- 示例 11.1 — 数值类型
- 示例 12.1 — 文本类型
- 示例 13.1 — 布尔值与日期
- 示例 14.1 — UUID 与 JSONB
- 示例 15.1 — 数组与 ENUM
- 示例 16.1 — CREATE TABLE
- 示例 17.1 — 列类型与约束
- 示例 18.1 — ALTER TABLE 与 DROP
- 示例 19.1 — 主键与唯一约束
- 示例 20.1 — 外键
- 示例 21.1 — NOT NULL 与 DEFAULT
- 示例 22.1 — 标识列与序列
- 示例 23.1 — 模式与 search_path
- 示例 24.1 — INSERT
- 示例 25.1 — UPSERT(ON CONFLICT)
- 示例 26.1 — UPDATE
- 示例 27.1 — DELETE
- 示例 28.1 — RETURNING
- 示例 29.1 — 内连接与左连接
- 示例 30.1 — 右连接与全连接
- 示例 31.1 — 自连接
- 示例 32.1 — UNION、INTERSECT 与 EXCEPT
- 示例 33.1 — COUNT、SUM 与 AVG
- 示例 34.1 — GROUP BY
- 示例 35.1 — HAVING
- 示例 36.1 — 标量子查询与 IN 子查询
- 示例 37.1 — EXISTS 与派生表
- 示例 38.1 — 公用表表达式(WITH)
- 示例 39.1 — 窗口函数
- 示例 40.1 — 字符串与数值函数
- 示例 41.1 — 日期函数与 COALESCE
- 示例 42.1 — CASE
- 示例 43.1 — 创建索引
- 示例 44.1 — 何时创建索引
- 示例 45.1 — EXPLAIN 与查询计划
- 示例 46.1 — BEGIN、COMMIT 与 ROLLBACK
- 示例 47.1 — 保存点
- 示例 48.1 — 创建视图
- 示例 49.1 — 物化视图
- 示例 50.1 — 函数与 PL/pgSQL
- 示例 51.1 — 触发器
- 示例 52.1 — 全文检索
- 示例 53.1 — VACUUM 与 ANALYZE
- 示例 54.1 — pg_dump 与 pg_restore
- 示例 55.1 — 角色与 GRANT
- 示例 56.1 — psql 元命令
- 示例 57.1 — COPY
关于本版
来源、编校与开放许可
本中文版译自英文网页修订版。该英文版以 boringcollege/postgres-by-example 仓库的提交 ffde0d358722498e37982b57bdbd711871a61c43 为基础,将讲解与 SQL 示例放在一起,已核查的技术修订记录在编校说明中。原仓库采用 Creative Commons 署名 4.0 国际许可协议。
中文版由 Codex 翻译并分轮自检,未经独立人工审定。