Sql 相同的postgres脚本在不同的机器上使用不同的用户?
我正在处理的项目使用一个sql脚本,作为postgres的管理员用户运行一些命令;命令,例如:Sql 相同的postgres脚本在不同的机器上使用不同的用户?,sql,postgresql,environment-variables,environment,Sql,Postgresql,Environment Variables,Environment,我正在处理的项目使用一个sql脚本,作为postgres的管理员用户运行一些命令;命令,例如: psql -U postgres -c 'CREATE DATABASE azara WITH OWNER azara' 我的同事在osx上,他们的管理员postgres用户默认为“postgres”,而我在nixos上,我的管理员postgres用户默认为“root”。因此,脚本中的这个命令需要与在我的机器上运行的命令不同,而是 psql -U root -c 'CREATE DATABASE a
psql -U postgres -c 'CREATE DATABASE azara WITH OWNER azara'
我的同事在osx上,他们的管理员postgres用户默认为“postgres”,而我在nixos上,我的管理员postgres用户默认为“root”。因此,脚本中的这个命令需要与在我的机器上运行的命令不同,而是
psql -U root -c 'CREATE DATABASE azara WITH OWNER azara'
处理这种差异的最佳方法是什么
也许最简单的方法是在我的机器上创建一个“postgres”用户来运行脚本。但这似乎是一种黑客行为,我想知道是否有一种方法可以让我设置脚本来决定使用哪个用户
我考虑使用postgres,脚本可以将其用作变量。但是命令
$ echo $PGUSER
不返回任何内容,默认情况下环境变量PGUSER似乎未设置,因此我的同事似乎必须设置环境变量才能使其正常工作
是否有一种解决方案,脚本可以使用我的默认管理员用户,而不需要我的同事更改他们的设置或如何运行脚本?根据评论的建议,我将脚本设置为采用表示预期用户名的输入参数。创建数据库部分现在看起来像
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”作为参数来使用它。您可以这样做:
superuser=`psql-Atq-c'从pg_catalog.pg_user中选择usename,其中usesysid=10'`
psql-Atq-U“$superuser”-c“与所有者azara一起创建数据库azara”
只需创建一个接收用户作为参数的bash脚本,然后调用/myscript root
或/myscript postgres