2015-09-04 14 views
6

の一部を復元:PHPバックアップ全体の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クエリ機能が必要になります。私の意見で

+2

なぜPHPを画像に挿入するのですか? – e4c5

+0

私はユーザーインターフェースと管理インターフェースを持っています。ユーザーインターフェイスから、データベースを変更することができます。私はPHPスクリプトを使用して1行だけを復元できるようにするために、管理インタフェースから手動で/コマンドラインから行う必要はありません。 – maxhud

+0

この場合、 '普通の'形式でダンプを作成すると、PHPスクリプトは興味のある主キーを見つけてその行だけを挿入するまでファイルを繰り返し処理できるはずです。 – e4c5

答えて

1

、最も簡単な効果的な解決策は以下のとおりです。

  • メインとバックアップ接続し、定期的にまたは必要に応じて復元/ダンプを実行、別のマシン上でのバックアップサーバーをインストールします外部データラッパーpostgres_fdwを使用するサーバー。

実際には、バックアップサーバーは、比較的小規模なプロジェクトでも必須です。 データ複製はさまざまな方法で実行できます。 ダンプ/リストア(おそらくcronを使用)は最も簡単な方法の1つですが、ストリーミングレプリケーションの設定も特に難しくありません。

バックアップサーバーは、コストを考慮する必要がある場合は、任意のオペレーティングシステムを備えた任意のPCまたはラップトップにすることができます。 これは自宅でも簡単にできると思います。

バックアップサーバーを持つ利点は多様です。時にはそれはライブ節約の解決策です。

+0

偉大な答え。ありがとう。 Idkなぜ私は別のサーバーを使用していなかった。 – maxhud

関連する問題