0

Backup de um BD postgres no php

criado por Joabe Braga em 27/11/2009 3:05pm
Boa tarde,

Preciso criar uma funcionalidade em uma aplicação php que gere um backup do banco de dados. Já utilizei pg_dump mas não funcionou. Alguém sabe como isso pode ser feito?

Um abraço!!!

Lista de Respostas:

+2
28/11/2009 11:48pm
(~14 anos atrás)
Acho que usar pg_dump seja a alternativa mais prática. Para resolver isso, vai depender do problema que aparece ao executar o pg_dump pelo PHP.

Se o problema é de comando não encontrado, você precisa especificar o caminho completo até o executável (ao utilizar a função exec ou semelhante). Por exemplo, se o pg_dump estiver no diretório /usr/bin/ (no Linux), você pode usar o comando:

exec('/usr/bin/pg_dump ...', $texto, $retorno);

No Linux, para saber onde o pg_dump está, você pode executar o comando no terminal:
$ type pg_dump

Outro possivel problema é de permissão do pg_dump. Talvez o usuário "apache" (ou o usuário do servidor HTTP) não tenha permissão para executar o pg_dump para o BD que você está querendo fazer o backup. Neste caso, use o parâmetro -U.

Também pode ocorrer de você tentar gerar o arquivo num local onde não há permissão de escrita. Neste caso, coloque permissão de escrita no diretório que receberá o arquivo resultante.

Link útil:
http://www.htmlstaff.org/postgresqlmanual/app-pgdump.html

Para fazer uma solução semelhante a do link do Matheus, vai precisar consultar a estrutura das tabelas, índices, chaves, referências, e os registros da tabela, enfim, muita coisa. Eu não conheço nada semelhante ao "SHOW CREATE TABLE" do MySQL para PostgreSQL. Por isso acho que deve investir na solução com o pg_dump.

+1
27/11/2009 4:27pm
(~14 anos atrás)
Matheus Ricelly respondeu:
Tenho 2 links bem úteis... são mais para MySQL, não sei se servirá para o seu caso; não sei se é exclusivo postgres...

http://www.linhadecodigo.com.br/Dica.aspx?id=1092
Esse primeiro eu já utilizei e deu certo, inclusive lá fala que é um alternativa ao mysqldump...

http://www.revistaphp.com.br/artigo.php?id=55
Esse segundo eu não utilizei, foi apenas uma indicação de um amigo, que segundo ele, deu certo e o utiliza sempre...

Espero que possa dá certo...

Valeu!

0
01/12/2009 4:19pm
(~14 anos atrás)
Joabe Braga respondeu:
Primeiramente quero agrader pela colaboração. Eu utilizei o pg_dump com a função exec do php. Nenhum erro é retornado, porém o backup não funciona. Nada acontece.
Abaixo está o código da minha aplicação.

$URL = 'C:\Arquivos de programas\PostgreSQL\8.1\bin';
$sql = 'pg_dump -U postgres -W senha -Ft BD_TESTE > BACKUP_BB_TESTE';

exec($URL, $sql);

Grato!

0
16/12/2009 8:47pm
(~14 anos atrás)
Joabe, você utilizou a funão exec de maneira estranha. Veja a lista de parâmetros que ela recebe:
http://br.php.net/manual/en/function.exec.php

Você deveria fazer assim:

$cmd = 'C:/Arquivos de programas/PostgreSQL/8.1/bin/pg_dump -U postgres -W senha -Ft BD_TESTE > C:/Backup/BACKUP_BB_TESTE';
exec($cmd, $output, $return);
if ($return == 0) {
    echo 'Executou com suceso';
} else {
    echo 'Algum erro ocorreu (codigo '.$return.')';
}

// Exibir texto retornado pela execucao
var_dump($output);

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)