Как подключиться к удаленной базе данных PostgreSQL в Ubuntu с помощью pgAdmin3?

22

Я пытаюсь настроить базу данных PostgreSQL на машине с Ubuntu. Я хотел бы иметь возможность получить к нему доступ с помощью pgAdmin3 с удаленного компьютера. Как мне это настроить?

Я установил базу данных PostgreSQL в Ubuntu, используя:

sudo apt-get install postgresql

У меня /etc/postgresql/9.1/main/pg_hba.confесть эта строка:

host    all    all    all    password

поэтому он должен принимать соединения со всех IPv4-адресов, а пароли должны отправляться в виде открытого текста (это из соображений разработки).

Если я запускаю эту команду, чтобы увидеть, какие службы работают:

sudo netstat -tulpn

Я вижу эти строки, которые показывают, что PostgreSQL принимает соединения через порт по умолчанию:

tcp    0    0    127.0.0.1:5432    0.0.0.0:*    LISTEN
3561/postgres

Когда я пытаюсь подключиться к этому серверу PostgreSQL с удаленного компьютера в той же локальной сети, я получаю следующее сообщение об ошибке:

Сервер не слушает

Сервер не принимает подключения: отчеты библиотеки подключений

не удалось подключиться к серверу: соединение отклонено. Сервер работает на хосте "10.0.1.7" и принимает соединения TCP / IP через порт 5432?

Я использовал в postgresкачестве имени пользователя и без пароля. Но я также пытался использовать postgresкак пароль. На локальном сервере я могу войти используя:

sudo -u postgres psql postgres

Как я могу подключиться к базе данных PostgreSQL, работающей в Ubuntu, с удаленного компьютера с помощью pgAdmin3?

Jonas
источник

Ответы:

25

Строка в вашем отчете netstat показывает, что база данных только прослушивает localhost: 5432 (127.0.0.1) для входящих соединений tcp.

Proto Recv-Q Send-Q Local Address   Foreign Address  State   PID/Program name
tcp        0      0 127.0.0.1:5432  0.0.0.0:*        LISTEN  3561/postgres

Поэтому он может принимать только локальные tcp-соединения независимо от того, какие разрешения вы указали в pg_hba.conf. pg_hba.conf указывает только разрешенные соединения, но не указывает, какие интерфейсы будет слушать ваш сервис.

Адреса, которые слушает сервер, указываются в GUC «listen_addresses» в postgresql.conf . Если вы хотите, чтобы сервер прослушивал удаленные соединения, вы должны указать IP-адреса, которые вы хотите прослушивать, или *прослушивать все доступные интерфейсы на хосте.

Чтобы ваш сервер postgresql прослушивал все интерфейсы на хосте, у вас должна быть следующая строка в postgresql.conf:

listen_addresses = '*'
dbenhur
источник
но я уже указал allв pg_hba.confфайле ... поэтому он должен принимать подключения со всех IP-адресов.
Джонас
Возможно, я мог бы сказать это более четко. pg_hba не указывает, что слушает база данных, только то, какие соединения по протоколу / db / user / remote-addr разрешены.
dbenhur
Хорошо, как мне это исправить? У вас есть какие-нибудь предложения?
Джонас
1
Вы исправляете это, помещая строку listen_addresses = '*'в postgresql.conf и перезапуская свой сервер.
dbenhur
Спасибо, это решило эту проблему. Теперь у меня просто проблемы с паролем по умолчанию :(
Jonas