【Postgres】客户端命令psql非交互式连接 PostgreSQL

一、实验背景

用psql客户端命令连接远程的PostgreSql数据库时,在命令中不能传密码,只能连接后,再按照提弹出密码输入提示输入密码(这一点感觉很别扭,在MySQL上就可以在命令中传入密码),如果这样的话就涉及到和服务器的交互(或者称之为会话),如果你要用shell脚本非交互式执行一些sql脚本,怎么办?

# psql -U postgres -p 5432  postgres


二、实验环境

操作系统: CentOS7.5 Minimal

IP: 192.168.1.106

PostgreSQL版本: 9.5

# systemctl status postgresql-9.5

# psql --help




三、解决方法


方法一:设置环境变量 PGPASSWORD

PGPASSWORD  是 PostgreSQL 系统环境变量,在客户端设置这后,那么在客户端连接远端数据库时,将优先使用这个密码。

#  export PGPASSWORD="Postgres@123"

# psql -h 192.168.1.106 -p 5432 -U postgresql -d postgres

注意:设置环境变量  PGPASSWORD ,连接数据库不再弹出密码输入提示,从安全性方面考虑,这种方法并不推荐,使用完记得清楚操作历史

#  unset PGPASSWORD

# history  -c 


方法二:修改服务器端pg_hba.conf文件

修改认证文件 $PGDATA/pg_hba.conf, 添加以下行, 并 reload使配置立即生效。

# vim /var/lib/pgsql/9.5/data/pg_hba.conf

######################################################

host    postgres      postgresql         192.168.1.0/24           trust

#######################################################

#  pg_ctl reload -D $PGDATA

注:修改服务端 pg_hba.conf 并 reload 后,不再弹出密码输入提示。


方法三:在客户端设置.pgpass密码文件


通过在客户端 /home/postgres 目录下创建隐藏文件 .pgpass ,从而避免连接数据库时弹出密码输入提示。

格式: hostname:port:database:username:password

#  mkdir  /home/postgres 

# cp  -r /etc/skel/.    /home/postgres


# vim  /home/postgres/.pgpass

############################################

192.168.1.106:5432:postgres:postgres:Postgres@123

#############################################



注:在/home/postgres 目录创建了密码文件 .pgpass 文件后,并正确配置连接信息,那么客户端连接数据时会优先使用 .pgass文件, 并使用匹配记录的密码,从而不跳出密码输入提示。


四、参考


PostgreSql命令行不输入密码的两种方法

https://blog.csdn.net/sunsides/article/details/84370134


用客户端命令psql连接 PostgreSQL 不输入密码的方法     

https://blog.csdn.net/zhu_xun/article/details/23347869

你可能感兴趣的:(【Postgres】客户端命令psql非交互式连接 PostgreSQL)