Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 相同的postgres脚本在不同的机器上使用不同的用户?_Sql_Postgresql_Environment Variables_Environment - Fatal编程技术网

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

我正在处理的项目使用一个sql脚本,作为postgres的管理员用户运行一些命令;命令,例如:

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