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

PostgreSQL服务器名称、IP及运行实例名称查询方法咨询

获取PostgreSQL服务器信息及实例名称的方法

一、获取PostgreSQL所在服务器的名称与IP地址

PostgreSQL本身没有专门存储服务器系统名称和IP的内置元数据表,得通过调用系统命令或读取系统/配置文件来获取:

1. 服务器系统名称(机器名)

  • Linux/Unix:如果数据库用户有足够权限,直接读取主机名文件:
    SELECT pg_read_file('/etc/hostname') AS server_name;
    
    或者安装plsh扩展后执行系统命令:
    CREATE OR REPLACE FUNCTION get_server_name() RETURNS text AS $$
    #!/bin/sh
    hostname
    $$ LANGUAGE plsh;
    
    SELECT get_server_name();
    
  • Windows:用PL/Python读取系统环境变量(需先安装plpythonu扩展):
    CREATE OR REPLACE FUNCTION get_server_name() RETURNS text AS $$
    import os
    return os.environ['COMPUTERNAME']
    $$ LANGUAGE plpythonu;
    
    SELECT get_server_name();
    

2. 服务器IP地址

要获取PostgreSQL服务监听的IP,直接查询配置项:

SELECT current_setting('listen_addresses') AS listening_ips;

如果要获取服务器所有网络接口的IP,得借助系统命令,比如Linux下用PL/Python执行ip addr:

CREATE OR REPLACE FUNCTION get_server_ips() RETURNS text AS $$
import subprocess
result = subprocess.check_output(['ip', 'addr', 'show'], text=True)
ips = []
for line in result.split('\n'):
    if 'inet ' in line and '127.0.0.1' not in line:
        ips.append(line.strip().split(' ')[1].split('/')[0])
return ', '.join(ips)
$$ LANGUAGE plpythonu;

SELECT get_server_ips();

二、获取服务器上运行的PostgreSQL实例名称

PostgreSQL里的“实例”指独立的数据库集群(每个集群有自己的数据目录、端口),没有内置的全局实例列表,可通过以下方式获取:

1. 当前连接的实例标识

如果是当前连接的实例,查询数据目录路径,通常路径的最后一段就是实例名(比如/var/lib/postgresql/14/test里的test):

SELECT current_setting('data_directory') AS instance_data_dir;

2. 枚举所有实例

  • Linux/Unix:通过查找运行的PostgreSQL进程获取数据目录,或者直接遍历默认的数据目录:
    -- 用plsh获取所有实例的 data_directory
    CREATE OR REPLACE FUNCTION get_all_instances() RETURNS SETOF text AS $$
    #!/bin/sh
    ps aux | grep postgres | grep -E '-D|--data-directory' | awk '{print $11}'
    $$ LANGUAGE plsh;
    
    SELECT get_all_instances();
    
    或者直接读取默认目录下的实例文件夹:
    SELECT pg_ls_dir('/var/lib/postgresql/14/') AS instance_names;
    
  • Windows:查询Windows服务列表里的PostgreSQL服务名(比如postgresql-x64-14-test中的test就是实例名),需先启用xp_cmdshell:
    sp_configure 'show advanced options', 1;
    RECONFIGURE;
    sp_configure 'xp_cmdshell', 1;
    RECONFIGURE;
    
    SELECT * FROM xp_cmdshell('sc query type= service state= all | findstr "NAME:" | findstr "postgres"');
    

注意:以上方法大多需要超级用户权限,且部分扩展(如plpythonu、plsh)需要提前安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:42:50