0

テーブルPersonとそれにアクセスするいくつかのアプリケーションを含む SQL データベースがあるとします。Person何らかの理由で、下位互換性のない方法でテーブルを変更したいと考えています。

互換性を維持するための考えられる解決策の 1 つは、テーブルの名前を に変更し、従来のテーブルと同じインターフェイスを提供するビューUserを作成することです。Person(必要に応じてon inserton update、およびon deleteトリガーを追加します)。

このアプローチには、いくつかの変更を加えると、意味的に正しい名前が利用できなくなる可能性があるという問題があります。

DBバージョンに応じてスキーマ「インターフェース」を「ネームスペース」するためのよく知られたベストプラクティスはありますか?

または、下位互換性を維持するためのより良い方法はありますか?

4

1 に答える 1

1

DBバージョンに応じてスキーマ「インターフェース」を「ネームスペース」するためのよく知られたベストプラクティスはありますか?

これは一般的な要件ではありませんが、同様のことが必要になると、別のスキーマ (名前空間) にあるテーブルの下位互換性のあるラッパーを含む新しいスキーマを作成する傾向がありました。次にsearch_path、下位互換テーブルを必要とするユーザーがそれを参照し、他のユーザーが新しいバージョンを参照できるように、ユーザーごとに を設定します。

BC ビューには、RULEまたは (新しい PostgreSQL バージョンでは)通常のスキーマから明示的にテーブルの現在のDO INSTEADバージョンを参照するトリガーがあります。たとえば、必要に応じて書き込みをサポートします。public.People

これは、ログインユーザーごとに BC が必要な場合、または (可能性は低いですが)各セッションでコマンドALTER USER ... SET search_pathを実行するために BC を必要とするアプリケーションを設定できる場合にのみ機能します。SET search_path

于 2013-07-18T07:52:43.740 に答える