适用于 iPhone 的 HeapDeck: Postgres® Monitor

看清 Postgres 里哪里着火了。把火扑灭。

收到 Postgres 告警,笔记本却在家里?HeapDeck 显示谁在阻塞、离 wraparound 还有多远、哪个备库在落后,并可直接在 iPhone 上处理。先止血,回到电脑前再彻底修复。

即将登陆 App Store 上线时邮件提醒

Free · Pro 一次性购买 US$29.99 · PostgreSQL 13–18 · iOS 17+ · iPhone

HeapDeck 的“健康”页面,一台生产服务器处于“严重”状态:最上方是被阻塞的会话,其下依次是连接、最长的查询、wraparound 和复制

看清是谁阻塞了 Postgres 的所有会话。预览之后,再取消根会话。

“锁”页面根据 pg_blocking_pids() 构建阻塞树,并把根阻塞者放在最上方:它的 pid、user@app、持有锁多久、正在运行什么。下方是排队等待的每一个会话。

  • 取消根会话(解除 N 个会话的阻塞)会在确认前显示有多少会话被它卡住,并列出它们的 pid。 PRO
  • HeapDeck 在发送任何操作前都会重新读取阻塞链。如果在做决定期间阻塞链发生了变化,会显示新的数字,需要再次确认。
  • “取消”会停止正在运行的查询。“终止”会结束整个会话并回滚其事务,执行前需输入它的 pid。 PRO
  • 每个等待者都会显示它在等什么,例如 RowExclusiveLock on public.orders。处于 idle in transaction 的根会话会被标出,出现死锁时也会直接标明。
“锁”页面:根阻塞者已在事务中空闲 06:48,阻塞了 4 个会话;下方是“取消根会话(解除 4 个会话的阻塞)”按钮

赶在 Postgres 停止接受写入之前,看清 wraparound 到了百分之几。

“Vacuum 与膨胀”页面以占 2³¹ 的比例显示服务器离事务 ID wraparound 还有多近,并列出按 relfrozenxid 年龄排序的最老的表。到达极限时,PostgreSQL 会拒绝写入,并报错 database is not accepting commands to avoid wraparound data loss。

  • 从 75% 起,页面会直接说明情况,并列出 autovacuum 跟不上的常见原因:长时间未结束的事务、不活跃的复制槽、卡住的工作进程。
  • 每张表的死元组数量、死元组占比,以及上次 vacuum 的时间。
  • 未使用的索引及其占用的空间。HeapDeck 会把 DROP INDEX CONCURRENTLY 复制到剪贴板,但从不自行执行。
  • 可直接在列表中对某张表运行 VACUUM (ANALYZE) 或 ANALYZE。VACUUM FULL 需要先输入表名。 PRO
“Vacuum 与膨胀”页面:事务 ID wraparound 已达 86%,警告“达到 100%,数据库将停止接受写入”,并列出三个可能的原因

经由堡垒机连接 Postgres,沿用角色现有的权限。

HeapDeck 从 iPhone 直接连接服务器,或经由 SSH 堡垒机连接。中间没有 HeapDeck 服务器,也无需账号。如果配置了 AI 助手,它只与所选的服务商通信,使用的是自己的密钥。

  • SSH 隧道支持密码或 Ed25519 密钥。首次连接时即固定堡垒机的主机密钥。
  • TLS 默认使用 sslmode=require。证书的 SHA-256 指纹会被固定;证书一旦变化,连接会暂停,直到做出决定。
  • 密码、密钥和指纹留在此 iPhone 的 Keychain 中,从不同步。打开 App 需要 Face ID。
  • 没有 superuser 权限?HeapDeck 不会只给一个空白页面,而是给出所需的那条 GRANT pg_monitor。
首次连接时弹出的“核对此服务器”面板:显示服务器证书的 SHA-256 指纹,信任之前可与自己的记录比对

Postgres 故障时要打开的那些页面

最前面是 10 张健康指标卡片,每张卡片背后都有一个原生页面,无需在手机键盘上敲 psql。需要时还有 SQL 控制台,每条语句运行前都会先经过检查。

  • 健康

    一个总体判断加 10 张卡片:会话数对比 max_connections、被阻塞的会话、最长的查询、TPS、缓存命中、autovacuum、wraparound、复制、数据库大小和慢查询。页面打开时每 10 秒刷新一次。

  • 活动

    列出 pg_stat_activity 中的每个会话,等待中的排在最前。可按活跃、idle in transaction、超过 10 秒或等待中筛选。在某一行上轻扫,即可取消或终止。

  • 复制与复制槽

    每个备库的回放延迟,按 WAL 阶段细分。列出每个复制槽保留的 WAL;不活跃的复制槽正在占满磁盘时会发出警告。

  • 慢查询

    pg_stat_statements 中开销最大的 300 条语句,可按总耗时、平均耗时、调用次数或行数排序,还能看到此刻正在运行某条语句的会话(PostgreSQL 14+)。

  • 数据与 SQL 控制台

    浏览表、在服务端筛选、沿外键跳转、把一页数据导出为 CSV 或 JSON。控制台在输入时就对每条语句进行分类;在 Free 版中,读取在 BEGIN READ ONLY 中运行。

  • AI 助手 PRO

    解释故障或阻塞链,并起草修复方案,使用自己的 API 密钥或自己的 Ollama。它拿到的是脱敏后的快照,从不自行执行任何操作。

HeapDeck 1.0,使用示例数据;与 iOS 一样提供深色和浅色外观。

Postgres 监控免费。Pro 只需购买一次。

先在自己的生产环境上试用:所有监控页面都无需付费,服务器数量不限。Pro 只需支付一次 US$29.99,即可解锁全部操作。无需订阅,也无需账号。

Free

永久免费

连上生产环境,所有情况一目了然。

  • 全部监控页面:健康、活动、锁、Vacuum 与膨胀、复制、存储、慢查询
  • 不限数量的连接,支持 TLS、SSH 隧道、指纹固定和 Face ID
  • 数据浏览器:服务端筛选、外键跳转、CSV 与 JSON 导出
  • 用于读取的 SQL 控制台,在只读事务中运行
  • SQL 分类器及其说明

Pro

US$29.99

一次性购买

留给需要出手的那一刻。

  • 取消查询和终止会话,取消阻塞链的根会话
  • VACUUM、ANALYZE 以及删除复制槽
  • 控制台中的写入和 DDL,经确认后执行
  • 在有主键的表中插入、编辑和删除行
  • 使用自己的密钥或模型的 AI 助手

在 Free 版中,Pro 操作依然可见,并标有 PRO,可以先了解它们会做什么。在内置的演示故障上,助手可以免费使用。在美国以外的地区,App Store 会以当地货币显示价格。

即将登陆 App Store 上线时邮件提醒

Free · Pro 一次性购买 US$29.99 · PostgreSQL 13–18 · iOS 17+ · iPhone

关于 HeapDeck 与 Postgres 的常见问题

支持 Amazon RDS、Cloud SQL、Azure 或 Supabase 吗?

只要 iPhone 能访问到,HeapDeck 就能连接任何 PostgreSQL 13–18,无论自建还是托管、主库还是备库。如果角色不是 superuser,页面会显示哪些内容被隐藏,以及能解决问题的 GRANT pg_monitor。

托管服务商用来签发证书的根证书并未内置在 iOS 中。对于这类服务,请使用 sslmode=require:连接会加密,HeapDeck 会在首次连接时固定证书指纹。

能连接堡垒机后面的数据库吗?

可以。在连接设置中打开 SSH 隧道,填写堡垒机的主机、用户名,以及密码或密钥。密钥必须是 OpenSSH 格式、未加密的 Ed25519 密钥;堡垒机自身的主机密钥可以是 Ed25519 或 ECDSA,会在首次连接时固定。

1.0 版不支持 RSA 密钥、带口令保护的密钥、一次性验证码或多级跳板机。

凭据或数据会离开 iPhone 吗?

HeapDeck 直接连接服务器,或经由 SSH 堡垒机连接。没有 HeapDeck 服务器,也没有账号。密码、SSH 密钥和已固定的指纹留在本设备的 iOS Keychain 中,不通过 iCloud 同步。

可能离开手机的内容有两类,都由自己控制:发给所配置 AI 服务商的提问(Pro),以及崩溃报告和使用统计——可在首次启动时或在“设置”中关闭。两者都不包含 SQL、表名、主机名、值或凭据。详情见隐私政策。

需要 superuser 吗?

不需要。拥有 pg_monitor 的角色就能使用全部监控页面:GRANT pg_monitor TO your_role;。没有它,HeapDeck 也能工作,并会标出服务器对该角色隐藏了哪些内容。取消其他角色的会话需要 PostgreSQL 的常规权限,例如 pg_signal_backend。

取消还是终止:该用哪个?

取消(pg_cancel_backend)会停止会话正在运行的查询,会话及其事务保持打开。终止(pg_terminate_backend)会结束整个会话,并回滚其事务。

处于 idle in transaction 的会话没有正在运行的查询,所以取消对它不起作用:要释放它持有的锁,得用终止。终止阻塞链的根会话,或终止“生产”连接上的会话之前,HeapDeck 会要求输入 pid。

HeapDeck 会弄坏数据库吗?

Free 版完全不写入:控制台的读取在 BEGIN READ ONLY … ROLLBACK 中运行。在 Pro 版中,每次写入都要依次通过四道检查:Pro、连接的“只读”开关、SQL 分类器,以及手动确认。

VACUUM FULL、删除复制槽和终止阻塞链的根会话之前,需要先输入表名、复制槽名称或 pid。标记为“生产”的连接会显示 PROD 徽标,确认也更严格。

为什么不直接 SSH 上去跑 psql?

当然还可以。HeapDeck 为故障中的每个问题都准备了专门的页面,不必在手机键盘上敲查询:谁在阻塞、有多少会话在等、根会话在运行什么、离 wraparound 还有多远、哪个复制槽占着 WAL。执行操作前,它会重新读取阻塞链,并请求确认。

AI 助手能看到什么?

所询问页面的脱敏快照。其中从不包含主机、端口、密码和密钥,值会变成 $1 这样的占位符。使用云端模型时,数据库名、表名和列名默认隐藏,回答返回后再在手机上还原。

请求从 iPhone 发往所选的服务商,使用自己的密钥(Anthropic、OpenAI、OpenRouter、Z.ai),或发往自己的 Ollama 或兼容 OpenAI 的服务器。“模型看到的内容”会在发送前显示确切的文本。助手属于 Pro 功能,从不自行运行 SQL。

需要订阅吗?

不需要。监控免费,Pro 只需一次性购买 US$29.99,与 Apple ID 绑定。没有账号,也没有试用期倒计时。

出问题时会发告警吗?

不会。HeapDeck 只在打开时工作,不做后台监控。现有的告警系统照常保留:HeapDeck 是收到告警后打开的那个页面。

能在 iPad 上用吗?

HeapDeck 专为竖屏 iPhone 设计。在 iPad 上,它以 iPhone 兼容模式运行。

Postgres 故障指南

深夜把人叫醒的那些问题,每个一页:手动检查用的 SQL,以及 HeapDeck 中的显示。指南为英文。

博客文章

全部文章

在下一次 Postgres 故障之前,先装到手机上。

添加服务器、固定它的证书,所有监控页面即可免费使用。Pro 留给需要出手的那个夜晚。

即将登陆 App Store 上线时邮件提醒

Free · Pro 一次性购买 US$29.99 · PostgreSQL 13–18 · iOS 17+ · iPhone