2012-06-14 63 views
4

在安裝我的應用程序期間,我想創建一個PostgreSQL數據庫以及一些表和函數。如何在沒有用戶輸入/密碼的情況下從命令行執行PostgreSQL腳本文件

爲此,我使用PostgreSQL附帶的PSQL.EXE。我有2個腳本。第一個創建數據庫和相應的用戶有權執行該數據庫上的腳本。我想以這個剛剛創建的用戶身份執行第二個腳本。不幸的是,我找不到一種方法來將該用戶的密碼作爲命令行參數傳遞。省略密碼會導致執行停止並提示用戶輸入密碼,我希望避免這種情況 - 因爲這是在安裝應用程序期間執行的。

是否有任何方式將密碼作爲參數傳遞,或者是否有任何其他命令行工具可以使用?

爲了進一步說明環境。我使用WiX 3.5安裝程序作爲「MSI-Builder」。

回答

5

您不能通過cmdline arg提供密碼(並且不希望因爲這是不安全的做法)。

您可以提供一個.pgpass文件來支持自動腳本驗證。這裏是the docs

+0

在Windows上使用WiX安裝我的應用程序期間,如何能夠提供.pgpass文件?據我瞭解鏈接的文檔,該文件駐留在%APPDATA%\ postgresql \ pgpass.conf並且將只有一個文件,我將不得不更改爲添加已通過第一個腳本創建的用戶。我希望這樣做有一個很好的方法。 – derSteve

+0

@derSteve正如鏈接文檔所說,您可以將pgpass文件放在任何地方,並使用環境變量PGPASSFILE告訴psql(真正的libpq)在哪裏找到它。在unix上,pgpass文件不能是組或世界可訪問的。在Windows上,postgres lib會假設你把它放在一個安全的地方,但不會檢查或抱怨(所以要聰明並控制文件的權限)。 – dbenhur

2

更好的是,如果您有權創建數據庫角色,那麼您已經擁有了所有需要的訪問權限,而無需仔細使用密碼登錄。有第二個腳本相同的用戶爲第一下運作,但包括以下行切換用戶:

set role my_new_user; 

哪裏my_new_user是要運行它作爲角色的名稱。

如果您只是因爲登錄名不同而劃分了腳本,則可以使用它們進入同一個文件,並在中途切換角色。


注: 在你沒有創建數據庫和新的作用,成爲超級用戶,這可能是一個稍微複雜一些關閉的機會。如果是這樣的話,你將需要與創建新角色:

create role my_new_role ... ADMIN my_role; 

哪裏my_new_role是你創建和my_role是當前用戶的角色。然後,當你完成簡單:

revoke my_new_role from my_role; 
相關問題