2

大規模な Postgres データベース (150 を超えるテーブル、200 を超えるカスタム型、ほぼ 1000 の関数、トリガーなど) を含むプロジェクトを継承しました。残念ながら、すべてが 1 つのスキーマにダンプされます ( public)。アプリケーションの観点からは問題なく動作しますが、維持するのは大きな悪夢です。

明らかなことは、これらのオブジェクトを機能ごとに別々のスキーマに分割することです (たとえば、すべてのサプライヤ関連のものはsupplierスキーマに入れ、すべての管理関連のものはadminスキーマに入れます)。もちろん、これが完了すると、新しいスキーマを参照するために、コードにいくつかの変更 (多くの変更) が必要になります。Web アプリケーションに約 2000 個の php ファイルが含まれていることを考えると、かなりの作業になる可能性があります。繰り返しますが、システム内のすべての php は既に で始まっているのでrequire_once('controller/config.php');、すべての新しいスキーマを含めるように検索パスを設定するための呼び出しをそこに追加できSET search_path = 'public, supplier, admin, ...'ます。

問題に対処する他の方法はありますか?データベースの再編成に必要以上の労力を費やしたくありません。また、メイン Web サイトは世界中 (オーストラリア、ヨーロッパ、北米) のクライアントが使用しているため、ダウンタイムはほとんど発生しません。

私は何をすることをお勧めしますか?

4

2 に答える 2

1

search_pathその道を行くなら、その方法があなたがしなければならない方法だと思います。なぜ無意識のうちに解決策が好きではないのですか?あなたがそれを乗り越えることができれば、それはメンテナンスの悪夢を取り除くだろうと思われます。メンテナンスの悪夢と使用法のどちらが悪いsearch_pathですか?

ドキュメントによる

データベースオブジェクトを論理グループに編成して、管理しやすくするため。

于 2012-08-29T14:46:54.500 に答える
0

検索パス ソリューションが気に入らないことは理解できます。ただし、search_path はユーザーごとまたはデータベースごとに設定できることをご存知でしたか? ALTER DATABASE SET search_path を実行できれば完了です。さらに良いことに、それは他の人に影響を与えるグローバルな変更ではありません。

http://www.postgresql.org/docs/9.1/static/config-setting.html

ユーザーごとの設定はクラスターグローバルであり、データベースごとの設定をオーバーライドすることに注意してください。

于 2012-08-30T00:15:04.093 に答える