有什么方法可以修复 pgpass.conf 以在 Windows 上正常工作吗?

Is there any way to fix pgpass.conf to work properly on Windows?

根据我之前的问题

我的 PC 上的 pgpass.conf 似乎有问题,当尝试使用 pg_dump 备份数据库时似乎没有提供所需的密码。我发现我的情况很奇怪。但是,我不知道如何解决这个问题。

  1. 在我的 PC 上,没有 postgresql 文件夹可以保留 pgpass.conf -> 我已经尝试安装 Postgres,但看起来错误消息显示

    problem running post-install step. Installation may not complete correctly. The database cluster initialisation failed.

    但是,我的 PC 上已经有一个 pgAdmin 文件夹。

  2. 我试图通过使用根 c:\ 中的 dir /s | find /i "pgpass.conf" 找到 pgpass.conf

    结果看起来它甚至不存在于我的电脑上 -> 所以这就是为什么我试图在文件夹 pgAdmin 中为 pgpass.conf 创建一个新文件而不是 postgresql文件夹。

  3. 我也试过设置一个环境变量,基于What do I need for pg_dumpall to work without a password?。控制台上的错误显示

    'PGPASSWORD' is not recognized as an internal or external command

    我试过add/edit这样的脚本

@echo off    
  echo 192.168.1.161:5432:_wolfcom:postgres:1234>"%APPDATA%\pgAdmin\pgpass.conf"
  set "root=C:\Program Files (x86)\pgAdmin 4\v3\runtime\"
  cd /d "%root%"
  PGPASSWORD=R0m3o^%%Ech0-5910^& pg_dumpall -h 192.168.1.161 -w -U postgres _wolfcom > "D:\Backup\DatabaseBackUp312.sql" 
  pause

有人能想出如何让 pgpass.conf 正常工作吗?

这是批处理文件的当前脚本

@echo off    
  echo 192.168.1.161:5432:_wolfcom:postgres:R0m3o^%%Ech0-5910^&>"%APPDATA%\pgAdmin\pgpass.conf"
  set "root=C:\Program Files (x86)\pgAdmin 4\v3\runtime\"
  cd /d "%root%"
  pg_dump.exe -h 192.168.1.161 -p 5432 -U postgres -F c -b -v -f "D:\Backup\DatabaseBackUp\SQL3456.backup" _wolfcom
  pause

这是适合我的脚本

@echo off    
  echo 192.168.1.161:5432:_wolfcom:postgres:R0m3o^%%Ech0-5910^&>"%APPDATA%\postgresql\pgpass.conf"
  set "root=C:\Program Files (x86)\pgAdmin 4\v3\runtime\"
  cd /d "%root%"
  pg_dump.exe -h 192.168.1.161 -p 5432 -U postgres -F c -b -v -f "D:\Backup\DatabaseBackUp\SQL3456.backup" _wolfcom
  pause

喜欢the documentation 说:

On Microsoft Windows the file is named %APPDATA%\postgresql\pgpass.conf (where %APPDATA% refers to the Application Data subdirectory in the user's profile).

你不必搜索它,它必须正好在这个地方(除非你设置了 PGPASSFILE 环境变量)。如果不存在,则创建它。

另一种(也许更简单)的方法是使用 pgAdmin 并选中使它为您保存密码的复选框。自动创建密码文件。

Postgres 文档很好,但不是很清楚。

在我的系统 (Windows 10) 上,%APPDATA% 是 C:\Users\<UserName>\AppData\Roaming;所以文件必须在 C:\Users\<UserName>\AppData\Roaming\postgresql\pgpass.conf 中才能被 Postgres 找到。

虽然我最初尝试将它放在 <UserName>\AppData 下,但没有用。从命令行使用 echo %APPDATA% 确认系统上的正确位置。