我有一个运行在远程机器(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并且在postgresql.conf文件中将listen_addresses设置为'*‘(并且未注释)。
你知道为什么我不能远程访问其他帐户或数据库,但是当ssh进入远程机器时我可以吗?
发布于 2012-07-31 00:00:47
首先,感谢Craig Richard的建议,事实上你们都是正确的。事情是这样的:我使用sudo apt-get install postgresql-9.1安装了PostgreSQL,然后按照在http://www.postgresql.org/docs/9.1/interactive/runtime.html上配置服务器的说明进行操作。不幸的是,我没有注意到的是,apt-get安装过程默认情况下会创建一个postgresql数据库集群,所以当我按照说明创建一个新的数据库集群时,我就有了两个集群,一个在/var/lib/postgresql/9.1/main,另一个在/usr/local/pgsql/data,当我在本地登录而不是远程登录时,我正在与不同的集群交互。当我删除第二个集群时,问题就解决了,我可以远程连接了。
我从这个过程中得到的收获是:当使用apt-get安装postgresql,然后按照postgresql手册中的说明进行安装时,请注意安装过程将在默认情况下创建postgres操作系统用户,也将在默认情况下创建数据库集群,因此不需要执行手册中的这些步骤。如果任何人遇到类似以下的错误:
"FATAL: role/database '<name>' does not exist"当您确定您已经创建了该用户或数据库时,请检查以确保您使用的是正确的数据库集群。
再次感谢!
https://stackoverflow.com/questions/11712037
复制相似问题