script simples para backup do banco de dados PostgreSQL

2

Olá, eu escrevo script em lote simples para backup de bancos de dados postgeSQL, mas acho um problema estranho se o comando pg_dump pode especificar uma senha?

Existe um script em lote:

 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 !

Por favor me dê conselhos

Atenciosamente Mick

    
por Mick 30.05.2014 / 12:32

3 respostas

1

Você não pode especificar uma senha para utilitários do Postgres como pg_dump na linha de comando.
Isso seria um um buraco de segurança gigante, exigindo soluções repugnantes para atenuar .

O que você CAN faz é crie um arquivo pgpass , que pg_dump consultará.

Dependendo das suas necessidades, você pode querer considerar fazer um backup em nível de sistema de arquivos O uso de pg_dump - pg_dump precisará bloquear várias partes do banco de dados enquanto ele é executado e pode interromper o uso normal do sistema. Como alternativa, considere executar seu processo de backup em um sistema escravo.

    
por 31.05.2014 / 06:15
0

Você também pode criar um usuário dedicado, restrito ao host local e com privilégios reduzidos, que podem se conectar sem senha. (Por exemplo, um usuário unix).

Usamos isso e, se o usuário estiver bem protegido, isso não afetará a segurança.

    
por 31.05.2014 / 11:16
0

Obrigado pelo seu script cmd. Eu usei para escrever meu próprio show como abaixo. Ele fará backup de todos os bancos de dados armazenados no postgresql para o arquivo formatado com o formato customizado usado pelo pg_dump com a data yyyymmdd_hhss no nome. ToDo: esquema completo de backup sem dados.

O nome do banco de dados é armazenado na variável %%d no loop. Você pode mudar com segurança:

  • "backup_data_dir" (deve terminar por)
  • "pg_user" (postgres por padrão)
  • "pg_bin_dir" (deve terminar por)

Atenção: sou francês. dd / mm / aaaa para% date%, "DEBUT" para "START", "F I N" para "E N D".

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET backup_data_dir=C:\path\to\backup\
SET backup_file_name=%COMPUTERNAME%.%date:~6,4%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%.PGDMP
SET pg_user=--username=postgres
SET pg_dmp_option=--clean %pg_user% --format=custom
SET pg_lst_db=psql.exe %pg_user% --list --field-separator=^; --tuples-only --no-align
SET pg_bin_dir=C:\Program Files\PostgreSQL.6\bin\

CD /D %pg_bin_dir%
FOR /f "delims=; tokens=1" %%d IN ('!pg_lst_db!^| find ";"^|find /v "template0"') DO (
  @ECHO !date! !time! pg_dump de la base [%%d] --- DEBUT ---
  SET backup_file_name=%%d.%backup_file_name%
  SET pg_dmp_option=%pg_dmp_option% --file="%backup_data_dir%!backup_file_name!" --dbname=%%d
  pg_dump.exe !pg_dmp_option!
  ECHO !date! !time! pg_dump de la base [%%d] --- F I N ---
)
    
por 09.01.2018 / 18:11