跳转到主要内容

Postgres by Example

PostgreSQL实例教程

通过简短、可运行的示例动手学习 PostgreSQL。

Dariush Abbasi的头像 作者 Dariush Abbasi Postgres by Example 原作者 Codex的代码符号头像 译者 Codex 中文翻译与分轮自检

Dariush Abbasi
简体中文版 · 面向 PostgreSQL 17

本书用 57 节短课,从第一次查询讲起,依次介绍数据建模、查询、索引、事务、存储逻辑、检索与日常运维。每章都附有 SQL 文件;备份一章介绍 Shell 命令,psql 参考一章则提供查询系统目录的替代示例。

准备工作

练习环境、示例数据与阅读顺序

本书面向 PostgreSQL 17,使用 psql 命令行客户端。更高版本才有的功能会明确标注。阅读时可以配合查阅官方文档。

下载完整 SQL 示例包,解压到一个新目录,然后在包含 source/ 的目录中运行命令。请使用可以随时丢弃的练习数据库:本书会创建、修改和删除示例表。示例中的数据库名为 postgres,运行时请替换成自己的练习数据库,例如 pbe:

createdb pbe
psql -X -v ON_ERROR_STOP=1 -f source/first-query.sql pbe

请按章序阅读。在学习第 6 章之前,先用第 16 章和第 24 章介绍的文件创建示例表:

psql -X -v ON_ERROR_STOP=1 -f source/create-table.sql -f source/insert.sql pbe

第 16 章会重新创建表,第 24 章会再次填入数据。后面的连接章节依赖第 29 章的示例,递归示例还会用到第 31 章。跳读时,请先完成该章要求的准备步骤。选做练习可能改变后续示例的结果。日期、UUID、系统目录列表、查询计划和执行耗时可能不同;终端记录中的省略号表示省去的输出。

两个特殊情况

第 46 章会故意触发重复键错误,请设置 ON_ERROR_STOP=off,以便继续执行后面的回滚和清理。第 55 章需要使用非超级用户、且没有 BYPASSRLS 属性的数据库所有者;即使启用了 FORCE ROW LEVEL SECURITY,超级用户也会绕过行级安全。

目录

57 节短课,循序渐进

示例

按章节查找 SQL 示例
  1. 示例 1.1 — 第一次查询
  2. 示例 2.1 — psql 基础
  3. 示例 3.1 — SELECT 基础
  4. 示例 4.1 — WHERE
  5. 示例 5.1 — ORDER BY
  6. 示例 6.1 — 从表中查询数据
  7. 示例 7.1 — LIMIT 与 OFFSET
  8. 示例 8.1 — DISTINCT
  9. 示例 9.1 — 空值(NULL)
  10. 示例 10.1 — 表达式
  11. 示例 11.1 — 数值类型
  12. 示例 12.1 — 文本类型
  13. 示例 13.1 — 布尔值与日期
  14. 示例 14.1 — UUID 与 JSONB
  15. 示例 15.1 — 数组与 ENUM
  16. 示例 16.1 — CREATE TABLE
  17. 示例 17.1 — 列类型与约束
  18. 示例 18.1 — ALTER TABLE 与 DROP
  19. 示例 19.1 — 主键与唯一约束
  20. 示例 20.1 — 外键
  21. 示例 21.1 — NOT NULL 与 DEFAULT
  22. 示例 22.1 — 标识列与序列
  23. 示例 23.1 — 模式与 search_path
  24. 示例 24.1 — INSERT
  25. 示例 25.1 — UPSERT(ON CONFLICT)
  26. 示例 26.1 — UPDATE
  27. 示例 27.1 — DELETE
  28. 示例 28.1 — RETURNING
  29. 示例 29.1 — 内连接与左连接
  30. 示例 30.1 — 右连接与全连接
  31. 示例 31.1 — 自连接
  32. 示例 32.1 — UNION、INTERSECT 与 EXCEPT
  33. 示例 33.1 — COUNT、SUM 与 AVG
  34. 示例 34.1 — GROUP BY
  35. 示例 35.1 — HAVING
  36. 示例 36.1 — 标量子查询与 IN 子查询
  37. 示例 37.1 — EXISTS 与派生表
  38. 示例 38.1 — 公用表表达式(WITH)
  39. 示例 39.1 — 窗口函数
  40. 示例 40.1 — 字符串与数值函数
  41. 示例 41.1 — 日期函数与 COALESCE
  42. 示例 42.1 — CASE
  43. 示例 43.1 — 创建索引
  44. 示例 44.1 — 何时创建索引
  45. 示例 45.1 — EXPLAIN 与查询计划
  46. 示例 46.1 — BEGIN、COMMIT 与 ROLLBACK
  47. 示例 47.1 — 保存点
  48. 示例 48.1 — 创建视图
  49. 示例 49.1 — 物化视图
  50. 示例 50.1 — 函数与 PL/pgSQL
  51. 示例 51.1 — 触发器
  52. 示例 52.1 — 全文检索
  53. 示例 53.1 — VACUUM 与 ANALYZE
  54. 示例 54.1 — pg_dump 与 pg_restore
  55. 示例 55.1 — 角色与 GRANT
  56. 示例 56.1 — psql 元命令
  57. 示例 57.1 — COPY

关于本版

来源、编校与开放许可

本中文版译自英文网页修订版。该英文版以 boringcollege/postgres-by-example 仓库的提交 ffde0d358722498e37982b57bdbd711871a61c43 为基础,将讲解与 SQL 示例放在一起,已核查的技术修订记录在编校说明中。原仓库采用 Creative Commons 署名 4.0 国际许可协议。

中文版由 Codex 翻译并分轮自检,未经独立人工审定。

出版与许可 · 技术勘误