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.