Backup de um BD postgres no php
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!!!
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!!!
comentários (1)
suspender
Lista de Respostas:
28/11/2009 11:48pm
(~14 anos atrás)
(~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.
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.
27/11/2009 4:27pm
(~14 anos atrás)
(~14 anos atrás)
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!
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!
01/12/2009 4:19pm
(~14 anos atrás)
(~14 anos atrás)
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!
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!
16/12/2009 8:47pm
(~14 anos atrás)
(~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:
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);