Postgres 用 PHP 备份数据

Mak*_*kla 0 php postgresql batch-file

我尝试使用 PHP 脚本备份数据库。我的想法是使用 PHP 作为批处理文件运行 pg_dump。(是的,我在 Windows 上使用 PHP)。

我写这个代码:

$content = "set BACKUP_FILE=database.backup \r\n" .
            "SET PGPASSWORD=" . COF_DATABASE_PASSWORD . "\r\n" . 
            "pg_dump -i -U " . COF_DATABASE_USERNAME . " -F c -b -v -f %BACKUP_FILE% " . COF_DATABASE_NAME . "\r\n" .
            "echo done";

    file_put_contents($root . "/Files/Updates/Backup.bat", $content);
    $system = exec ($root . "/Files/Updates/Backup.bat", $result);
    pclose(popen("start /B $root/Files/Updates/Backup.bat", "r"));
    $result = shell_exec($root . "/Files/Updates/Backup.bat");
Run Code Online (Sandbox Code Playgroud)

创建 Backup.dat 文件。如果我从 Windows 手动运行它,则会创建 database.backup 文件,但当我尝试从 PHP 运行批处理时不会。对于这两个命令,我都输入了 $result:

(string:241) D:\Data\WWW...\Process>set BACKUP_FILE=database.backup

D:\Data\WWW...\Process>SET PGPASSWORD=dom123

D:\Data\WWW...\Process>pg_dump -i -U dom -F c -b -v -f database.backup dom

一次作为数组 (exec),一次作为字符串 (shell_exec)。

然后我在想运行 bat 文件(即使我在代码中创建然后删除)不是最聪明的想法(安全)。所以我尝试使用 SQL-s 备份数据库(PDO - 执行...)

但是,如果这可能的话,我找不到任何文档。所有解决方案都建议 pg_dump。是否有任何 SQL 命令可以将整个数据库备份到文件?

我正在寻找一个有效的解决方案。SQL 或 .bat,此时并不重要。

编辑:

还可以尝试:

$string = "export PGPASSWORD=" . COF_DATABASE_PASSWORD . " && export PGUSER=" . COF_DATABASE_USERNAME . " && pg_dump -h localhost db_name " . COF_DATABASE_NAME . " > " . $root . "Files/Updates/Backup.sql && unset PGPASSWORD && unset PGUSER"; 
    exec($string);
    shell_exec($string);
Run Code Online (Sandbox Code Playgroud)

编辑(克雷格林格的回答):

试试你的代码,我收到错误。 在此处输入图片说明 1:从该页面捕获所有一般错误

对于图像在新选项卡中打开链接以获得完整尺寸。

Par*_*hta 5

您可以尝试使用以下命令。我也有同样的问题。我通过使用附加的代码修复了这个问题:

<?php
    exec('pg_dump --dbname=postgresql://username:password@127.0.0.1:5432/mydatabase > dbbackup.sql',$output);
    print_r($output);
?>
Run Code Online (Sandbox Code Playgroud)