我想安装postgresql以用作Windows应用程序的后端。
如果系统上尚未安装postgresql,这似乎没问题。
如果已经安装了postgresql,那么除非命令行参数包含现有安装的superpassword等,否则安装将失败。 因为我可能永远不会知道任何预先存在的postgresql实例的超级密码或其他帐户的详细信息,并且机器所有者可能也不会在这种情况下阻止任何尝试安装postgresql。
我相信可以安装完全独立的sql server实例,但这对postgresql有用吗?
顺便说一句: 如果命令行确实包含正确的超级密码,则安装似乎会覆盖现有安装并忽略诸如--prefix等参数。 在进行第二次安装之前,我使用init db创建了一个新的数据库集群,但忽略了这个新的集群?
答案 0 :(得分:12)
通常,您可以拥有多个独立的 PostgreSQL实例。严格来说,它是具有单独的数据库集群:
postgresql.conf
,pg_hba.conf
) Debian具有易于使用的postgresql-common
基础结构(pg_ctlcluster,pg_lsclusters,pg_createcluster,pg_dropcluster,包含SSL,日志轮换等)。
修改强>
我发现使用EnterpriseDB's installer在Windows下安装相同版本的PostgreSQL的第二个,第三个等实例相当容易,无需使用initdb
和{{3 (假设64位安装,可能需要使用Program Files (x86)
进行32位安装):
cmd
cd "C:\Program Files\PostgreSQL\9.0\installer\server"
initcluster.vbs postgres postgres 12345 "C:\Program Files\PostgreSQL\9.0" "C:\Program Files\PostgreSQL\9.0\data2" 5433 DEFAULT
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
目录)。
答案 1 :(得分:4)
在Windows 7上,我成功完成了这些步骤。您需要Sysinternals Suite中提供的PsExec.exe实用程序。我假设在这里,Sysinternals Suite的路径和现有PostgreSQL安装的bin文件夹的路径都在PATH环境变量中。
打开cmd.exe窗口并输入以下命令以打开网络服务帐户的提示。
psexec -i -u "nt authority\network service" cmd.exe
网络服务帐户无法访问您的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 cmd提示符并在标准提示符中输入以下命令以注册新服务。在这里,我将我的新实例命名为“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';
答案 2 :(得分: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>
编辑:经过几次测试后,我认为使用一键式安装程序无法创建相同版本的不同Postgres实例。遗憾。
OTOH您可以随时使用initdb
和pg_ctl
并使用现有安装来创建新实例。它不像启动安装程序那么容易,但它是可行的。