关于 db-replicas-views
db-replicas-views 是用于审查数据库读副本和物化视图风险的技能,关注数据陈旧导致的正确性与性能问题。它结合静态检查和可选的 PostgreSQL 验证,并区分实测证据与推断风险。
主要功能
- 01检测写后读取的副本路由
- 02检查物化视图刷新方式
- 03标记会阻塞读取的刷新命令
- 04验证副本延迟和视图状态
- 05区分实测事实与推断风险
适用场景
- 01检查新写入的评论是否可能未出现在下一次页面加载中
- 02审查没有明显刷新计划的物化视图
- 03评估刷新命令是否会阻塞读取
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ hainrixz/ claude-db --skill db-replicas-views安装后在 Claude Code 中输入/db-replicas-views确认已加载。
详细介绍
db-replicas-views (M17)
只读副本和物化视图可以扩展读取能力,但两者都会引入陈旧数据;如果应用假定数据是最新的,就会悄然破坏正确性。这属于性能与扩展(轴
performance)问题;对应关系型 Escala w12(与 M16/M2/M9 共用)。
检查内容
- 读己之写 — 写入后立即读取同一数据,而该读取可能被路由到尚未追上的异步副本。用户写入一条评论,下一次加载页面时从副本读取,结果评论“消失了”。建议将紧随写入的读取路由到主库,或在需要时使用同步/法定人数读取。
- 物化视图刷新 — 查询
MATERIALIZED VIEW时将其视为实时数据,但该视图仅手动刷新/通过缓慢的 cron 刷新/从未刷新,因此提供的是陈旧数据。标记不带CONCURRENTLY的REFRESH MATERIALIZED VIEW(会锁定读取操作),以及没有可见刷新计划的视图。
评分/轴
仅计入性能(关系型 Escala w12;在适用情况下,副本/视图问题对应 NoSQL 配置文件中的 Query/Escala 类别)。
Tier-0(静态)
检测副本路由配置(ORM/驱动程序中的读写分离、多条连接 URL)、针对同一实体的写入→读取序列、CREATE MATERIALIZED VIEW DDL,以及任何 REFRESH 调用(以及是否使用 CONCURRENTLY)。实际的复制延迟和刷新时效属于运行时信息;Tier-0 的结果为 needs_api(绝不会静默通过)。
Tier-1/2(验证查询,Postgres)
-- replication lag (Tier-1, on primary):
SELECT client_addr, state,
pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replay_lag_bytes
FROM pg_stat_replication;
-- matview presence + populated state:
SELECT matviewname, ispopulated FROM pg_matviews;
方法 query_stat / schema_introspect。可测量的 replay_lag_bytes 可将读己之写风险确认为 established;物化视图的刷新时效需要应用的刷新计划或 Tier-2 观测——若缺少这些信息,陈旧数据状态为 directional。
发现项
按 schema/finding.schema.json 输出发现项。示例:
M17.comments.read_your_writes_on_replica— 写入后立即进行的读取被路由到副本 (severity:3、warn,轴为performance,静态置信度为directional/Tier-1 置信度为established,fixable: proposed— 将读取路由到主库)。M17.dashboard.matview_no_refresh— 物化视图没有可见的刷新计划 (severity:2、warn,directional/needs_api,fixable: advisory)。M17.dashboard.refresh_blocks_readers—REFRESH MATERIALIZED VIEW不带CONCURRENTLY(severity:2、warn,根据 DDL 确认为established,fixable: proposed)。
每项发现:evidence.observed 会逐字引用路由配置/视图 DDL/目录行;
verification.reproduce 是上方引用 $DATABASE_URL 的查询;expected_impact 按区间给出
并标注置信度(不使用没有依据的百分比)。
诚实原则
- 对大多数分析/报表读取而言,副本数据陈旧是符合设计的;仅当读取路径需要读取其自身刚写入的数据时才标记,不要笼统地声称“副本很危险”。
- 绝不引用无法测量的延迟数字或陈旧读取概率;要将延迟声明为
established,必须有 Tier-1 依据,否则应标为directional。 REFRESH … CONCURRENTLY要求物化视图上存在唯一索引;请在修复预览中注明这一前提。路由/刷新更改只能标记为proposed/advisory,绝不能标为auto。