Возможны ли независимые экземпляры Postgresql

Я хочу установить postgresql для использования в качестве бэкэнд в приложении Windows.

Кажется, что это не проблема, если postgresql еще не установлен в системе.

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

Я считаю, что можно установить полностью независимые экземпляры sql-сервера, но возможно ли это для postgresql?

BTW: Если в командной строке содержится правильный суперкарт, тогда установка просто заменяет существующую установку и игнорирует параметры, такие как --prefix и т.д. Я использовал init db для создания нового кластера баз данных перед выполнением второй установки, но этот новый кластер был проигнорирован?

Ответ 1

В общем случае вы можете иметь несколько экземпляров независимых PostgreSQL. Строго говоря, кластер базы данных с отдельным:

  • каталог данных
  • (например, postgresql.conf, pg_hba.conf)
  • прослушивание порта TCP/UDP (по умолчанию 5432 +)
  • владелец и роль суперпользователя
  • языковой стандарт и стандартная кодировка
  • Файл журнала
  • Процесс сервера postmaster (в Windows postgres.exe)

Отличным примером является Debian с простой в использовании инфраструктурой postgresql-common (pg_ctlcluster, pg_lsclusters, pg_createcluster, pg_dropcluster, включен протокол SSL, журнал вращение и т.д.).

EDIT:

Мне было довольно легко установить второй, третий и т.д. экземпляр того же версированного PostgreSQL под Windows с установщик EnterpriseDB, нет нужно использовать initdb и pg_ctl (при условии 64-битной установки, возможно, вам нужно использовать Program Files (x86) для 32-разрядной установки):

  • Откройте cmd с правами администратора (Запуск от имени администратора)
  • Выполнить: cd "C:\Program Files\PostgreSQL\9.0\installer\server"
  • Создайте новый кластер баз данных (нажмите Enter на каждом шаге): initcluster.vbs postgres postgres 12345 "C:\Program Files\PostgreSQL\9.0" "C:\Program Files\PostgreSQL\9.0\data2" 5433 DEFAULT
  • Зарегистрируйтесь как служба Windows: startupcfg.vbs 9.0 postgres 12345 "C:\Program Files\PostgreSQL\9.0" "C:\Program Files\PostgreSQL\9.0\data2" postgresql-x64-9.0-2
  • Запустите вновь созданный сервис postgresql-x64-9.0-2 с помощью services.msc и у вас есть второй сервер

Измените 12345 на свой пароль, указанный при установке PostgreSQL. Вам не нужно использовать каталог data2, использовать то, что вам нравится (но, конечно, не существующая директория data).

Ответ 2

В Windows 7 у меня был успех после этих шагов. Вам понадобится утилита PsExec.exe, доступная в Sysinternals Suite. Я предполагаю, что путь к Sysinternals Suite и путь к папке bin вашей существующей установки PostgreSQL находятся в переменной среды PATH.

  • Откройте окно cmd.exe и введите следующую команду, чтобы открыть приглашение в качестве учетной записи сетевой службы.

    psexec -i -u "nt authority\network service" cmd.exe

  • У учетной записи Network Service не будет доступа к вашему PATH, поэтому cd 'C:\PostgreSQL\9.3\bin' и затем введите следующую команду для инициализации каталога данных для вашего нового экземпляра. Я назвал свой "data2". Он не обязательно должен находиться в каталоге postgres, но там, где находится каталог данных по умолчанию, поэтому это разумный выбор.

    initdb "C:\PostgreSQL\9.3\data2"

  • Отредактируйте C:\PostgreSQL\9.3\data2\postgresql.conf, чтобы port = 5433 (экземпляр по умолчанию использует 5432, и у вас не должно быть двух экземпляров на одном и том же порту)

  • Оставьте запрос командной строки Network Service и в своем стандартном запросе введите следующую команду для регистрации новой службы. Здесь я назвал свой новый экземпляр "pg_test"

    pg_ctl register -N pg_test -U "nt authority\network service" -D "C:\PostgreSQL\9.3\data2"

  • Для запуска службы выполните следующую команду.

    net start pg_test

  • Роль владельца базы данных будет "YOURMACHINENAME $". Если вы хотите изменить это на стандартные "postgres", вы должны сначала создать новую роль суперпользователя, которая может переименовать владельца. В командной строке введите следующее, чтобы создать этого суперпользователя.

    createuser -s -r -l -i -P -h localhost -p 5433 -U YOURMACHINENAME$ mysuperuser

  • Наконец, подключитесь к серверу с помощью psql (psql -U mysuperuser -h localhost -p 5433 postgres) и введите следующие команды, чтобы переименовать владельца базы данных и добавить пароль.

    ALTER USER "YOURMACHINENAME$" RENAME TO postgres;

    ALTER USER postgres WITH PASSWORD 'yourpassword';

Ответ 3

Что-то вроде этого должно работать (если это не ошибка):

postgresql-9.0.4-1-windows_x64.exe ^
  --mode unattended ^
  --prefix c:\postgres\9.0-second ^
  --servicename postgresql-x64-9.0-second ^
  --serviceaccount postgres2 ^
  --servicepassword <password> ^
  --serverport 5433 ^
  --superaccount postgres ^
  --superpassword <password>

EDIT: после нескольких тестов я считаю невозможным создание разных экземпляров Postgres той же версии с помощью установщика One-click. К сожалению.

OTOH вы всегда можете играть с initdb и pg_ctl и использовать существующую установку для создания нового экземпляра. Это было бы не так просто, как просто запустить установщик, но это выполнимо.