2017-07-16 93 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' 
相关问题