是否可以使用Postgresql的独立实例

时间:2011-06-05 08:29:46

标签: sql-server windows postgresql

我想安装postgresql以用作Windows应用程序的后端。

如果系统上尚未安装postgresql,这似乎没问题。

如果已经安装了postgresql,那么除非命令行参数包含现有安装的superpassword等,否则安装将失败。 因为我可能永远不会知道任何预先存在的postgresql实例的超级密码或其他帐户的详细信息,并且机器所有者可能也不会在这种情况下阻止任何尝试安装postgresql。

我相信可以安装完全独立的sql server实例,但这对postgresql有用吗?

顺便说一句: 如果命令行确实包含正确的超​​级密码,则安装似乎会覆盖现有安装并忽略诸如--prefix等参数。 在进行第二次安装之前,我使用init db创建了一个新的数据库集群,但忽略了这个新的集群?

3 个答案:

答案 0 :(得分:12)

通常,您可以拥有多个独立的 PostgreSQL实例。严格来说,它是具有单独的数据库集群:

  • 数据目录
  • 配置(例如postgresql.confpg_hba.conf
  • 侦听TCP / UDP端口(默认为5432 +)
  • 所有者用户和超级用户角色
  • 区域设置和默认编码
  • 日志文件
  • postmaster服务器进程(在Windows postgres.exe上)

Debian具有易于使用的postgresql-common基础结构(pg_ctlcluster,pg_lsclusters,pg_createcluster,pg_dropcluster,包含SSL,日志轮换等)。

修改

我发现使用EnterpriseDB's installer在Windows下安装相同版本的PostgreSQL的第二个,第三个等实例相当容易,无需使用initdb和{{3 (假设64位安装,可能需要使用Program Files (x86)进行32位安装):

  1. 以管理员权限(以管理员身份运行)
  2. 打开cmd
  3. 执行:cd "C:\Program Files\PostgreSQL\9.0\installer\server"
  4. 创建新的数据库集群(在每个步骤按Enter键):initcluster.vbs postgres postgres 12345 "C:\Program Files\PostgreSQL\9.0" "C:\Program Files\PostgreSQL\9.0\data2" 5433 DEFAULT
  5. 注册为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
  6. 使用postgresql-x64-9.0-2运行新创建的服务services.msc,您有第二台服务器
  7. 12345更改为PostgreSQL安装期间指定的密码。您不必使用data2目录,使用您喜欢的任何内容(但当然不是现有的data目录)。

答案 1 :(得分:4)

在Windows 7上,我成功完成了这些步骤。您需要Sysinternals Suite中提供的PsExec.exe实用程序。我假设在这里,Sysinternals Suite的路径和现有PostgreSQL安装的bin文件夹的路径都在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. 保留Network Service 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';

答案 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您可以随时使用initdbpg_ctl并使用现有安装来创建新实例。它不像启动安装程序那么容易,但它是可行的。