Запуск автономного экземпляра postgres вместе с существующими серверами

#postgresql

Вопрос:

Я разрабатываю приложение, которое в значительной степени полагается на Postgres. В настоящее время пользователи должны настроить Postgres и поместить учетные данные базы данных в конфигурационный файл, который читает мое приложение.

В этом подходе есть пара проблем, которые меня не совсем устраивают:

  • Я не могу диктовать, какую версию Postgres использовать (им может понадобиться определенная версия для какой-то другой задачи).
  • Пользователи должны установить отдельную часть программного обеспечения, прежде чем они смогут использовать мое приложение.
  • Им потребуется предоставить учетные данные базы данных для моего приложения (которые они могут отозвать позже).
  • Потенциально проблемы с конфликтами имен баз данных

Можно ли запустить автономную версию Postgres, т. е. запустить ее из папки и, возможно, вместе с другой версией Postgres на той же машине?

Мое текущее решение состоит в том, чтобы запустить его как экземпляр docker, это позволяет избежать любых конфликтов с данными и разрешениями, но не решает проблему, связанную с необходимостью первой установки пользователями отдельного программного обеспечения.

Приложение полностью автономно и является однопользовательским, и пользователю никогда не требуется напрямую взаимодействовать с базой данных, даже такие действия, как создание резервных копий, выполняются приложением, которое внутренне вызывает pg_dump

(Я бы подумал, что нечто подобное возможно для людей, разрабатывающих Postgres, — я не могу себе представить, что они постоянно устанавливают и полностью удаляют программное обеспечение из своей системы, чтобы что-то протестировать.)

Комментарии:

1. Конечно. Просто поместите двоичные файлы туда, куда вы хотите, установите настройки так, как вы хотите, и запустите его, когда захотите. Там нет ничего особенного

2. Если вы хотите запустить другой сервер PostgreSQL на той же машине, вам следует изменить номер порта в postgresql.conf файле и указать приложению подключиться к этому порту (по умолчанию вместо 5432).

3. Ваше последнее предложение сбивает с толку. Как разработчик PostgreSQL, как вы думаете, какие вещи я тестирую, которые требуют, чтобы у меня не был установлен PostgreSQL? Если мне по какой-то причине нужна чистая коробка (что я иногда делаю, но почти никогда, когда на мне шляпа разработчика PostgreSQL), я просто запускаю ее на AWS.

4. @Bruno Вместо выбора другого порта вы не могли указать никаких адресов прослушивания и использовать исключительно сокет unix-домена. Тогда не имело бы значения, является ли порт тем же самым, если каталог сокетов отличается. Раньше это не работало в Windows, но с недавнего времени я понимаю, что это работает.

5. @jjanes Вы могли бы, но имя сокета основано на номере порта ( .s.PGSQL.nnnn ), но вы действительно можете изменить unix_socket_directories его, чтобы он находился в другом месте. Похоже, вы правы, в Windows появился патч для AF_UNIX поддержки сокетов, я не уверен, что он вошел в выпуск PostgreSQL 13 (не пробовал).