跳至内容
附录 B 对象、视图、命令与证据速查

附录 B:对象、视图、命令与证据速查

本附录用于事故前后的快速定位,不替代正文中的机制、权限与风险判断。所有视图和命令 按 PostgreSQL 18 / Pigsty v4.4 基线列出;跨版本先查附录 A

B.1 连接、角色、对象、事务、锁和计划

身份与对象

问题首选证据注意
连到哪个 serverinet_server_addr/port()version()Unix socket 时地址/端口可为 NULL
哪个 database/rolecurrent_database()current_usersession_userrole 是 cluster-wide,database 不是
对象从哪解析SHOW search_pathcurrent_schemas(true)临时 schema 与 $user 会改变结果
是否 recoverypg_is_in_recovery()不能单独证明 route/authority
哪个 schema/objectpg_class + pg_namespaceregclass名称需 schema-qualified
对象 owner/ACLpg_get_userbyid(relowner)\dpaclexplodeowner、membership、grant 要合并判断
extension 已安装pg_extension不等同于 pg_available_extensions

最小 identity:

SELECT
    current_database(),
    current_user,
    session_user,
    inet_server_addr(),
    inet_server_port(),
    pg_is_in_recovery(),
    current_setting('server_version_num');

psql

命令用途
\conninfo当前连接摘要
\l+ / \dn+database / schema
\dtS+ pattern / \diS+ patterntable / index
\d+ schema.object对象定义摘要
\df+ pattern / \dx+function / extension
\du+ / \dprole / ACL
\gdesc只描述结果列,不执行取数
\gxexpanded result

元命令适合交互探索;可审计脚本应同时保存等价 catalog query、目标 identity 和版本。

会话、事务与锁

问题视图/函数关键列
谁在运行/等待pg_stat_activitypidbackend_typestatewait_event_type/eventxact_start
谁阻塞 PIDpg_blocking_pids(pid)结果是 blocker PID 数组
持有哪些锁pg_lockslocktype、对象 identity、modegranted
prepared transactionpg_prepared_xactstransactionpreparedownerdatabase
当前 backend XID/XMINpg_stat_activitybackend_xidbackend_xmin
数据库事务计数pg_stat_databasecounter 受 stats reset 影响

等待链骨架:

SELECT
    a.pid,
    a.application_name,
    a.state,
    a.wait_event_type,
    a.wait_event,
    a.xact_start,
    pg_catalog.pg_blocking_pids(a.pid) AS blocking_pids
FROM pg_catalog.pg_stat_activity AS a
WHERE a.datname = current_database()
ORDER BY a.xact_start NULLS LAST, a.pid;

query text 可能含敏感数据、被截断或因权限不可见。取消/终止 backend 是有副作用动作, 先绑定 exact PID + backend start + application/user/database + expected/stop。

计划与语句

工具能回答不能单独回答
EXPLAINplanner 估算和选路实际时间、cache/I/O
EXPLAIN (ANALYZE, BUFFERS, WAL, SETTINGS)实际执行与资源投影全部并发/OS/历史上下文
pg_stat_statements聚合 workload单次 timeline、未归一化业务语义
auto_explain被采样语句计划完整 workload;有 logging 开销
pg_stat_iobackend/object context I/O 计数device latency 的全部机理

ANALYZE 选项会真的执行语句;对 INSERT/UPDATE/DELETE/MERGE 或 volatile function, 先在可回滚/隔离环境设计,不要对生产写语句直接照抄。正文: ch07ch08ch09ch10

B.2 复制、备份、vacuum、WAL 与容量

复制、权威与 WAL

问题证据关键边界
primary 看 replicaspg_stat_replication一行是 walsender,不自动等于业务健康
standby 看 receiverpg_stat_wal_receiversource/LSN/status
slot 保留什么pg_replication_slotsslot_typeactivexmincatalog_xminrestart_lsn
subscription 状态pg_stat_subscription*logical replication 语义不同
archive 是否推进pg_stat_archiver + repositorycounter 与实际可恢复性不同
WAL 位置差pg_current_wal_lsn() / replay/receive LSNbyte lag 不是 time/RPO
timeline/system idcontrol data、Patroni/DCS、backup metadata不公开 raw identifier 时保存一致性投影

不要手工删除 pg_wal。WAL 撑盘先判 archive、slot、replica、backup/restore owner;见 ch34附录 C

backup 与 restore

证据用途
pgbackrest infobackup set、timeline、size、status
pgbackrest checkstanza/repository/archive 基础检查
backup/repository manifestsource、hash、retention
isolated restore output实际可读性与阶段时间
PostgreSQL control + SQL identity恢复后的 lineage/target
business manifest业务 cutoff 与不变量

“最近 backup success”不等于能在目标 RTO 内恢复,也不证明正确 target。恢复必须在隔离 candidate 验证;见 ch21ch32

vacuum、freeze 与膨胀

问题证据
table maintenancepg_stat_all_tablespg_stat_progress_vacuum
relation ageage(relfrozenxid)mxid_age(relminmxid)
database ageage(datfrozenxid)
blockerspg_stat_activity.backend_xmin、slot xmin/catalog_xmin、prepared xacts
dead/live estimatesn_dead_tupn_live_tup(估算)
relation bytespg_relation_sizepg_total_relation_size
index validity/usepg_indexpg_stat_all_indexesamcheck

膨胀不是单一准确 counter。stats 是估算且可 reset;结合 page/sample/extension 工具时 记录版本、锁和开销。见 ch28

容量与配置

work arrival / concurrency / queue
CPU run and saturation
memory budget and OOM/swap
I/O latency, throughput and queue
connections and per-operation memory
WAL/archive/replication retention
XID/multixact age
data/index/temp/log/backup storage

PostgreSQL:

证据说明
pg_settingsvalue、unit、source、context、pending_restart
pg_stat_databasedatabase workload counters
pg_stat_wal / pg_stat_bgwriter / pg_stat_checkpointerWAL/checkpoint/background write
pg_stat_iobackend/object/context I/O
pg_stat_activitysessions、transactions、wait
pg_stat_progress_*部分长任务进度

同时采样 OS vmstatiostatpidstat/cgroup/host metrics。数据库 counter 不能解释 所有 kernel/device 行为。见 ch25ch27

B.3 每项命令的风险等级、适用范围和验证方式

先填 action card

target:
  environment:
  cluster/system:
  instance/database/object/session:
risk: R0 | R1 | R2
authority:
preconditions:
expected:
stop:
rollback_or_recovery:
before_evidence:
after_evidence:
风险定义示例类别最低要求
R0 观察不改变目标状态identity、catalog/stat、plan without ANALYZEexact context、成本/隐私边界
R1 可逆变更改对象/配置/流量,有验证过的回退fixture DDL、reload、bounded cancel、canaryowner、scope、before/after、rollback
R2 破坏性演练切换、恢复、损坏、重建或可能丢状态PITR、failover、byte fault、host rebuild隔离环境、guard、批准、恢复源、证据保留

风险由目标与后果决定,不由命令长短决定。SELECT 可调用 volatile/security definer function;EXPLAIN ANALYZE 可执行写入;VACUUM FULLREINDEX、DDL 和 playbook 可能持锁、重写、重启或改变路由。

常见动作速查

动作通常风险前置after
catalog/stat queryR0role、database、query costtimestamp、rows、source
ANALYZER1workload/lock/I/O windowstats timestamp、plan
CREATE INDEX CONCURRENTLYR1version、invalid index、disk/WALindisvalid/indisready、plan
parameter reloadR1context/source、rendered diffpg_settings + runtime
restart-required configR1/R2HA/traffic/rollbackidentity、role、availability
cancel exact queryR1PID reuse protection、ownertarget gone、business effect
switchover/failoverR2fence/authority/candidate/client contracttimeline、route、unknown
restore/PITRR2source/target/candidate/isolated destinationlineage、business manifest
pg_rewind/base backupR2system id/timeline/source directionstreaming lineage
checksum fault injectionR2stopped disposable cloneoriginal hash + recovery copy

pg_resetwalzero_damaged_pagesignore_checksum_failure、手改 relation/WAL 不属于 普通速查动作;仅在证据 clone、明确损失和专业升级下考虑,见 ch35

验证模板

before
  exact identity + objective + independent baseline

action
  command/source hash + parameters + exit/stdout/stderr + authority

after
  expected observation + no-regression + business invariant

restore
  temporary artifacts removed or retained by policy

boundary
  what this evidence does not prove

退出码 0、service active 和 dashboard green 都只能证明局部命题。


返回附录目录 · 症状索引 · 实验风险与复位 · 查看全书目录

最后更新于