2017-09-01 30 views
2

私はテストサーバーをテストサーバーに接続しています。私はセレンテストのセットを実行したいと思いますし、テストごとにデータベースをリストアする必要があります。データベースランタイムを復元する方法

私はcliコマンド "createdb"を使ってバックアップを作成しましたが、毎回メインテーブルを削除しますが、サーバー全体をオフにしたりオンにしたりすることなくデータベースを復元するにはどうすればいいですか?フルセットのテストを行うには数時間から数日かかるでしょうか?

必要がない限り、私はおそらくサーバーへの一定の管理アクセスを与えられません。

+0

テーブルやスキーマを削除して再作成できませんか?ダウンタイムを必要とする「データベースの復元」オプションを使用することは、そのような状況では問題があるように見えます。 – Aaron

答えて

1

SQLへの接続をすべて終了することができます(https://stackoverflow.com/a/5109190/2352344参照)。代わりに、データベース全体をドロップするのあなただけのスキーマを削除することができます。

DROP SCHEMA public CASCADE; 
CREATE SCHEMA public; 
+0

私はpg_restoreによってスキーマを復元すると、私もサーバをシャットダウンする必要があると思いました。できるだけ早くチェックするつもりです。 –

+0

データベースをSQLファイルとしてダンプし、psqlだけで復元することができます。 pg_restoreは本当に必要ありません。 – clemens

0

私は思うの代わりにどのように元に戻すについて、テーブルをドロップするか、テーブル内の行を削除します。テストを実行すると、テーブルに入力される項目がわかります。この情報を使用して、テストが終了する直前に、このテストの実行によって作成された行を削除するスクリプトを呼び出します。

+0

私は200以上のテーブルを持っていますが、私の違いが変わるものは、このように管理できません。 –

0

バックアップ/復元用に実際のツールを使用できます(Wal-E、バーマンまたは背もたれ)。特に背もたれを使用すると、変更があるファイルのみを復元するdiff復元を実行できます。

+0

素晴らしいですね。これらのツールはすべて、オープンな接続で日付ベースを復元することができますか? –

+0

どういう意味ですか?人々がデータベースに接続している間にデータベースを復元する?いいえ、物理バックアップと同じようにはできません。あなたのPostgreSQLは稼働しているはずですが、データが一貫しているポイントに達する前に誰も接続できません。 – Arkhena

+0

いいえ、私はちょうどdatebaseをクリアして、サーバを稼動させて復元したいだけです。私はこの時点でユーザーがそれを使用できるかどうか気にしない。 –

0

私はJavaコードから実行するbashスクリプトを作成することで問題を解決しました。

String[] args = new String[]{"./script.sh"}; 
Process proc = new ProcessBuilder(args).start(); 
proc.waitFor(); 

script.sh:

#!/bin/bash 

psql dbname -c "drop schema \"public\" cascade;" 
psql dbname -c "create schema \"public\";" 
psql dbname < "path/backupname" 

私は、スクリプトを使用して、ちょうどおそらく "<" 記号のbecouse、その引数内の引数にしないために持っていました。私はそれに旗の交換が見つかりませんでした。

関連する問題