我有PSQL运行,并试图得到一个perl应用程序连接到数据库。是否有命令来查找数据库正在运行的当前端口和主机?
当前回答
从终端你可以简单地做一个“postgres列表集群”:
pg_lsclusters
它将返回Postgres版本号、集群名称、端口、状态、所有者以及数据目录和日志文件的位置。
其他回答
选择inet_server_port ();提供服务器的端口。
因为你说你(你自己)已经运行postgresql,我假设:
你在Linux上, 至少有一个帐户具有超级用户权限和/或可以访问postgres角色,以及 (只是为了好玩)您需要在数据库本身的单个事务中访问这两个值
/* SQL代码*/
CREATE TEMP TABLE tmp ( hostname text, port bigint ) ON COMMIT DROP;
COPY tmp FROM PROGRAM $pgm$ printf "$HOSTNAME\t$(i=1 && until [[ "$(psql -U postgres -p $i -qt -c "SELECT 'true'" 2>/dev/null | sed -e '$d' | xargs | tr -d "\n")" == "true" ]]; do i=$(($i+1)) && if [ $i == "65535" ]; then break ; fi ; done && echo $i)"$pgm$ ( format 'text', delimiter '\t' );
SELECT host, port FROM tmp;
将为您提供两者,将$pgm$分隔的代码作为shell脚本执行,并将值返回到服务器端COPY API的stdin。不幸的是,此方法需要一个表目标来调用服务器端shell。
如果您需要能够在没有临时表的情况下调用,即作为函数调用,请尝试在plsh语言中实现上述shell。
到“终端机”输入
service postgres status
在结果中,您可以获得端口的详细信息
在我的例子中,它运行在端口“5432”(默认)上。我用的是CentOS 7。希望这能有所帮助。
我认为PostgreSQL没有提供一个内置的函数来获取服务器的主机名,所以我们可能需要写一个扩展来从服务器获取信息。
我发现有一个PostgreSQL扩展pg-hostname,可以从服务器获取主机名。
当我们安装了扩展,我们可以启用,并通过inet_server_port和主机名函数查询信息。
CREATE EXTENSION hostname;
SELECT hostname(),inet_server_port();
@ a_horis_with_no_name答案的补充。 获取主机名:
SELECT boot_val,reset_val FROM pg_settings WHERE name='listen_addresses';;
推荐文章
- 查询JSON类型内的数组元素
- 获得PostgreSQL数据库中当前连接数的正确查询
- 纬度和经度的数据类型是什么?
- 如何在PostgreSQL中临时禁用触发器?
- 输入文件似乎是一个文本格式转储。请使用psql
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何添加列,如果不存在PostgreSQL?
- 如何在Postgres中获得两个字段的MIN() ?
- 截断Postgres数据库中的所有表
- 如何连接列在Postgres选择?
- 将varchar字段的类型更改为整数:"不能自动转换为整数类型"
- PostgreSQL可以索引数组列吗?
- PostgreSQL:角色不允许登录