2011-06-05 81 views
10

我想安裝postgresql作爲Windows應用程序的後端。Postgresql的獨立實例可能

這似乎沒有問題,如果postgresql尚未安裝在系統上。

如果postgresql已經安裝,那麼除非命令行參數包含現有安裝的超級密碼等,否則安裝失敗。 由於我可能永遠不會知道任何預先存在的postgresql實例的超級密碼或其他帳戶詳細信息,並且計算機所有者可能不會認爲這會阻止在這種情況下安裝postgresql的任何嘗試。

我相信有可能安裝完全獨立的sql server實例,但postgresql有可能嗎?

BTW: 如果在命令行確實包含正確的superpassword然後安裝似乎只是覆蓋現有的安裝,而忽略像--prefix等參數。 我使用init db在第二次安裝之前創建了一個新的數據庫集羣,但是這個新集羣被忽略了?

+0

如果你覺得有一個錯誤的EnterpriseDB公司的一鍵式安裝程序(也就是你正在使用安裝程序,對吧?),那麼最好要問他們[支持論壇](http://forums.enterprisedb.com/forums/show/9.page)。 – 2011-06-05 09:45:02

+0

@Milen我沒有理由認爲有錯誤。我只是想可能postgresql的獨立實例可能是不可能的,但我希望我錯了,但我會在他們的論壇上看看,謝謝你的信息 – jjb 2011-06-05 09:51:40

+0

根據你的描述(我目前正試圖重現這種行爲),它的聲音像一個錯誤 - 安裝程序不應該忽略你的「--prefix」參數。 – 2011-06-05 10:00:15

回答

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並使用現有安裝創建新實例。這不像啓動安裝程序那麼簡單,但它是可行的。

+0

嗨Milen,它的工作原理是因爲它沒有給出安裝錯誤,但沒有創建--prefix中指定的文件夾,並且根據windows任務管理器中的服務選項卡沒有運行該名稱的服務。所以即使安裝發生了進度條,也沒有什麼變化 – jjb 2011-06-05 10:41:56

+2

不幸的是,我觀察到了同樣的情況 - 如果現有的安裝版本相同,安裝程序將忽略任何選項。 – 2011-06-05 10:46:06

+2

我準備學習如何使用initdb等,但對我來說主要問題是我相信,預先存在的超級密碼的知識似乎是必需的。這將不會提供給我,並且可能不會被客戶知曉。我希望可以用我們自己的超級密碼創建一個獨立的安裝,純粹是爲了我們的應用程序。我想也許SQL-server express可能是更好的選擇,因爲這個。我相信它允許安裝完全獨立的實例 – jjb 2011-06-05 11:18:08

11

一般而言,您可以有多個獨立的 PostgreSQL實例。嚴格來說,它是數據庫集羣與獨立:

  • 數據目錄
  • 配置(例如postgresql.confpg_hba.conf
  • 監聽TCP/UDP端口(默認5432+)
  • 所有者用戶和超級用戶角色
  • 區域設置和默認編碼
  • 日誌文件
  • postmaster服務器進程(在Windows上postgres.exe)

完美做得好的例子是Debian的具有使用方便postgresql-common基礎設施(pg_ctlcluster,pg_lsclusters,pg_createcluster,pg_dropcluster,包括SSL,登錄旋轉等)。

編輯:

,我發現這是相當容易安裝第二,第三等Windows下相同版本的PostgreSQL與EnterpriseDB's installer無需的情況下使用initdbpg_ctl(假設64位安裝,可能需要使用Program Files (x86) 32位安裝):

  1. 打開cmd具有管理員權限(以管理員身份運行)
  2. 執行:cd "C:\Program Files\PostgreSQL\9.0\installer\server"
  3. 創建新的數據庫集羣(按每一步輸入):initcluster.vbs postgres postgres 12345 "C:\Program Files\PostgreSQL\9.0" "C:\Program Files\PostgreSQL\9.0\data2" 5433 DEFAULT
  4. 註冊與Windows服務:使用services.mscstartupcfg.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,你有第二個服務器

變化12345到PostgreSQL安裝期間指定密碼。你不必使用data2目錄,使用任何你喜歡的(但當然不存在data目錄)。

+4

在步驟3的腳本末尾完美添加true。這是在較新的postgres版本中添加的ACL檢查。 – 2014-11-10 12:19:35

+2

第4步後,它並沒有在服務列表中顯示出來,我 – 2015-09-02 13:18:31

+0

@ValentinKuzub:我曾在第4步用'「NT AUTHORITY \網絡服務」'用戶名(空密碼),然後新的實例都出現了在服務列表中。 – Martijn 2016-06-17 09:19:33

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 \ DATA 2 \ 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';