Boa noite
estou escrevendo este artigo pois necessitei gerar um aplicativo para fazer backup do postgresql.
usando o pg_dump fiz um programa que fizesse criação de um arquivo de lote em especifico pra gerar o backup.
Há ele foi projetado pra fazer backup de varias bases.
no formulario coloquei 2 Edit 4 botões é uma grade:
os edit´s para informar o local aonde se encontra instalado o postgresql e o outro para informar aonde deve ficar os backups.
na grade usei um memdataset para salvar os dados como host, porta, banco, usuario e senha
com isso ao clicar no botão iniciar ele vai passar vendo todos os bancos e gerando backup de cada um
procedure TfrPrincipal.btnIniciarClick(Sender: TObject);
const
COMANDO =
‘”%spg_dump.exe” –host %s –port %d –username %s –format custom –blobs –verbose –file “%s” %s’;
var
ArqBat, diretorio, arquivo, arqZip, email, Senha: string;
f: TextFile;
xCMD: TProcess;
begin
diretorio := IncludeTrailingPathDelimiter(eDestino.Text);
MemDataset1.First;
while not (MemDataset1.EOF) do
begin
arquivo := Format(‘%sbkp-%s-%s.backup’, [diretorio,
MemDataset1.Fields[2].AsString, FormatDateTime(‘YYYY-MM-DD_HHNN’, now)]);
xCMD := TProcess.Create(nil);
ArqBat := ExtractFileDir(arquivo) + ‘backup.bat’;
AssignFile(f, ArqBat);
try
Rewrite(f);
Writeln(f, Format(‘set pgpassword=%s’, [MemDataset1.Fields[4].AsString]));
Writeln(f, Format(COMANDO, [IncludeTrailingPathDelimiter(eBin.Text),{}
MemDataset1.Fields[0].AsString, MemDataset1.Fields[1].AsInteger,
MemDataset1.Fields[3].AsString, arquivo,
MemDataset1.Fields[3].AsString]));
CloseFile(f);
xCMD.CommandLine := Format(‘cmd /c %s’, [ArqBat]);
xCMD.Options := [poWaitOnExit];
xCMD.Execute;
finally
xCMD.Free;
DeleteFile(PAnsiChar(ArqBat));
end;
MemDataset1.Next;
end;
ShowMessage(‘Backup Efetuado com Sucesso!’);
end;
Espero ter ajudado a todos
Obs: Foi usado Lazarus para desenvolver a aplicação.