2017-07-16 87 views
0

我正在處理的項目使用一個sql腳本,它運行幾個命令作爲postgres的管理員用戶;如命令:相同的postgres腳本在不同的機器上使用不同的用戶?

psql -U postgres -c 'CREATE DATABASE azara WITH OWNER azara' 

我的同事們都在OSX和其管理的Postgres用戶在默認情況下「Postgres的,而我在nixos和我的管理Postgres的用戶是默認「根」。因此,腳本中的此命令需要與我的計算機上的不同,以代替

psql -U root -c 'CREATE DATABASE azara WITH OWNER azara' 

處理這種差異的最佳方法是什麼?

也許最簡單的方法是在我的機器上創建一個'postgres'用戶來運行腳本。但是這似乎是一種黑客攻擊,我想知道是否有一種方法可以設置腳本來確定要使用哪個用戶。

我考慮使用腳本可以用作變量的postgres environment variable。但命令

$ echo $PGUSER 

返回任何內容和環境變量PGUSER似乎沒有被默認設置,這樣看來,我的同事們將不得不設置envirenment變量,要工作。

是否有解決方案,腳本可以使用我的默認管理員用戶,哪一個不需要我的同事改變他們的設置或他們如何運行腳本?

+3

只需創建接收用戶的參數bash腳本,那麼你會調用'./myscript root'或'./myscript postgres' –

回答

0

根據評論的建議,我設置我的腳本採取代表目標用戶名的輸入參數。創建數據庫部分,現在看起來像

if [ -z $1 ]; then 
    psql -U postgres -c 'CREATE DATABASE azara WITH OWNER azara' 
else 
    psql -U $1 -c 'CREATE DATABASE azara WITH OWNER azara' 
fi 

這將使用「Postgres的在殼體上設置任何參數的默認用戶名,並使用指定的參數的值作爲用戶名,如果提供一個。這樣,我的同事們如何運行腳本不需要改變,因爲他們的用戶名是默認的,我可以通過指定我的不同用戶名'root'作爲參數來使用它。

0

你可以做這樣的:

superuser=`psql -Atq -c 'SELECT usename FROM pg_catalog.pg_user WHERE usesysid = 10'` 
psql -Atq -U "$superuser" -c 'CREATE DATABASE azara WITH OWNER azara' 
相關問題