全书目录

第八篇:PostgreSQL 完全指南 —— 时间档案馆宇宙

第十四章:常见误区 —— PostgreSQL 最容易被用错的地方

2 分钟 826 字 第 178 / 962 个阅读单元
  • 误区 1:把 PostgreSQL 当成“装上就不用管”的黑盒。
    VACUUMANALYZEautovacuum、统计信息、膨胀、长事务,都是日常运行的一部分。

  • 误区 2:慢查询第一反应就是“加索引”。
    先看 EXPLAIN ANALYZE。问题可能是选错查询写法、统计过期、返回行数太大、Join 策略不合适。

  • 误区 3:外键会自动把引用列也建索引。
    官方文档明确指出:被引用端天然有索引,但引用端不会自动建。大表删除/更新时,这会直接拖垮性能。

  • 误区 4:UNIQUE 会把多个 NULL 当重复。
    PostgreSQL 默认不是。需要这种行为时,用 NULLS NOT DISTINCT

  • 误区 5:用 CHECK 维护跨行规则。
    这不是它的职责。跨行一致性优先考虑 UNIQUE、部分唯一索引、外键、排斥约束、触发器。

  • 误区 6:UPDATE 是原地修改,所以不会留下历史包袱。
    PostgreSQL 的 MVCC 决定了更新/删除会留下旧版本,后续要靠 VACUUM 清理。

  • 误区 7:事务开久一点没关系。
    长事务会拖住可见性推进,导致旧版本无法清理,甚至引发膨胀、锁等待、wraparound 风险。

  • 误区 8:SERIALIZABLE 开了就万事大吉。
    它给你更强保证,但代价是可能出现序列化失败。应用必须具备重试能力。

  • 误区 9:序列号会随事务回滚而回滚。
    官方文档明确提醒,序列变化会立刻对其他事务可见,事务失败后编号也不会“退回去”。

  • 误区 10:JSONB 能替代表设计。
    JSONB 是附页,不是整柜。稳定主干数据应该继续用明确列、约束和关系。

  • 误区 11:备份就是 pg_dump 一把梭。
    pg_dump 很重要,但它不是 PITR,也不是整实例在线物理恢复方案。

  • 误区 12:线上 DDL 都是“秒改”。
    大表 ALTER TABLE、普通 CREATE INDEX、约束校验都可能带来锁和长时间影响。迁移前必须评估。