linux +如何在不输入密码的情况下获取psql结果

时间:2018-01-10 13:32:25

标签: bash expect psql

是否可以在不输入密码的情况下运行psql?

我的意思是如何在CLI中设置密码字(通过期望或其他方式),所以我不会输入密码

目标 - 我需要从bash脚本运行这个psql

 psql -U ambari ambari -c "select * from blueprint"  --> HDP
 Password for user ambari:
 blueprint_name | security_type | security_descriptor_reference | stack_id
----------------+---------------+-------------------------------+----------
   HDP          | NONE          |                               |        2
 (1 row)

我也尝试过但没有成功 - 为什么?

su - postgres -c "     psql -tc \"SELECT * FROM BLUEPRINT\" "
ERROR:  relation "blueprint" does not exist
LINE 1: SELECT * FROM BLUEPRINT
                  ^

第二

如何捕获“blueprint_name”之后的第一个单词

同时我用这个但不满意这个方法

psql -U ambari ambari -c "select * from blueprint" | grep -v row | tail -2 | awk '{print $1}'
Password for user ambari:
HDP

2 个答案:

答案 0 :(得分:2)

  

是否可以在不输入密码的情况下运行psql?

是的,有可能:

  1. 设置PGPASSWORD环境变量。这是手册(http://www.postgresql.org/docs/current/static/libpq-envars.html

  2. 使用.pgpass文件存储密码。这是手册(http://www.postgresql.org/docs/current/static/libpq-pgpass.html

  3. 为该特定用户使用“信任身份验证”(http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST

  4. 使用包含所有内容(http://www.postgresql.org/docs/current/static/libpq-connect.html#AEN42532

  5. 的连接URI

答案 1 :(得分:1)

需要使用此“-d ambari”将数据库名称告知为“ambari”

 # su - postgres -c "psql -d ambari -tc 'select * from ambari.blueprint' 

示例:

 # su - postgres -c "psql -d ambari -tc 'select * from ambari.blueprint' "
 HDP  | NONE          |                               |        6