后端

PostgreSQL

你可能会说

AI 推荐我用 Supabase 和 PostgreSQL 存用户和订单,它和普通存文件有什么区别?

用表保存和查询关联数据的开源数据库管理系统例如把用户和订单保存在两张表里,再规定每笔订单必须对应一个已有用户。PostgreSQL 可以执行这样的数据约束;这些规则需要明确配置,装好数据库不会自动理解你的业务。
也常被叫作PostgresPGPostgreSQL 数据库Postgres 数据库
先问一句要更强 SQL/扩展?
默认PostgreSQL→擅长JSON/地理/向量→别用只求最省运维

什么时候选它

  • 复杂查询、窗口函数、CTE 用得多的业务
  • 需要 JSONB、数组、地理、向量等扩展类型,一个库顶几个
  • 对约束和类型检查要求高、希望数据「更不容易写错」
  • 想减少「再引入一个专用库」的团队

什么时候别选

  • 团队只熟 MySQL、运维能力有限,迁移和维护成本会吃掉收益
  • 极端高并发简单读写,且依赖成熟的国内托管生态——先评估
  • 只当缓存或队列用,那不是它的定位
容易混在一起 · 怎么分
PostgreSQL≠MySQL

PG 的 SQL 标准兼容、扩展类型和复杂查询更强;MySQL 的资料、托管和「会的人」更多。

PostgreSQL≠MongoDB

PG 的 JSONB 能存文档,但核心仍是关系模型和事务;Mongo 更适合整份文档读写、结构频繁变化。

PG 的 MVCC≠MySQL 的 MVCC

PG 把旧版本留在表里,需要 vacuum 回收;MySQL 用 undo log 维护旧版本。

Q面试会问什么

  • 问:PG 的 MVCC 怎么实现?
    答:更新时写新版本行,旧版本留在表内,靠事务快照判断可见性,旧版本由 vacuum 回收。
  • 问:为什么需要 vacuum?
    答:死元组不清理会撑大表和索引、拖慢查询,长期还会逼近事务 ID 回卷。
  • 问:什么时候选 PG 不选 MySQL?
    答:需要复杂查询、JSON / 地理 / 向量等扩展类型,或更严格约束的时候。
延伸阅读 · 权威出处