Возможны ли независимые экземпляры 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
и использовать существующую установку для создания нового экземпляра. Это было бы не так просто, как просто запустить установщик, но это выполнимо.