我试图使用批处理脚本执行这个psql
命令:
psql --host=localhost --dbname=<dbname> --port=<Port Number>
--username=<dbuser> --file=C:\PSQL_Script.txt --output=C:\PSQL_Output.txt
问题是每次我执行批处理脚本时,它都会询问密码。如何通过批处理文件输入密码参数?
Postgres文档-https://www.postgresql.org/docs/9.6/static/app-psql.html
-w—无密码从不发出密码提示。如果服务器需要密码身份验证,并且密码无法通过其他方式(如.pgpass文件)使用,则连接尝试将失败。在没有用户输入密码的批处理作业和脚本中,此选项非常有用。
我也有同样的问题:
psql -hlocalhost -d<myDB> -U<myUser>
总是提示我输入密码。这正如@Erwin解释的那样,因为-hlocalhost
是通过TCP而不是Unix域套接字(对于基于Unix的操作系统)进行连接的。因此,即使您已将本地配置为受信任的:
local all all trust
它仍然会提示输入密码。因此,为了配置-hlocalhost
以通过TCP工作,我必须为localhost地址配置host
,如下所示:
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
但这对我不起作用。我要做的是将这两种方法结合起来:
host all all localhost trust
一些额外的读数:
继续阅读,最好的选择排在最后。但是让我们先澄清几件事。
如果您的问题只是密码提示,您可以使其静音。我在此引述该手册:
-w
--无密码
永远不要发出密码提示。如果服务器需要密码身份验证,并且密码无法通过
.pgpass
文件等其他方式使用,则连接尝试将失败。在没有用户输入密码的批处理作业和脚本中,此选项非常有用。(...)
通常这是不必要的。默认数据库超级用户
postgres
通常对应于同名的系统用户。如果在pg_hba.conf
文件中设置了身份验证方法peer
或ident
,则从此帐户运行psql
不需要密码。你可能有这样一句话:
local all postgres peer
通常还包括:
local all all peer
这意味着,每个本地用户都可以作为同名数据库用户登录到全数据库,而无需密码。
然而,这里有一个常见的误解。再次引用:
此方法仅在本地连接上受支持。
粗体强调我的。
您正在连接到localhost
,它不是“本地连接”,即使其中有“本地”一词。它是到127.0.0.1的TCP/IP连接。本地主机上的维基百科:
在现代计算机系统中,
localhost
作为主机名翻译成127.0.0.0/8
(环回)网络块中的IPv4地址,通常是127.0.0.1
,或::1
在IPv6.
从
psql
调用中省略参数-h
。再次引用关于psql的手册:
如果省略主机名,psql将通过Unix域套接字连接到本地主机上的服务器,或在没有Unix域套接字的计算机上通过TCP/IP连接到
localhost
。
... 没有Unix域套接字,
pg_hba.conf
以local
开头的行不适用于Windows。在Windows上,默认情况下通过localhost
进行连接,这使我们回到了起点。
如果您的安全要求不严格,您可以通过
localhost
信任所有连接:
host all all 127.0.0.1/32 trust
我只会在远程连接关闭的情况下进行调试。要获得更多安全性,您可以在Windows上使用SSPI身份验证。将此行添加到
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\u Windows\u User\u Name\Application Data\
。
我正在试着制作一个定制的发射器,但我不知道如何使用命令行来启动minecraft。我看到了这个问题:从命令行启动Minecraft-使用名称和密码作为前缀。但是答案根本不起作用,所以有人能告诉我如何使用以用户名和密码为前缀的命令行启动minecraft吗
我不知道如何使用调用Spring批处理中定义的作业,文档细节对我来说是不够的。 我遵循了Spring Batch官方指南,使用Java注释(例如)在Spring Batch中编写作业,因为我希望避免使用XML配置文件来描述作业、步骤等。 到目前为止我已经: 配置类(见下文),我使用AnnotaIon将定义、、、和(带有的所有内容放入其中。 具有方法的类,该方法具有并具有注释,以导入处理作业中的数据
在本章中,我们来看一看一些经常使用的批处理命令。如下图中所示 - 编号 命令 描述 1 VER 此批处理命令显示正在使用的MS-DOS的版本。 2 ASSOC 这是将扩展名与文件类型(FTYPE)相关联的批处理命令,显示现有关联或删除关联。 3 CD 此批处理命令用于更改进入不同的目录,或显示当前目录。 4 CLS 这个批处理命令清除屏幕。 5 COPY 此批处理命令用于将文件从一个位置复制到另一
在Windows中,如何访问批处理文件运行时传递的参数? 例如,假设我有一个名为< code>hello.bat的程序。当我在Windows命令行输入< code>hello -a时,如何让我的程序知道< code>-a是作为参数传入的?
我创建了一个Windows批处理文件来启动我的Play Framework应用程序,详情如下:Play Framework bat Windows java process 这是可行的,但当我尝试添加命令行标志以指定生产配置文件时,会收到“Not a Play application”(非播放应用程序)错误消息: 我的两个问题是: “%1”和“.”是什么意思向java启动器表示 如何在Window