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

时间:2012-07-29 18:58:04

标签: postgresql postgresql-9.1

我在远程计算机(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设置为'*'(并取消注释)。

我知道为什么我无法远程访问其他帐户或数据库,但是当我进入远程计算机时我可以这样做吗?

1 个答案:

答案 0 :(得分:0)

首先,感谢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"

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

再次感谢!