我想执行这个psql
使用批处理脚本命令:
psql --host=localhost --dbname=<dbname> --port=<Port Number>
--username=<dbuser> --file=C:\PSQL_Script.txt --output=C:\PSQL_Output.txt
问题是,它的每一次我执行批处理脚本时,要求输入密码。 如何通过批处理文件我的密码的说法?
我想执行这个psql
使用批处理脚本命令:
psql --host=localhost --dbname=<dbname> --port=<Port Number>
--username=<dbuser> --file=C:\PSQL_Script.txt --output=C:\PSQL_Output.txt
问题是,它的每一次我执行批处理脚本时,要求输入密码。 如何通过批处理文件我的密码的说法?
请继续阅读, 最好的选择最后来了 。 但是,让我们澄清一些事情第一。
如果您的问题仅是提示输入密码时,你可以沉默了。 我引用这里的手动 :
-w
--no-password
千万不要发出密码提示。 如果服务器需要口令认证和密码不可通过其他方式如
.pgpass
文件,连接尝试将失败。 在没有用户存在输入密码,此选项可在批量作业和脚本非常有用。 (......)
通常,这是不必要的。 默认数据库超级用户postgres
通常对应于同名的系统用户。 运行psql
从这个帐户如果不需要密码验证方法peer
或ident
在您设置pg_hba.conf
文件。 你可能有这样一行:
local all postgres peer
通常还有:
local all all peer
这意味着,每一个本地用户可以登录到所有数据库中没有密码相同名称的数据库用户。
但是 ,这里有一个常见的误解。 再次引用 :
此方法仅适用于本地连接 。
大胆重点煤矿。
要连接到localhost
,这不是一个“本地连接”,即使它有这个词用了“本地”。 这是一个TCP / IP连接到127.0.0.1。 维基百科在localhost :
在现代的计算机系统中,
localhost
作为主机名转换为在IPv4地址127.0.0.0/8
(回送)网块,通常是127.0.0.1
,或::1
在IPv6中。
省略参数-h
从psql
调用。 引用手册上psql
一次:
如果省略主机名,psql将通过Unix域套接字连接到服务器的本地主机上,或者通过TCP / IP到
localhost
上没有Unix域套接字的机器。
......没有Unix域套接字, pg_hba.conf
开头为local
并不适用于Windows。 在Windows上,通过连接localhost
在默认情况下,这使我们回到了起点。
如果您的安全要求不严,你可以只通过信任所有连接localhost
:
host all all 127.0.0.1/32 trust
我只会做那与远程连接关闭调试。 对于一些更安全,你可以使用SSPI认证的Windows。 加入这一行pg_hba.conf
为“本地”连接:
host all all 127.0.0.1/32 sspi
您可以设置环境变量 ,但是这是气馁 ,尤其适用于Windows。 手动:
PGPASSWORD
的行为相同的密码连接参数。 不建议出于安全原因,这个环境变量的用途,因为一些操作系统允许非root用户看到通过PS处理的环境变量; 而是考虑使用~/.pgpass
文件(见第32.15 )。
在手动psql
:
甲conninfo
字符串是指定连接参数的替代:
$ psql "user=myuser password=secret_pw host=localhost port=5432 sslmode=require"
或者一个URI ,这是用来代替数据库名称:
$ psql postgresql://myuser:secret_pw@localhost:5432/mydb?sslmode=require
但它通常是最好设立一个.pgpass
文件 ,而不是将密码到脚本文件。
阅读仔细手册中短章 。 特别要注意的是,这里...
的主机名
localhost
都TCP(主机名匹配localhost
)和Unix域套接字(pghost
空或默认插座目录)从本地计算机来连接。
确切的路径取决于系统。 该文件可以存储的角色和端口(DB集群)的多种组合的密码:
localhost:5432:*:myadmin:myadminPasswd
localhost:5434:*:myadmin:myadminPasswd
localhost:5437:*:myadmin:myadminPasswd
...
在Windows机器上寻找的文件:
%APPDATA%\postgresql\pgpass.conf
%APPDATA%
通常解析为: C:\Documents and Settings\My_Windows_User_Name\Application Data\
。
我还挺同样的问题:
psql -hlocalhost -d<myDB> -U<myUser>
总是提示我密码。 这是因为@Erwin因为解释-hlocalhost
通过TCP而不是通过Unix域套接字(对于基于Unix OS)连接。 所以,即使你已经配置了local
的信任:
local all all trust
它仍然会提示输入密码。 因此,为了配置-hlocalhost
通过TCP工作,我不得不配置host
的本地主机地址,就像这样:
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
但是,这并没有为我工作。 我不得不做的是结合了那些为:
host all all localhost trust
一些额外的读数:
Postgres的文档- https://www.postgresql.org/docs/9.6/static/app-psql.html
-w --no密码从未发出一个密码提示。 如果服务器需要口令认证和密码不可通过其他方式如.pgpass文件,连接尝试将失败。 在没有用户存在输入密码,此选项可在批量作业和脚本非常有用。