# Ponder查询为什么还是旧部署？核schema、views与serve读取目标

整理：链小知（AI 辅助）
资料核对日期：2026-10-14
引用地址：https://lianxiaozhi.com/tools/guides/ponder-schema-views-serve-query-target-check
难度：进阶
核验方式：官方文档整理，未执行真实账户操作

把索引写入部署与只读查询副本分开，核回填就绪后views实际指向的表。

## 使用工具
- [Ponder](https://lianxiaozhi.com/tools/ponder) · [官方入口](https://ponder.sh/)

## 前置条件
- 准备自己已有的脱敏配置、日志或状态回执，保留产品版本、对象、字段和日期；缺值不补成成功或零。

## 1. 先核数据库与运行模式

PGlite默认在同一Node进程及.ponder目录，适合本地开发；生产须Postgres。记录DATABASE_URL所指对象但不抄凭据，并核mode：dev本地热重载，start生产索引，serve仅Postgres HTTP服务且不索引。不要把一个仍响应查询的serve当正在推进链高的start。

核对结果：数据库类型、运行模式和版本已定位；查询存活未当索引推进。
依据：[Ponder：数据库选择与部署schema隔离](https://ponder.sh/docs/database)
依据：[Ponder：dev/start/serve与数据库命令](https://ponder.sh/docs/api-reference/ponder/cli)

## 2. 核每个start部署自己的schema

以DATABASE_SCHEMA或--schema定位实际部署；并发Ponder索引部署不能共用schema。dev默认public，start无默认须显式指定；start创建的表不会自动删除。查旧记录时不能只按公共库名判断读的是最新部署，缺部署schema映射保持未知。

核对结果：start部署与schema一一定位，dev默认值未套到生产。
依据：[Ponder：数据库选择与部署schema隔离](https://ponder.sh/docs/database)
依据：[Ponder：views发布、就绪与server-only模式](https://ponder.sh/docs/production/self-hosting)

## 3. 稳定views只在发布条件满足后换目标

views pattern用稳定schema代理具体部署表。ponder db create-views可手动创建/更新，start --views-schema会在backfill完成、部署ready时自动做；缺执行回执或views定义时不能据新进程启动就说指针已切换。/health立即200只说明进程存活，/ready要所有链到实时后200、回填中503；按已有材料核切换时点。

核对结果：稳定views schema、目标部署schema、回填与发布回执对应；health与ready未混用。
依据：[Ponder：views发布、就绪与server-only模式](https://ponder.sh/docs/production/self-hosting)
依据：[Ponder：dev/start/serve与数据库命令](https://ponder.sh/docs/api-reference/ponder/cli)

## 4. 只读查询按目标schema解释

Direct SQL支持SELECT，不应INSERT/UPDATE/DELETE Ponder表，也不支持表trigger。显式schema.table、search_path或Drizzle setDatabaseSchema都可能决定目标，须以原配置核；API中ponder:api的db为只读Drizzle，publicClients另按ponder.config.ts transports做RPC，链上getBalance不等数据库索引余额。

核对结果：SQL schema路径与API数据来源明确；外部RPC结果未当索引表结果。
依据：[Ponder：Direct SQL只读和目标schema](https://ponder.sh/docs/query/direct-sql)
依据：[Ponder：自定义API读取数据库与RPC边界](https://ponder.sh/docs/query/api-endpoints)

## 5. 核查询副本与按链覆盖后收口

serve需与目标start同schema，可以多个serve副本；start负责索引，查询负载分离并不会替它补旧范围。按/status或GraphQL _meta.status看每条chain id/block，block=null表示backfill尚未完成，不能填0；缺实例目标/当前views映射/状态材料时不认定旧结果已经消除。

核对结果：serve的schema与start对应；各链覆盖和null分支有记录，未宣称缺证的切换成功。
依据：[Ponder：views发布、就绪与server-only模式](https://ponder.sh/docs/production/self-hosting)
依据：[Ponder：dev/start/serve与数据库命令](https://ponder.sh/docs/api-reference/ponder/cli)
依据：[Ponder：按链status与backfill的null](https://ponder.sh/docs/advanced/observability)

## 常见错误
- 稳定schema名不证明views已指最新表；使用同库不同schema时尤其要核实际目标。
- db prune会删除不活动部署的表/函数/schema，属于维护删除，不能拿来替代本篇只读排错。

## 完成检查
- 形成输入、官方判定方法、已知结果和未知分支的对照；方法已核，实际运行与本人权限未验证。

## 相关知识

## 官方依据
- [Ponder：数据库选择与部署schema隔离](https://ponder.sh/docs/database)
- [Ponder：views发布、就绪与server-only模式](https://ponder.sh/docs/production/self-hosting)
- [Ponder：dev/start/serve与数据库命令](https://ponder.sh/docs/api-reference/ponder/cli)
- [Ponder：Direct SQL只读和目标schema](https://ponder.sh/docs/query/direct-sql)
- [Ponder：自定义API读取数据库与RPC边界](https://ponder.sh/docs/query/api-endpoints)
- [Ponder：按链status与backfill的null](https://ponder.sh/docs/advanced/observability)
