有没有密码psql的命令运行批处理文件(Run batch file with psql comma

2019-07-21 09:50发布

我想执行这个psql使用批处理脚本命令:

psql --host=localhost --dbname=<dbname> --port=<Port Number>
     --username=<dbuser> --file=C:\PSQL_Script.txt --output=C:\PSQL_Output.txt

问题是,它的每一次我执行批处理脚本时,要求输入密码。 如何通过批处理文件我的密码的说法?

Answer 1:

请继续阅读, 最好的选择最后来了 。 但是,让我们澄清一些事情第一。

只有沉默密码请求

如果您的问题仅是提示输入密码时,你可以沉默了。 我引用这里的手动 :

-w
--no-password

千万不要发出密码提示。 如果服务器需要口令认证和密码不可通过其他方式如.pgpass文件,连接尝试将失败。 在没有用户存在输入密码,此选项可在批量作业和脚本非常有用。 (......)

你可能不需要密码

通常,这是不必要的。 默认数据库超级用户postgres通常对应于同名的系统用户。 运行psql从这个帐户如果不需要密码验证方法peerident在您设置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中。

用于本地连接简单的解决方案

省略参数-hpsql调用。 引用手册上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\



Answer 2:

我还挺同样的问题:

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

一些额外的读数:

  • 配置pg_hba.conf文件
  • 身份验证方法:信任,同行,IDENT,等等。


Answer 3:

Postgres的文档- https://www.postgresql.org/docs/9.6/static/app-psql.html

-w --no密码从未发出一个密码提示。 如果服务器需要口令认证和密码不可通过其他方式如.pgpass文件,连接尝试将失败。 在没有用户存在输入密码,此选项可在批量作业和脚本非常有用。



文章来源: Run batch file with psql command without password