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

时间:2019-05-08 05:55:00

标签: windows postgresql batch-file pgadmin

根据我之前的问题How to fix Automated Backup script for postgres [Window]?

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

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

      

    问题运行安装后步骤。安装可能无法正确完成。数据库集群初始化失败。

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

  2. 我尝试通过使用pgpass.conf根用户dir /s | find /i "pgpass.conf"来找到c:\

    结果似乎在我的PC上甚至不存在->因此,这就是为什么我尝试在pgpass.conf文件夹而不是pgAdmin文件夹中为postgresql创建一个新文件的原因

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

      

    'PGPASSWORD'不被识别为内部或外部命令

    我试图像这样添加/编辑脚本

@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\DatabaseBackUp\32312.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\SQL\123456.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\SQL\123456.backup" _wolfcom
  pause

2 个答案:

答案 0 :(得分:0)

the documentation这样说:

  

在Microsoft Windows上,文件名为%APPDATA%\postgresql\pgpass.conf(其中%APPDATA%指用户个人资料中的Application Data子目录)。

您不必搜索它,它必须恰好在此位置(除非您设置PGPASSFILE环境变量)。如果不存在,请创建它。

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

答案 1 :(得分:0)

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

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

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