PHP备份整个PostgreSQL数据库,然后恢复表

时间:2015-09-04 21:03:54

标签: php database postgresql

我目前正在使用pg_dump备份整个数据库:

<?php

include_once("../db.php");

$password = getPGPassword();
$user = getPGUser();
$db = getPGDb();

putenv("PGPASSWORD=" . $password);
$dumpcmd = array("pg_dump", "-i", "-U", escapeshellarg($user), "-F", "c", "-b", "-v", "-f", escapeshellarg('/var/www/backups/backup-'.time().'.sql'), escapeshellarg($db));
exec( join(' ', $dumpcmd), $cmdout, $cmdresult );
putenv("PGPASSWORD");

?>

我知道我可以使用psql来恢复整个数据库,但有没有办法可以使用查询有选择地恢复表的一部分?我能想到的最简单的事情是使用psql创建一个临时数据库,从所需的表中读取行,删除基于主串行密钥的冲突行,然后插入表中。

有更好的方法吗?我需要完整的SQL查询功能。

1 个答案:

答案 0 :(得分:1)

在我看来,最简单有效的解决方案是:

  • 在另一台计算机上安装备份服务器
  • 定期或根据需要执行转储/恢复,
  • 使用外部数据包装器postgres_fdw连接主服务器和备份服务器。

在我的实践中,即使是相对较小的项目,也必须使用备份服务器。 数据复制可以通过多种方式完成。 转储/恢复(可能使用cron)是最简单的方法之一,但配置流式复制也不是特别困难。

如果我们必须考虑成本,备份服务器可以是任何具有任何操作系统的PC或笔记本电脑。 我认为这甚至可以在家里轻松完成。

拥有备份服务器的好处是多方面的。有时它是省钱的解决方案。