Как подключиться к PostgreSQL? - PullRequest
0 голосов
/ 22 января 2020

Я хочу подключиться к PostgreSQL серверу с rust-postgres:

let mut client = Client::connect("host=localhost user=postgres", NoTls)?;

Полный пример кода из Client и Config.

Я получаю сообщение об ошибке

Error: Error { kind: Connect, cause: Some(Os { code: 111, kind: ConnectionRefused, message: "Connection refused" }) }

В терминале я могу взаимодействовать с PostgreSQL:

(base) wm@wm:~/Desktop/HP$ sudo -i -u postgres
postgres@wm:~$ psql
psql (10.10 (Ubuntu 10.10-0ubuntu0.18.04.1))
Type "help" for help.

postgres=#

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

1 Ответ

1 голос
/ 23 января 2020

Postgresql поддерживает клиентские соединения через локальные Unix сокеты или через соединения TCP / IP.

В конфигурации по умолчанию, однако, он не будет прослушивать соединения TCP / IP. Он будет прослушивать только соединения с локальным Unix сокетом. Расположение этого сокета определяется переменной конфигурации postgresql unix_socket_directories.

. В своих тестах вы обнаружили, что при запуске инструмента командной строки psql без аргументов ему удается подключиться к база данных. Это работает, потому что psql использует предоставленную клиентскую библиотеку postgresql (libpq), и эта клиентская библиотека по умолчанию подключается к локальному сокету Unix, если имя хоста не указано.

Однако, при использовании rust-postgres вы указываете строку подключения, включая текст "host=localhost". Это указывает rust-postgres установить соединение с IP-адресом localhost. Сбой из-за того, что сервер postgresql не настроен на прослушивание любых IP-интерфейсов и только прослушивает сокет Unix.

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

host=/var/run/postgresql/.s.PGSQL.5432

Приведенное выше значение отражает расположение сокета на моем компьютере, на вашем может отличаться.

Библиотека libpq позволяет полностью исключить параметр host и автоматически подключится к сокету Unix; к сожалению, это не выглядит так, как будто rust-postgres поддерживает это.

В качестве альтернативы, вы можете перенастроить ваш сервер postgresql так, чтобы он прослушивал петлевой IP-адаптер. Это включает установку параметра listen_addresses в файле конфигурации postgresl. См. этот ответ для получения более подробной информации, включая изменения, которые вам нужно будет внести в аутентификацию в pg_hba.conf.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...