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
.