我在 RHEL 8.8 服务器上运行 Postgresql 17,并想使用数据库客户端(例如 BeaverDB)从远程终端服务器进行连接。但是,我无法连接(我不断从客户端收到“连接被拒绝:连接”),这似乎是因为我无法让数据库服务器监听外部地址,如 Postgresql 文档中所述:
我启动 psql 并使用以下命令确定相关的配置文件:
select * from pg_settings where name = 'config_file';
我编辑配置文件中的相关行
listen_addresses = 'localhost'
到listen_addresses = '*'
然后我保存并关闭文件。
我使用以下方法重新启动数据库系统
sudo systemctl restart postgresql-17
但我也尝试过重新启动整个机器。
当我再次使用 psql 并输入
select * from pg_settings where name = 'listen_addresses';
它仍然说localhost
。
我知道还有其他几个帖子有非常相似的问题,但没有一个包含解决方案。我在这里做错了什么?
好的,我差不多解决了这个问题。
由于某种原因,配置文件被忽略。但是,您可以使用程序“postgres”设置参数,甚至不必重新启动服务或整个机器。
sudo systemctl stop postgresql-17
/usr/pgsql-17/bin/postgres -D /var/lib/pgsql/17/data
(前提是您的文件夹结构与我的匹配;第一个路径是“postgres”可执行文件的路径,后者是配置文件所在的数据库目录的路径)。/usr/pgsql-17/bin/postgres -c listen_addresses='*'
从命令行执行。这将在运行时更改参数。对我来说,远程连接立即畅通无阻。如果更改
listen_addresses
并postgresql.conf
重新启动服务器不会改变设置,但在启动服务器时在命令行上设置参数可以解决问题,则必须将参数设置在覆盖postgresql.conf
但被命令行参数覆盖的级别上。只剩下一个结论:该参数一定是使用 设置的
ALTER SYSTEM
。要以持久的方式修复该问题,请运行并重新启动 PostgreSQL。
关于这个问题,有几件事需要验证。
一是确认 PostgreSQL 是否使用了来自操作系统的正确配置文件:
另外,日志文件里有什么内容吗?您也可以运行以下命令:
最后,SELinux 是否启用了?
这可以避免从文件中进行更改。