2017-05-05 91 views
0

我有一个Ubuntu服务器处理文件和另一个有数据库(postgresql 9.3)。运行postgres查询从另一台服务器,在bash

我跑psql -?了解如何连接到另一个数据库,并最终命令是:

psql -U postgres -W -h 1.2.3.4 -d testdb -p 5432 

它的工作原理,但发出的命令后,我必须输入密码。

我是想在bash脚本来适应这个命令:

#!/bin/bash 
psql -U postgres -W mypassword -h 1.2.3.4 -d testdb -p 5432 << EOF 
select * from mytable; 
\q 
EOF 

不用说,这是不正确的命令。 此外,密码不会被识别为一个密码,报告错误:

psql: warning: extra command-line argument "mypassword" ignored 
Password for user postgres: 
psql: FATAL: password authentication failed for user "postgres" 
FATAL: password authentication failed for user "postgres" 

在另一台服务器,在脚本上的本地数据库运行时,我的工作脚本是:

su - postgres -c "psql myDatabase" << EOF 
select * from "myOtherTable"; 
\q 
EOF 

的问题很简单,我怎样才能为bash编写正确的命令,用用户/密码连接到另一个数据库并发出命令?

的链接我试过了,但密码好像不能设置: run psql query in bash

谢谢!

回答

1

尝试

PGPASSWORD=yourpass psql -U postgres -W -h 1.2.3.4 -d testdb -p 5432 

参见:https://www.postgresql.org/docs/9.3/static/libpq-envars.html

或〜/ .pgpass文件https://www.postgresql.org/docs/9.3/static/libpq-pgpass.html

+0

良好的联系!谢谢我检查出来,工作时会标记你的答案(: – Nihvel

+0

)起初它一直在询问密码,然后它就停止了,测试服务器重新启动,脚本运行并且工作! 我试过了.pgpass解决方案。在根文件夹中,对0600的权限和脚本中的命令是'psql -U postgres -h 1.2.3.4 -d dbname << eof [...] \ q eof' – Nihvel

相关问题