我的目标是能够在不提示输入密码的情况下启动命令。有什么办法可以从Windows命令行实现这一点吗?在 Linux 中,我觉得我可以将密码发送到标准输入或其他东西,但我不确定是否可以在 Windows 中执行此操作。
谢谢!
有两种方法:
set PGPASSWORD=yoursecretpassword
%APPDATA%\postgresql\pgpass.conf
,如文档在密码文件(我的位置是 C:\Users\Grzesiek\AppData\Roaming\postgresql\pgpass.conf)中使用以 doc 格式指定的密码。例如,要在本地 5432 服务器上以角色 postgres 连接数据库 postgres,请添加:
localhost:5432:postgres:postgres:12345
我检查了这个,它运行良好(对我来说),但不要使用 127.0.0.1)。
另一个方便的选项(特别是如果您的 PG 服务器在您自己的客户端计算机上运行,并且这不会给您带来任何安全问题)是允许在服务器中无需密码登录(“信任”身份验证模式)。
例如,
pg_hba.conf
(在您的 DATA 目录中,典型位置:C:\Program Files\PostgreSQL\9.0\data\
)中的这一行无需密码即可从本地计算机授予访问权限。
host all all 127.0.0.1/32 trust
然后,连接
psql.exe -h 127.0.0.1 -U postgres -w [YOUR_DB_NAME]
我知道这是一个老问题,但对于像我一样的人来说,很难找到适用于 Windows 的解决方案。将其保存在 .bat 文件中,它将起作用(至少对我来说是这样)。将director更改为postres目录,设置环境变量
PGPASSWORD
执行复制命令到csv文件,然后清除环境变量,然后返回根目录。
cd C:\Program Files\PostgreSQL\9.5\bin\
set PGPASSWORD=yourpassword
psql -d databasename -U yourusername -w -c "\COPY (select * from yourtable) TO 'c:/Users/yourdirectory/yourcsvfilename.csv' DELIMITER '|' CSV HEADER;"
set PGPASSWORD=
cd c:\
我意识到这个问题现在有点老了,但我相信有一种更好的方法可以在 Windows 上安全、无密码地登录 PostgreSQL - SSPI。
创建本地或域用户帐户并使用相同的名称登录 PostgreSQL。
在
pg_ident.conf
中,创建映射:
# MAPNAME SYSTEM-USERNAME PG-USERNAME
SSPI username@AUTHORITY loginname
将 username 替换为 Windows 用户名(这是域帐户的
sAMAccountName
属性),并将 AUTHORITY 替换为计算机名称或短域名。如果您不确定使用什么AUTHORITY,请检查 PostgreSQL 日志文件。对于本地帐户,这将是计算机名称;对于域帐户,它可能是短域名。最后,将 loginname 替换为 PostgreSQL 登录名(为了减少混淆,我建议 username 和 loginname 使用相同的名称)。在
pg_hba.conf
中,允许登录;例如:
# TYPE DATABASE USER ADDRESS METHOD
host all loginname 127.0.0.1/32 sspi map=SSPI
host all loginname ::1/128 sspi map=SSPI
如果是域帐户,请为其设置SPN;例如:
setspn -S POSTGRES/serverfqdn username
现在您可以使用指定的用户名登录Windows并运行
psql.exe
等,无需密码。
对于那些不需要 .pgpass 文件并希望在单个命令行实例中执行的人来说,这是另一种选择。
set "PGPASSWORD=yourpass" && createdb -h localhost -p 5432 -U postgres new_db_name
我参考了几乎所有与命令行相关的解决方案,最后在 Windows 11 中设置时将
"
包裹在 PGPASSWORD=yourpass 周围。
步骤:
第一个环境变量 PGPASSWORD
C:\Windows\system32>设置 PGPASSWORD=clave
之前
psql -d basedatos -U usuario
准备好了,
我让它在 Postgres 15 中工作:
psql -U postgres -h 127.0.0.1 -p 54322 -f some_file password=postgres
J
如果您能够使用 Powershell,则可以内联设置环境变量,类似于 bash。
这应该有效:
$Env:PGPASSWORD='your-pass'; psql -U postgres
请注意设置变量和实际命令之间的分号,这很重要,因为它们是内联命令,但是两个单独的命令。
在Windows下的cmd中你可以输入以下内容:
echo localhost:5432:*:postgres:12345>> %APPDATA%\postgresql\pgpass.conf
(“>>”之前没有任何空格!)
pgpass.conf 的格式是:
hostname:port:database:username:password
前四个字段中的每一个都可以是文字值,或 *,可匹配任何内容