【发布时间】:2015-10-28 22:38:28
【问题描述】:
我正在一台远程 Unix 机器上工作,我通过 SSH 从本地机器进行连接。另一台主机上有一个 Postgres 数据库,我需要使用 psql 从我的远程计算机连接。
我希望能够从输入文件运行查询并将结果保存到输出文件,但是我没有设法自动设置密码,超出了每次运行查询时都需要这样做的需要。
我尝试了以下方法:
-
运行
psql "user=username password=password host=hostname port=port dbname=database"`使用我的
username、password、hostname、port和database值。 这工作正常,但我没有找到为输入/输出文件添加参数的方法(不需要通过 Postgres 交互环境)。 -
根据another SO question,我创建了一个文件
~/.pgpass,格式如下:hostname:port:database:username:password然后是
chmod 0600 ~/.pgpass,但是当连接为:psql -h hostname -U username -d database -wpsql 忽略了这一点(我收到了以下失败的身份验证消息。)psql: fe_sendauth: 未提供密码。
请注意,我的远程机器的名称与我的用户名不同,因此在创建
.pgpass文件时也可能会产生问题。还有其他方法吗?
有什么想法吗?
【问题讨论】:
-
你的远程机器的名字和你的用户名有什么关系?顺便说一句,您没有在第二次
psql调用中指定端口,但我怀疑这在这种情况下是否重要。 -
好吧,根据这个 [serverfault.com/questions/526170/…,它可能会有所作为。我也尝试指定端口,但正如你所说,这不是问题。
-
这个问题是关于使用
sudo调用psql。你是用sudo打电话给psql吗? -
不,为此道歉。我不能使用 sudo,因为它是一台远程机器。我想创建一个 bash 脚本,它接受两个参数(输入/输出文件)并使用 psql 自动运行查询。
-
我设法在这个 SO 问题中找到了我想要的解决方案 [stackoverflow.com/questions/6523019/…,我在发布之前做了足够的搜索,但我想我需要重新表述我的问题。解决办法是写
PGPASSWORD=password psql -h hostname -U username -d database -f inputfile -o outputfile
标签: postgresql unix psql