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

PostgreSQL客户端如何获取自身TCP端口号?含程序实现问询

获取PostgreSQL客户端本地端口的方法与问题

一、psql客户端的查询方式

如果以psql作为客户端,可执行以下查询语句获取本地端口:

SELECT * FROM pg_stat_activity WHERE application_name = 'psql';

查看返回结果中的client_port列即可确定本地端口。

二、C风格API客户端的端口获取问题

那么,拥有C风格API访问权限的任意客户端程序,该如何确定连接PostgreSQL服务器(默认端口5432)时使用的本地端口号?

从理论层面来说,该信息在本地Linux系统中必然存在,可通过底层连接句柄获取sockaddr,进而提取sin_port中的本地端口,但实际操作中遇到了困难,寻求相关实现提示。

三、实际需求背景

我的实际需求是无需调用PostgreSQL API即可监控客户端连接状态,提前预警因笔记本休眠等情况导致的连接中断。若能获取本地端口,可借助服务器端的identd(端口113)工具实现监控——该工具无状态的特性使其不受连接中断的影响。

这个问题源于有人反馈长期连接会因ISP更换家用IP而中断,此处暂不讨论公网运行PostgreSQL连接的合理性。我一直对Delphi、Lazarus这类RAD环境长期保持连接的做法不满,因此展开了这项研究。

四、更新进展

目前期望在程序内部实现端口获取,不调用外部工具。排查后发现前期尝试失败的原因:我使用的FPC/Lazarus(Delphi的开源克隆,虽不算流行但仍是实用的4GL开发环境)中,pg_conn结构体的定义已严重过时,需要自行修改以获取laddr字段,或直接对接libpq。

感谢目前收到的回复(尤其那些未否定该需求合理性的回复),后续我会反馈研究进展。

内容的提问来源于stack exchange,提问作者Mark Morgan Lloyd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 05:07:10