继续阅读,最好的选择。但我们首先澄清一些事情。只有静音密码请求如果您的问题只是密码提示,您可以将其静音。我在这里引用手册:-w--no-password永远不要发出密码提示。如果服务器需要密码验证,并且其他方式(例如.pgpass文件)无法使用密码,则连接尝试将失败。此选项在没有用户输入密码的批处理作业和脚本中非常有用。(......)您可能不需要密码通常这是不必要的。默认数据库超级用户postgres通常对应于同名的系统用户。psql如果使用身份验证方法peer或ident在pg_hba.conf文件中设置,则从此帐户运行不需要密码。你可能有这样的一行:localallpostgrespeer通常还有:localallallpeer这意味着,每个本地用户都可以作为没有密码的同名数据库用户登录到所有数据库。但是,这里存在一种常见的误解。再次引用:仅在本地连接上支持此方法。大胆强调我的。您正在连接localhost,这不是“本地连接”,即使它中包含“本地”一词。它是到127.0.0.1的TCP / IP连接。localhost上的维基百科:在现代计算机系统上,localhost作为主机名127.0.0.0/8,通常127.0.0.1或::1在IPv6中转换为(环回)网络块中的IPv4地址。
本地连接的简单解决方案省略该参数-h从psql调用。再次引用手册psql:如果省略主机名,psql将通过Unix域套接字连接到本地主机上的服务器,或通过TCP / IP连接到localhost没有Unix域套接字的机器上。视窗...没有Unix域套接字,pg_hba.conf开头的行local不适用于Windows。在Windows上localhost,默认情况下连接通过,这将我们带回到开始。如果您的安全要求不严格,您可以通过localhost以下方式信任所有连接:hostallall127.0.0.1/32trust我只会关闭远程连接进行调试。为了更安全,您可以在Windows上使用SSPI身份验证。将此行添加到pg_hba.conf“本地”连接:hostallall127.0.0.1/32sspi如果你确实需要密码您可以设置环境变量,但不建议这样做,尤其是对于Windows。手册:PGPASSWORD行为与密码连接参数相同。出于安全原因,不建议使用此环境变量,因为某些操作系统允许非root用户通过ps查看进程环境变量;而是考虑使用该~/.pgpass文件(参见第32.15节)。手册psql:甲conninfo字符串是指定连接参数的替代:$psql"user=myuserpassword=secret_pwhost=localhostport=5432sslmode=require"或者使用URI代替数据库名称:$psqlpostgresql://myuser:secret_pw@localhost:5432/mydb?sslmode=require密码文件但通常最好设置一个.pgpass文件,而不是将密码放入脚本文件中。
请仔细阅读本手册中的简短章节。特别要注意这里......主机名localhost匹配来自本地计算机的TCP(主机名localhost)和Unix域套接字(pghost空或默认套接字目录)连接。确切的路径取决于系统。此文件可以存储多个角色和端口组合(数据库集群)的密码:localhost:5432:*:myadmin:myadminPasswdlocalhost:5434:*:myadmin:myadminPasswdlocalhost:5437:*:myadmin:myadminPasswd...在Windows机器上查找以下文件:%APPDATA%\postgresql\pgpass.conf%APPDATA%通常解析为:C:\Documents and Settings\My_Windows_User_Name\Application Data\。