Возможны ли независимые экземпляры Postgresql - PullRequest
10 голосов
/ 05 июня 2011

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

Это не проблема, если postgresql еще не установлен в системе.

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

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

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

Ответы [ 3 ]

12 голосов
/ 07 июня 2011

В общем случае вы можете иметь несколько независимых экземпляров 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-разрядной установки):

  1. Открыть cmd с правами администратора (Запуск от имени администратора)
  2. Выполнить: cd "C:\Program Files\PostgreSQL\9.0\installer\server"
  3. Создать новый кластер базы данных (нажимайте Enter на каждом шаге): initcluster.vbs postgres postgres 12345 "C:\Program Files\PostgreSQL\9.0" "C:\Program Files\PostgreSQL\9.0\data2" 5433 DEFAULT
  4. Зарегистрироваться в качестве службы 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
  5. Запустите только что созданный сервис postgresql-x64-9.0-2, используя services.msc, и у вас будет второй сервер

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

4 голосов
/ 31 января 2014

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

  1. Откройте окно cmd.exe и введите командуСледующая команда открывает запрос в качестве учетной записи сетевой службы.

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

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

    initdb "C:\PostgreSQL\9.3\data2"

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

  4. ОставьтеПриглашение сетевой службы cmd и в стандартном приглашении введите следующую команду, чтобы зарегистрировать новую службу.Здесь я назвал мой новый экземпляр "pg_test"

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

  5. Запустите следующую команду, чтобы запустить службу.

    net start pg_test

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

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

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

    ALTER USER "YOURMACHINENAME$" RENAME TO postgres;

    ALTER USER postgres WITH PASSWORD 'yourpassword';

3 голосов
/ 05 июня 2011

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

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>

РЕДАКТИРОВАТЬ : после нескольких тестов я считаю, что невозможно создать разные экземпляры Postgres длята же версия, используя установщик в один клик.Извините.

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

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