Hello I write simple batch script to backup postgeSQL databases, but I find one strange problem whether the pg_dump command can specify a password?
There is batch script:
REM script to backup PostgresSQL databases
@ECHO off
FOR /f "tokens=1-4 delims=/ " %%i IN ("%date%") DO (
SET dow=%%i
SET month=%%j
SET day=%%k
SET year=%%l
)
SET datestr=%month%_%day%_%year%
SET db1=opennms
SET db2=postgres
SET db3=sr_preproduction
REM SET db4=sr_production
ECHO datestr is %datestr%
SET BACKUP_FILE1=D:\%db1%_%datestr%.sql
SET FIlLENAME1=%db1%_%datestr%.sql
SET BACKUP_FILE2=D:\%db2%_%datestr%.sql
SET FIlLENAME2=%db2%_%datestr%.sql
SET BACKUP_FILE3=D:\%db3%_%datestr%.sql
SET FIlLENAME3=%db3%_%datestr%.sql
SET BACKUP_FILE4=D:\%db14%_%datestr%.sql
SET FIlLENAME4=%db4%_%datestr%.sql
ECHO Backup file name is %FIlLENAME1% , %FIlLENAME2% , %FIlLENAME3% , %FIlLENAME4%
ECHO off
pg_dump -U postgres -h localhost -p 5432 %db1% > %BACKUP_FILE1%
pg_dump -U postgres -h localhost -p 5432 %db2% > %BACKUP_FILE2%
pg_dump -U postgres -h localhost -p 5432 %db3% > %BACKUP_FILE3%
REM pg_dump -U postgres -h localhost -p 5432 %db4% > %BACKUP_FILE4%
ECHO DONE !
Please give me advice
Regards Mick
You cannot specify a password for Postgres utilities like
pg_dump
on the command line.This would be a giant security hole, requiring disgusting workarounds to mitigate.
What you CAN do is create a
pgpass
file, whichpg_dump
will consult.Depending on your needs you may want to consider taking a filesystem level backup instead of using
pg_dump
--pg_dump
will need to lock various parts of your database while it runs, and may interrupt normal use of the system. Alternately, consider running your backup process on a slave system.You can also create a dedicate user, restricted to localhost and with reduced privileges who can connect without password. (For example a unix user).
We used this and if the user is well protected it will not break the security.
Thanks for your cmd script. I used it to write my own as show below. It will backup all databases stored in postgresql to file formatted with the custom format used by pg_dump with date
yyyymmdd_hhss
in the name. ToDo : backup full schema without data.The database name is stored in the
%%d
variable in the loop. You can change safely :Attention : I'm french. dd/mm/yyyy for %date%, "DEBUT" for "START", "F I N" for "E N D".