You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tshark抓取PostgreSQL v12流量时SQL参数缺失的解决方法

解决tshark抓取PostgreSQL流量看不到参数值的问题

你看到的$1、$2这类占位符,是因为PostgreSQL使用了预编译语句(Prepared Statements):查询模板和实际参数是分开发送的,pgsql.query字段仅捕获模板部分,参数会在独立的数据包中传输,所以你当前的命令看不到参数值。

调整tshark命令捕获参数

修改命令,添加捕获参数相关的字段,同时保留事务ID或帧号来关联模板和参数:

tshark -f 'tcp dst port 5432' -O PGSQL \
  -d 'tcp.port==5432,pgsql' -T fields \
  -e frame.number \
  -e pgsql.transaction.id \
  -e pgsql.query \
  -e pgsql.prepared_statement.name \
  -e pgsql.param.value
  • frame.number:数据包编号,用于快速定位对应关系
  • pgsql.transaction.id:事务ID,同一个事务内的模板和参数属于同一次查询
  • pgsql.prepared_statement.name:预编译语句的名称,用来精准匹配模板和对应的参数
  • pgsql.param.value:实际的参数值,顺序对应模板中$1、$2的位置

关联模板与参数

输出结果中,同一个pgsql.transaction.id或pgsql.prepared_statement.name对应的pgsql.query(模板)和pgsql.param.value(参数)是一一对应的,参数的顺序和模板里的占位符顺序完全匹配。

更直观的查看方式

如果想要直接看到绑定参数后的完整语句效果,也可以不用-T fields模式,直接让tshark输出完整的协议解码内容:

tshark -f 'tcp dst port 5432' -O PGSQL -d 'tcp.port==5432,pgsql'

或者用Wireshark图形界面打开捕获文件,展开PostgreSQL协议的Parameter Data部分,就能直接看到每个占位符对应的实际参数值。

内容的提问来源于stack exchange,提问作者Patrick Rynhart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:24:25