#postgresql #ubuntu
#postgresql #ubuntu
Вопрос:
сначала извиняюсь. На крутой кривой обучения больше похоже на стену и будет многословным и лишенным жаргона, но слишком старым, чтобы изменить это сейчас. Я пытаюсь получить доступ к базе данных Postgresql-13 (с расширениями postgis-3) с компьютера, отличного от того, на котором он размещен. Прежде чем делать что-либо, кроме установки, создания и использования файла пространственных данных, это частичный дамп экрана из
sudo netstat -ltpn
Прото | Recv-Q | Отправить-Q | Локальный адрес | Внешний адрес | Состояние | PID / Имя программы |
---|---|---|---|---|---|---|
tcp | 0 | 0 | 127.0.0.1:5432 | 0.0.0.0:* | СЛУШАТЬ | 993/postgres |
… и база данных доступна из pgadmin4 на компьютере Ubuntu 20.04, на котором она размещена. Я также могу подключиться к базе данных в QGIS на том же компьютере Ubuntu через 127.0.0.1 и порт 5432. В этом нет ничего особенного, кроме знания, что это работает. Что я хочу сделать, так это подключиться к этой базе данных с любого компьютера, на котором работает QGIS (или другая платформа ГИС, которая может использовать postgis).
Правила переадресации портов на маршрутизаторе установлены для 80, 8080 и 5900, чтобы указывать на 10.0.0.55, который является IP-адресом для Ubuntu 20.04, на котором размещен. У меня есть динамический DNS, указывающий IP-адрес маршрутизатора, чтобы присвоить ему имя http://blah.blah.net (на самом деле это не так, но близко).
pgadmin4 установлен и настроен для запуска на сервере, и я могу получить доступ к базе данных через pgadmin4 с хоста или любого другого компьютера с помощью http://blah.blah.net/pgadmin4 . Не уверен, что я правильно понял эту конфигурацию, но она работает. Geoserver также бесперебойно работает на Tomcat9, доступном из любого места через http://blah.blah.net:8080/Geoserver/web /. И причудливый интерфейс в процессе создания на http://blah.blah.net .
Затем я выполнил следующие изменения для двух файлов .conf etc/postgresql/13/main
, которые уже хорошо отмечены и задокументированы…
host all all 0.0.0.0/0 md5
в pg_hba.conf
а также …
listen_addresses='*'
(и удалил начальный #)
port = 5432
(уже было)
в postgresql.conf
Затем перезапустил postgres с помощью …
sudo service postgresql restart
… а затем порт 5432 полностью исчезает, и база данных становится недоступной из любого места. Даже главный компьютер. Проверено, что postgresql был запущен с…
sudo systemctl status postgresql
… что, похоже, и есть. Но я ничего не получаю от QGIS или pgadmin4. Даже с хост-компьютера.
У меня много вопросов, но самый очевидный — я что-то упустил? Не уверен, нужно ли мне правило на маршрутизаторе для порта 5432 — попробовал сделать это аналогично приведенным выше правилам, но это ничего не изменило. Ценю любую помощь. Приветствия … R
Ответ №1:
Локальный адрес в netstat
выходных данных:
127.0.0.1:5432
указывает, что PostgreSQL прослушивает только интерфейс обратной связи. Поскольку вы изменились listen_addresses
postgresql.conf
, я делаю вывод, что вы забыли перезапустить PostgreSQL.
Для подтверждения запустите этот запрос:
SELECT setting, pending_restart
FROM pg_settings
WHERE name = 'listen_addresses';
Он должен либо показать неправильное значение (если вы не перезагружали или вообще изменили неправильный файл), либо показать pending_restart
как TRUE
(если вы перезагрузили, но не перезапустили).
Комментарии:
1. Спасибо, это помогло. Я выполнил запрос и получил localhost и false . Не неожиданно. Затем я решил изменить файлы conf отдельно. Сначала postgresql.conf с listen_addresses = ‘*» . Перезапустите службу, и она все еще была подключена к pgadmin4. Прослушивание 0.0.0.0/5432. Повторный запуск запроса выдал * и false . Перейдите к файлу pg_hba.conf и измените host all all 127.0.0.1/32 md5 на host all all 0.0.0.0 / 0 md5 и перезапустите. Теперь соединение потеряно, и 5432 не отображается в netstat. Вот в чем проблема. Теперь вопрос, если вы не возражаете — как мне заставить его снова прослушать 0.0.0.0: 5432?
2. Он будет отображаться, если не будет ошибки привязки адреса, которая будет отображаться в файле журнала PostgreSQL.
3. Из этого следует, что с pg_hba.conf что-то не так. Я вернул ему значение chown root:root (путь) после завершения модов. AEST [21154] LOG: прослушивание IPv4-адреса «0.0.0.0», порт 5432 AEST [21154] LOG: прослушивание IPv6-адреса «::», порт 5432 AEST [21154] LOG: прослушивание сокета Unix «/var/run/postgresql/.s.PGSQL.5432» AEST [21154] ЖУРНАЛ: не удалось открыть файл конфигурации «/etc/postgresql/13/main/pg_hba.conf»: отказано в разрешении AEST [21154] ФАТАЛЬНЫЙ: не удалось загрузить pg_hba.conf AEST [21154] ЖУРНАЛ: система базы данных отключена pg_ctl: не удалось запустить сервер
4. изменение владельца pg_hba.conf на пользователя postgres исправило это.