跳到正文
← 使用教程

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

链小知 · 进阶 · 核验 · 依官方文档整理

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

开始前准备

  • 准备自己已有的脱敏配置、日志或状态回执,保留产品版本、对象、字段和日期;缺值不补成成功或零。

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

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

检查结果:数据库类型、运行模式和版本已定位;查询存活未当索引推进。

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

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

检查结果:start部署与schema一一定位,dev默认值未套到生产。

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未混用。

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结果未当索引表结果。

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

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

检查结果:serve的schema与start对应;各链覆盖和null分支有记录,未宣称缺证的切换成功。

怎样确认完成

  • 形成输入、官方判定方法、已知结果和未知分支的对照;方法已核,实际运行与本人权限未验证。

常见错误与边界

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

本教程根据官方资料整理,尚未完成逐步操作验收。界面、支持范围及费用变化时,先核对官方说明。 纯文本版 · 提交纠错依据