# 1. PostgreSQL 的角色(Role)与用户(User)的差异,CREATE ROLE vs CREATE USER? A 用户和角色是完全不同的两类对象,用户不能继承角色权限 B CREATE USER 等价于 CREATE ROLE 并默认附带 LOGIN 属性 ✓ 正确答案 C CREATE ROLE 默认具备 LOGIN 属性,可以登录数据库 D 角色只能用于权限分组,永远不能登录数据库
# 2. PostgreSQL 的权限系统,GRANT、REVOKE、ACL? A 权限只允许授予超级用户,普通用户无法被授权 B ACL 是存储在对象系统目录中的权限数组,记录角色及其权限位 ✓ 正确答案 C GRANT 只能授予数据库级权限,无法下放到表级 D 撤销所有权权限后对象会自动删除
# 3. PostgreSQL 高级 SQL 特性,递归 CTE、窗口函数、UPSERT、RETURNING? A 窗口函数会像 GROUP BY 一样把多行合并成一行 B RETURNING 只能用于 SELECT,不能用于 INSERT C 递归 CTE 必须使用 UNION 而非 UNION ALL D UPSERT 使用 INSERT ... ON CONFLICT 实现,可用 RETURNING 返回结果 ✓ 正确答案
# 4. PostgreSQL 的表继承(INHERITS)与分区(PARTITION BY)? A 声明式分区不具备分区裁剪优化能力 B 表继承对唯一约束和外键的支持比声明式分区更完善 C 声明式分区是原生特性,支持分区裁剪,是官方推荐方式 ✓ 正确答案 D 表继承与声明式分区是完全相同的机制
# 5. 递归 CTE 的典型应用,组织树、BOM 物料展开与图遍历,如何通过 WITH RECURSIVE 控制递归深度并避免死循环? A 通过深度计数限制和已访问节点路径检测可有效防止数据环导致的无限递归 ✓ 正确答案 B 递归 CTE 天然不会死循环,无需任何防护 C 只能使用 UNION 不能使用 UNION ALL 来避免递归 D 递归深度由数据库自动限制,无法人工控制
# 6. VACUUM 的工作机制,清理死元组、回收空间? A 普通 VACUUM 将死元组空间标记为可复用,但文件大小未必立即缩小 ✓ 正确答案 B 普通 VACUUM 会把空间立即归还给操作系统 C VACUUM FULL 期间不需要加锁,可在线执行 D VACUUM 只处理索引,不处理表数据
# 7. 膨胀(Table Bloat)的检测,pgstattuple、pg_stat_user_tables? A pg_stat_user_tables 的 n_dead_tup 可用于粗略评估死元组积累 ✓ 正确答案 B pgstattuple 通过系统统计即可精确判断,无需扫描 C 膨胀只能靠人工观察,无法量化 D pgstattuple 只要 1 秒就能扫描全表,无性能影响
# 8. 长事务/未提交事务为何会拖住 oldest xmin、使 VACUUM 无法回收其后产生的死元组?如何通过 pg_stat_activity 的 xact_start 与 backend_xmin 定位元凶? A 长事务会加快 VACUUM 回收死元组的速度 B 只有已提交的事务才影响 oldest xmin C 长事务不影响 VACUUM 的回收范围 D 长事务的 xmin 会拖住 oldest xmin,使 VACUUM 无法回收其后产生的死元组 ✓ 正确答案
# 9. pg_repack 在线重建表的原理(建影子表 + 触发器/日志捕获增量 → 短暂加锁做最终同步与 RENAME 交换)是什么?相比 VACUUM FULL 的长时间 ACCESS EXCLUSIVE 锁有何优势? A VACUUM FULL 在线执行,无需锁表 B pg_repack 与 VACUUM FULL 执行时间相同,都全程锁表 C pg_repack 通过影子表+增量日志回放,仅在最终同步阶段短暂加锁 ✓ 正确答案 D pg_repack 不需要额外磁盘空间
# 10. 高写入表如何调优 autovacuum(降低 autovacuum_vacuum_scale_factor、提高 autovacuum_vacuum_cost_limit、增加 worker 数)以跟上死元组产生速度? A 降低 autovacuum_vacuum_scale_factor 会减少 VACUUM 触发频率 B autovacuum 参数只能全局设置,无法针对单表 C 提高 autovacuum_vacuum_cost_limit 使单次 VACUUM 可承受更高 IO 成本 ✓ 正确答案 D 增加 worker 数会降低 VACUUM 清理能力
# 11. Schema 的搜索路径(search_path)与多租户? A search_path 决定未限定表名的解析顺序,可配置多租户隔离 ✓ 正确答案 B search_path 只能设置为 public,不能更改 C 多租户只能通过创建多个数据库实现,无法用 Schema D search_path 设置后无法跨 Schema 访问
# 12. 常用扩展,postgis、pg_trgm、uuid-ossp、pg_stat_statements、pg_cron? A pg_trgm 用于地理空间数据存储 B uuid-ossp 只能生成 UUID,不能安装到数据库 C pg_cron 仅在系统层调度,无法在数据库内运行 D pg_stat_statements 用于统计 SQL 执行性能,且需预加载共享库 ✓ 正确答案
# 13. TOAST(The Oversized-Attribute Storage Technique),超长字段的存储机制? A 所有字段包括定长字段都会进入 TOAST B TOAST 只影响索引,不影响表数据存储 C 超长字段会被压缩并可能移入独立的 TOAST 表存储 ✓ 正确答案 D TOAST 表无法查询,只能丢弃
# 14. 外部数据封装器(FDW, Foreign Data Wrapper),跨库访问? A FDW 只能访问本机数据库,不能跨源 B FDW 不支持任何 SQL 操作 C 使用 FDW 后必须完全复制数据到本地才能查询 D postgres_fdw 允许把远端 PostgreSQL 数据当作本地表查询,并支持下推 ✓ 正确答案
# 15. GRANT 的语法与权限模型,对象权限、列级权限与 GRANT OPTION 的传递机制,PUBLIC 与 DEFAULT PRIVILEGES 对新建对象权限的影响? A GRANT OPTION 使被授权者获得永久所有权,无法回收 B DEFAULT PRIVILEGES 用于设置未来新建对象默认授予的权限 ✓ 正确答案 C 列级权限只能授予整张表,不能只授某些列 D 对 PUBLIC 授权只影响一个角色
# 16. PostgreSQL 扩展的约束冲突? A 扩展只读 SQL 脚本,不注册系统对象 B 扩展永远不会与其他扩展冲突 C 扩展冲突只能通过重装数据库解决 D 扩展对象与既有对象同名会导致 CREATE EXTENSION 失败 ✓ 正确答案
# 17. REVOKE 的语法与级联行为,REVOKE GRANT OPTION FOR 与 CASCADE 的区别,如何撤销通过角色继承间接获得的权限? A REVOKE GRANT OPTION FOR 同时也撤销被授权者自身的权限 B REVOKE 无法撤销列级权限 C 通过角色继承获得的权限可直接对用户 REVOKE 撤销 D CASCADE 会级联撤销由该权限派生出的下游权限 ✓ 正确答案
# 18. pg_cron 在 PostgreSQL 中的应用,调度 VACUUM、分区清理与物化视图刷新的最佳实践,与系统 cron 相比的持久化与失败可见性优势? A pg_cron 任务定义存储在文件系统,重启即丢失 B pg_cron 可调度数据库内任务,且执行结果持久化、失败可见 ✓ 正确答案 C pg_cron 只能运行一次任务,无法周期调度 D pg_cron 与系统 cron 功能完全相同,无优势
# 19. pg_trgm 在模糊搜索中的应用,三元组相似度与 GIN/GiST 索引如何支撑 ILIKE 和相似度排序,误匹配与索引膨胀如何控制? A pg_trgm 基于三元组相似度,GIN 索引可支撑 ILIKE 通配符匹配 ✓ 正确答案 B pg_trgm 只能做精确匹配,不能模糊搜索 C GiST 索引不支持相似度距离排序 D pg_trgm 索引不会膨胀,无需维护
# 20. uuid-ossp 的应用,uuid_generate_v4 与基于时间戳+MAC 的 v1 差异,作为主键对 B-tree 索引碎片的影响,与 pgcrypto 的 gen_random_uuid 如何选型? A uuid_generate_v4 生成的随机 UUID 作为主键会导致 B-tree 索引页分裂与碎片化 ✓ 正确答案 B v1 与 v4 生成的 UUID 完全等价,无任何差异 C gen_random_uuid 与 v1 相同,都是基于时间戳 D 随机 UUID 主键能提升 B-tree 索引缓存命中率
# 21. PostgreSQL 17/18 的增量视图维护与 merge 增强对工程实践的影响? A PG 17 已支持增量物化视图维护,刷新不再需要全量重建 B PG 17 尚未提供增量物化视图维护,刷新以全量/CONCURRENTLY 为主,但 MERGE 增强了 RETURNING 等能力 ✓ 正确答案 C MERGE 自 17 起才引入,此前不存在 D 物化视图刷新只能离线,CONCURRENTLY 无法在线
# 22. pgvector 的 HNSW 索引与向量检索性能调优要点? A HNSW 索引是精确最近邻检索,无任何近似 B 增大 ef_search 会提高召回率,但会增加查询延迟 ✓ 正确答案 C m 参数越大索引越小,构建越快 D pgvector 只支持暴力扫描,不支持索引