gpt4 book ai didi

postgresql - 访问远程 postgresql 服务器上的数据库时出现问题

转载 作者:行者123 更新时间:2023-11-29 12:27:50 26 4
gpt4 key购买 nike

我有一个在远程机器 (Ubuntu 12.04) 上运行的 postgresql (9.1.4) 服务器,但我无法在本地机器上访问它。具体来说,在我的本地机器上,即使我有其他用户名和数据库,我也可以仅使用用户名“postgres”和数据库名称“postgres”访问远程服务器。首先是一些背景信息。在远程机器上使用“psql”调用的交互式环境中,我创建了另一个名为“mxtxdb”的用户,并为该用户设置了密码。我还创建了一个名为“mxtxdb”的数据库。为了证明它们的存在,我登录到远程机器并运行:

sudo su postgres
Password:
postgres@myhost:~$ psql
psql (9.1.4)
Type "help" for help.

postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------+-----------
mxtxdb | | {}
postgres | Superuser, Create role, Create DB, Replication | {}

postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
mxtxdb | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres +
| | | | | postgres=CTc/postgres+
| | | | | mxtxdb=CTc/postgres
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)

此外,虽然仍在远程机器上,但我可以从“mxtxdb”postgresql 帐户访问数据库:

postgres@myhost:~$ psql -h localhost -U mxtxdb -d mxtxdb
Password for user mxtxdb:
psql (9.1.4)
Type "help" for help.

mxtxdb=>

但是当我尝试在本地机器上做同样的事情时,我得到了这个:

psql -h <server's address> -U postgres -d "postgres" -p 5432
Password for user postgres:
psql (9.1.4)
Type "help" for help.

postgres=#

psql -h <server's address> -U "postgres" -d "mxtxdb" -p 5432
Password for user postgres:
psql: FATAL: database "mxtxdb" does not exist

psql -h <server's address> -U "mxtxdb" -d "mxtxdb" -p 5432
Password for user mxtxdb:
psql: FATAL: role "mxtxdb" does not exist

我的 pg_hba.conf 文件的最后两行是:

host    all             mxtxdb          0.0.0.0/0               trust
host all postgres 0.0.0.0/0 trust

并且 listen_addresses 在 postgresql.conf 文件中设置为“*”(并且未注释)。

知道为什么我不能远程访问其他帐户或数据库,但是当通过 ssh 连接到远程机器时我可以吗?

最佳答案

首先,感谢 Craig Richard 的建议,事实上你们都是正确的。事情是这样的:我使用 sudo apt-get install postgresql-9.1 安装了 PostgreSQL,然后按照 http://www.postgresql.org/docs/9.1/interactive/runtime.html 上的服务器配置说明进行操作。 .不幸的是,我没有注意到 apt-get install 过程默认创建一个 postgresql 数据库集群,所以当我按照说明创建一个新集群时,我有两个集群,一个在/var/lib/postgresql/9.1/main 和一个在/usr/local/pgsql/data,当我在本地登录和远程登录时,我正在与不同的集群进行交互。当我删除第二个集群时,问题就解决了,我可以远程连接了。

我从这个过程中得到的收获:当使用 apt-get 安装 postgresql 时,然后按照 postgresql 手册中的说明进行操作,请注意安装过程将默认创建一个 postgres 操作系统用户,并且还将创建一个数据库集群默认情况下,因此不需要执行手册中的那些步骤。如果有人遇到如下错误:

"FATAL: role/database '<name>' does not exist"

当您确定已创建该用户或数据库时,请检查以确保您使用的是正确的数据库集群。

再次感谢!

关于postgresql - 访问远程 postgresql 服务器上的数据库时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11712037/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com