跳转至

PostgreSQL 面试题

ACID

  • 原子性, 日志实现 (A)
  • 持久性, 日志实现 (D)
  • 隔离性, 并发控制, 日志 + 锁实现 + MVCC 优化 (I)
  • 一致性, 数据库约束实现 (C)

WAL 机制

  • 先顺序写入日志
  • 异步应用到数据文件
  • COMMIT 时, 日志 fsync 确保持久
  • 回滚时, 逆向应用日志
  • 使用循环缓冲区或 LSM-Tree存储

JSONB

  • 存储 JSON 文档
  • 将 JSON 文档转换为抽象语法树 -> 每个节点存储 TLKV (Type, Length, Key, Value)
  • 每层节点按 Key 的哈希值排序
  • 常建立 GIN 索引 (需要回表查询, 存在假阳性)

事务隔离级别

MVCC

索引

  • PostgreSQL 支持对所有可确定性表达式建立索引
  • 可确定性表达式: 表达式的结果只依赖被查询的数据 (随机数, 会话信息, 子查询反之)