同一个postgres脚本在不同的机器上使用不同的用户?

时间:2017-07-16 16:05:16

标签: sql postgresql environment-variables environment

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

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

我的同事在osx上,他们的管理员postgres用户默认为' postgres',而我在nixos上,我的admin postgres用户默认为' root'。所以脚本中的这个命令需要与我的机器上运行不同,而不是

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

处理这种差异的最佳方法是什么?

也许最简单的方法就是创造一个' postgres'用户在我的机器上运行脚本。但这似乎是一种黑客攻击,我想知道是否有一种方法可以设置脚本来确定使用哪个用户。

我考虑过使用postgres environment variable脚本可以用作变量。但命令

$ echo $PGUSER

没有返回任何内容,并且默认情况下环境变量PGUSER似乎没有设置,因此我的同事似乎必须设置envirenment变量才能生效。

是否有一个解决方案,脚本可以使用我的默认管理员用户,并且不需要我的同事改变他们的设置或他们如何运行脚本?

2 个答案:

答案 0 :(得分:0)

根据评论的建议,我设置我的脚本以获取表示预期用户名的输入参数。现在,create database部分看起来像

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'作为参数来使用它。

答案 1 :(得分:0)

你可以这样做:

SELECT DATE_FORMAT(REG_DT, '%Y-%m-%d') DT2,
SUM(IF(CARRIER = '101' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "TSEL ST",
SUM(IF(CARRIER = '103' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "XL ST",
SUM(IF(CARRIER = '104' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "ISAT ST",
SUM(IF(CARRIER = '106' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "H3I ST",
SUM(IF(CARRIER = '105' AND PROD_ID = 'ST', COUNT(DISTINCT MSISDN), 0)) "SF ST",
SUM(IF(CARRIER = '101' AND PROD_ID = 'CN', COUNT(DISTINCT MSISDN), 0)) "TSEL CN",
SUM(IF(CARRIER = '103' AND PROD_ID = 'CN', COUNT(DISTINCT MSISDN), 0)) "XL CN",
SUM(IF(CARRIER = '104' AND PROD_ID = 'CN', COUNT(DISTINCT MSISDN), 0)) "ISAT CN",
SUM(IF(CARRIER = '106' AND PROD_ID = 'CN', COUNT(DISTINCT MSISDN), 0)) "H3I CN",
SUM(IF(CARRIER = '105' AND PROD_ID = 'CN', COUNT(DISTINCT MSISDN), 0)) "SF CN",
SUM(IF(CARRIER = '101' AND PROD_ID = 'DG', COUNT(DISTINCT MSISDN), 0)) "TSEL DG",
SUM(IF(CARRIER = '103' AND PROD_ID = 'DG', COUNT(DISTINCT MSISDN), 0)) "XL DG",
SUM(IF(CARRIER = '104' AND PROD_ID = 'DG', COUNT(DISTINCT MSISDN), 0)) "ISAT DG",
SUM(IF(CARRIER = '106' AND PROD_ID = 'DG', COUNT(DISTINCT MSISDN), 0)) "H3I DG",
SUM(IF(CARRIER = '105' AND PROD_ID = 'DG', COUNT(DISTINCT MSISDN), 0)) "SF DG",
SUM(IF(CARRIER = '101' AND PROD_ID = 'GM', COUNT(DISTINCT MSISDN), 0)) "TSEL GM",
SUM(IF(CARRIER = '103' AND PROD_ID = 'GM', COUNT(DISTINCT MSISDN), 0)) "XL GM",
SUM(IF(CARRIER = '104' AND PROD_ID = 'GM', COUNT(DISTINCT MSISDN), 0)) "ISAT GM",
SUM(IF(CARRIER = '106' AND PROD_ID = 'GM', COUNT(DISTINCT MSISDN), 0)) "H3I GM",
SUM(IF(CARRIER = '105' AND PROD_ID = 'GM', COUNT(DISTINCT MSISDN), 0)) "SF GM"
 FROM BGW_HIS_TB
WHERE REG_DT BETWEEN '2017-07-01 00:00:00' AND '2017-07-31 23:59:59'
  AND STATUS = 'S'
GROUP BY DATE_FORMAT(REG_DT, '%Y-%m-%d') ORDER BY 1 ASC;
相关问题