2

リモートマシン(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ファイルの最後の2行は次のとおりです。

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

そして、listen_addressesはpostgresql.confファイルで'*'に設定されています(そしてコメントされていません)。

他のアカウントやデータベースにリモートでアクセスできない理由はありますが、リモートマシンにSSH接続するとアクセスできますか?

4

1 に答える 1

0

まず第一に、あなたの提案に対してクレイグ・リチャードに感謝します、そして実際あなたは両方とも正しかったです。何が起こったのか:を使用してPostgreSQLをインストールし、 http://www.postgresql.org/docs/9.1/interactive/runtime.htmlsudo apt-get install postgresql-9.1でサーバーを構成するための指示に従いました。残念ながら、私が気づかなかったのは、apt-getインストールプロセスがデフォルトでpostgresqlデータベースクラスターを作成することでした。そのため、新しいクラスターを作成する手順に従うと、2つのクラスターがありました。1つは/ var / lib /postgresql/にあります。 9.1/mainと/usr/ local / pgsql / dataにあり、ローカルとリモートでログインしたときに、さまざまなクラスターと対話していました。2番目のクラスターを削除すると、問題は解決し、リモートで接続できました。

このプロセスからの私のポイント:apt-getを使用してpostgresqlをインストールし、postgresqlマニュアルの指示に従う場合、インストールプロセスはデフォルトでpostgresオペレーティングシステムユーザーを作成し、デフォルトでデータベースクラスターも作成することに注意してください。したがって、マニュアルのこれらの手順を実行する必要はありません。誰かが次のようなエラーを経験した場合:

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

そのユーザーまたはデータベースを作成したことを確認したら、正しいデータベースクラスターで操作していることを確認してください。

再度、感謝します!

于 2012-07-30T16:00:46.587 に答える