Connect with psql from remote machine to remote postgres database with saved password
我正在远程Unix机器上工作,我通过SSH连接本地机器。在另一台主机上有一个Postgres数据库,我需要使用psql从我的远程机器连接。
我希望能够从输入文件运行查询并将结果保存到输出文件,但是我没有设法自动设置密码,超过了每次运行查询时都需要这样做。
我尝试了以下方法:
跑
1
| psql"user=username password=password host=hostname port=port dbname=database"` |
使用我的username,password,hostname,port和database值。
这工作正常但我没有找到为输入/输出文件添加参数的方法(不需要通过Postgres交互式环境)。
根据另一个SO问题,我创建了一个文件~/.pgpass,格式如下:hostname:port:database:username:password
然后chmod 0600 ~/.pgpass但是在连接时:psql -h hostname -U username -d database -w psql忽略了这个(我收到了以下失败的身份验证消息。)
psql: fe_sendauth: no password supplied.
请注意,我的远程计算机的名称与我的用户名不同,因此在创建.pgpass文件时也可能会产生问题。还有其他办法吗?
有任何想法吗?
-
您的远程计算机的名称与您的用户名有什么关系? 顺便说一句,你没有在第二次psql调用中指定端口,但我怀疑在这种情况下是否重要。
-
那么,根据这个[serverfault.com/questions/526170/…,它可能会有所作为。 我也尝试指定端口,但正如你所说,这不是问题所在。
-
这个问题是关于使用sudo来调用psql。 你使用sudo来调用psql吗?
-
不,为此道歉。 我不能使用sudo,因为它是一台远程机器。 我想创建一个带有两个参数(输入/输出文件)的bash脚本,并使用psql自动运行查询。
-
我设法在这个SO问题中找到了我想要的解决方案[stackoverflow.com/questions/6523019/&hellip ;,我在发布之前做了足够的搜索但是我需要重新解释我的问题。 解决方案是编写PGPASSWORD=password psql -h hostname -U username -d database -f inputfile -o outputfile
This worked OK but I did not find a way to add arguments for
input/output files
您可以将输入文件重定向到psql,也可以在-f选项中指定它:
1 2
| psql < INPUT.sql
psql -f INPUT.sql |
至于输出文件,只需将psql的输出重定向到它:
1
| psql -f INPUT.sql > output.txt |
-
谢谢。 这使用psql字符串模式不起作用。 解决方案是在psql之前添加PGPASSWORD =密码,然后在编写时执行。
-
为什么不? psql"host=... dbname=... user=... port=... password=..." < input.sql > output.sql工作正常。
-
我没试过这个,我试着使用-f -o参数,它没有用,谢谢