psql: FATAL: 角色“-h”不存在

psql: FATAL: role "-h" does not exist

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

这是我的问题:

我正在尝试使用 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_file_path>/yyy.env 可读 看起来包含该文件的目录缺少执行权限。需要执行才能读取该目录中的文件。

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

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

现在当您忘记设置 $PGNAME 时,您将收到更明智的错误消息。

始终使用引号,如果您遇到没有引号的用例,您可能应该在那里使用数组(并且仍然使用引号)。