我有PSQL运行,并试图得到一个perl应用程序连接到数据库。是否有命令来查找数据库正在运行的当前端口和主机?
PostgreSQL默认端口号为5432。运行数据库的主机应该是由您的主机提供商提供的;如果没有指定,我猜它应该是与web服务器相同的主机。通常这将被配置为localhost,假设您的web服务器和数据库服务器在同一主机上。
postgresql端口在postgresql.conf文件中定义。
对我来说,Ubuntu 14.04的目录是:/etc/postgresql/9.3/main/postgresql.conf
里面有一行字:
port = 5432
修改该数字需要重新启动postgresql才能生效。
这个命令将提供postgres端口号
\conninfo
如果Postgres运行在Linux服务器上,也可以使用下面的命令
sudo netstat -plunt |grep postgres
或者(如果是邮政局长送来的)
sudo netstat -plunt |grep postmaster
你会看到类似的东西
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 140/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 140/postgres
在本例中,端口号为5432,也是默认端口号
信贷:链接
到“终端机”输入
service postgres status
在结果中,您可以获得端口的详细信息
在我的例子中,它运行在端口“5432”(默认)上。我用的是CentOS 7。希望这能有所帮助。
SELECT CURRENT_USER usr, :'HOST' host, inet_server_port() port;
这里使用了psql内置的HOST变量
和postgres系统信息函数,文档在这里
可以使用psql \conninfo中的命令 在主机“host_name”上,以用户“user_name”在端口“port_number”连接到数据库“your_database”。
从终端你可以简单地做一个“postgres列表集群”:
pg_lsclusters
它将返回Postgres版本号、集群名称、端口、状态、所有者以及数据目录和日志文件的位置。
要找到端口号,可以运行这个命令(假设您在localhost上)
select setting from pg_settings where name='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。
我认为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';;
我使用这样的解决方案。不需要插件。不需要临时表。仅适用于unix。
select pg_read_file('/etc/hostname') as hostname, setting as port from pg_settings where name='port';
推荐文章
- 将一列的多个结果行连接为一列,按另一列分组
- 使用pgadmin连接到heroku数据库
- 在PostgreSQL中快速发现表的行数
- 更改varchar列的大小为较低的长度
- 如何首次配置postgresql ?
- 数据库性能调优有哪些资源?
- 如何在PostgreSQL中自动更新时间戳
- 当使用JDBC连接到postgres时,是否可以指定模式?
- SQL:从时间戳日期减去1天
- PostgreSQL删除所有内容
- 为什么PostgreSQL要对索引列进行顺序扫描?
- PostgreSQL INSERT ON冲突更新(upsert)使用所有排除的值
- 如何检查一个表是否存在于给定的模式中
- 如何将整数转换为字符串作为PostgreSQL查询的一部分?
- Psycopg2:用一个查询插入多行