psql:致命:角色" -h"不存在

时间:2018-06-12 18:23:55

标签: bash postgresql centos7 psql

我一直在网上搜索这个问题,没有一个答案澄清了我的问题。

这是我的问题:

我正在尝试使用Centos(SSH)中的一个脚本(abc.sh)运行.sql文件。这些.sql文件在postgreSQL上运行select命令并将数据检索到文件中。但是,当我尝试运行脚本(abc.sh)时,我在控制台上看到一个错误,如下所示

-bash: line 2: <**environment-file-path**>: Permission denied
psql: FATAL:  role "-h" does not exist

错误发生在

. /<env_file_path>/yyy.env
export PGPASSWORD=$PGPASSWORD | psql -U $PGUSERNAME $PGNAME -h $PGHOST -c "SET search_path TO xxx;COPY (select....,

我真的不确定是什么导致这个问题,因为我做了我可以做的任何事情。 1.我在不同的环境中使用不同的主机和用户凭据执行了相同的脚本,并且它工作正常。 2.我已经更改了pg_hba.conf文件,即我在脚本成功运行的环境中看起来很相似。

注意:我有一个环境文件,它存储了上述变量的所有有用信息和参数(第二个代码片段)从这个env文件传递。

即使做了这些事情,我也没有看到这个问题的任何变化。希望这是一个小问题,可以在别人的帮助下轻松修复。

1 个答案:

答案 0 :(得分:0)

您需要使文件/<env_file_path>/yyy.env可读 看起来包含该文件的目录缺少执行权限。需要执行才能读取该目录中的文件。

但是那里有一些非常糟糕的shell脚本...... 总是在变量周围使用引号。 也不管道出口。

export PGPASSWORD="$PGPASSWORD" 
psql -U "$PGUSERNAME" "$PGNAME" -h "$PGHOST" -c "SET search_path TO xxx;COPY (select....,  "

现在,当您忘记设置$PGNAME时,您会收到更合理的错误消息。

总是使用引号,如果遇到没有引号的用例,你应该在那里使用数组(并且仍然使用引号)。