误区 1:把 PostgreSQL 当成“装上就不用管”的黑盒。
VACUUM、ANALYZE、autovacuum、统计信息、膨胀、长事务,都是日常运行的一部分。误区 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、约束校验都可能带来锁和长时间影响。迁移前必须评估。
第八篇:PostgreSQL 完全指南 —— 时间档案馆宇宙