[pgsql-jp: 29662] スキーマないしはオーナー単位のバックアップ/リカバリー

Mashiki mashiki @ yanah.com
2003年 4月 18日 (金) 10:03:03 JST


Mashikiです。こんにちは。

7.3.0以降DB内に複数のスキーマを定義できるようになり、
スキーマが異なれば同名のテーブルも作成できるようになりました。

 そこで以下のように、1つのDBクラスタの中にアプリケーションごとにスキー
マとユーザーを作成し、さらにアプリケーション共通で用いられるの社員情報や
組織情報や辞書などのテーブルを格納するスキーマを作成し、各アプリケーショ
ンのユーザーから参照できるように権限などを与えて共有したいと考えます。

データベースクラスタ db_A
 ・スキーマ schema_B (オーナーはuser_B)
   ・テーブル table_B1
   ・テーブル table_B2
   ・テーブル table_B3
 ・スキーマ schema_C (オーナーはuser_C)
   ・テーブル table_C1
   ・テーブル table_C2
   ・テーブル table_C3
 ・スキーマ schema_D (オーナーはuser_D)
   ・テーブル table_D1
   ・テーブル table_D2
   ・テーブル table_D3
 ・スキーマ schema_common (オーナーはcommon)
      (他のユーザーに参照権限を与えている)
   ・テーブル 社員情報
   ・テーブル 所属情報
   ・テーブル 辞書1
   ・テーブル 辞書2


アプリケーションごとにデータベースクラスタを分けたくない理由は

・各アプリケーションのクラスタに共通のデータのコピーを持つと
  ・サイズが大きい
  ・夜間バッチ処理により毎日更新されるが時間がかかる
 ため、HDDの使用量と夜間バッチの実行時間がアプリの数に比例して
 大きくなってしまう。また管理も大変。
・共通データのみを別データベースクラスタにすると
  ・各アプリケーションから複数のコネクションを張る必要がある
  ・JOINができない

などのデメリットがあったためです。


で、最初のデザインにして共通データの共有はうまくいっているのですが、
データのバックアップとリカバリーでつまづいてしまいました。

・pg_dumpにスキーマないしはオーナーを限定するオプションがない。

・データベースごとバックアップを取った場合、ハードウエア異常など
 すべてを復元するには簡単であるが、アプリケーションまたは運用の
 トラブルで、あるアプリケーションのスキーマのみ過去の状態に戻し
 たい時に全体のバックアップを手で編集し必要なオブジェクトだけ
 復元必要があるが、pg_dumpのオブジェクトのバックアップ順序がスキ
 ーマまたはオーナーを意識していないようで手間がかかりすぎる。
 (手で編集せず、connectをたよりに必要な部分だけ集めてくるような
  フィルターを書けばいいんでしょうけど)

・アプリごとバッチファイルで-tオプション指定でテーブルごとバック
 アップをとっていくには管理が大変なのとファンクション、シーケンス
 など他のオブジェクトが復元されない。

とうまくいきません。

あるDBクラスタに対しスキーマないしはオーナー単位のバックアップ/
リカバリーを簡単に行う方法はないでしょうか?

# 最後まで読んでいただきありがとうございました



pgsql-jp メーリングリストの案内