第5章 更新可能なビュー


ビューは、updatable とマークできます。多くの場合、ビュー定義を使用すると、INSERT/UPDATE/DELETE 操作を処理するトリガーを手動で定義しなくても、ビューを基本的にデータブルにすることができます。

本質的には、以下のようなクエリーで定義できません。

  • セット操作(INTERSECTEXCEPTUNION
  • 個別の を選択します
  • 集約(集約関数、GROUP BYHAVING)。
  • LIMIT 句。

UNION ALL は、各 UNION ブランチ自体が本質的にアップデータブルな場合にのみ、本質的にアップデータブルビューを定義できます。UNION ALL で定義されるビューは、パーティション化されたユニオンの場合は、固有の INSERT ステートメントに対応し、INSERT は単一のパーティションに属する値を指定します。詳細は、『 Federated optimizations 』の「 partitioned union 」を参照してください。

列に直接マップされていない view 列は更新できないので、UPDATE set 句でターゲットまたは INSERT 列に対象にすることはできません。

ビューが結合クエリーによって定義されている場合や、WITH 句がある場合、依然としてキャッシュ可能なものである可能性があります。ただし、このような状況ではさらに制限があり、その結果のクエリー計画では複数のステートメントが実行される可能性があります。非単純なクエリーをデータブルにするには、以下の基準が適用されます。

  • INSERT/UPDATE は、単一の key-preserved テーブルしか変更できません。
  • DELETE 操作を許可するには、1 つの key-preserved テーブルのみが必要です。

    key-preserved テーブルの詳細は、「 Key-preserved tables 」を参照してください。

デフォルトの処理が利用できない場合や、INSERT/UPDATE/DELETE の代替実装が必要な場合は、更新手順またはトリガーを使用して各操作を処理する手順を定義することができます。詳細は、「 更新手順(Triggers) 」を参照してください。

以下で、本質的に updatable denormalized ビューの例を見てみましょう。

create foreign table parent_table (pk_col integer primary key, name string) options (updatable true);

create foreign table child_table (pk_col integer primary key, name string, fk_col integer, foreign key (fk_col) references parent_table (pk_col)) options (updatable true);

create view denormalized options (updatable true) as select c.fk_col, c.name as child_name, p.name from parent_table as p, child_table as c where p.pk_col = c.fk_col;
Copy to Clipboard Toggle word wrap

単一の key-preserved テーブル である child_table をターゲットとするため、このビューに対して挿入(fk_col、child_name) の挿入などのクエリーは成功します。ただし、各 parent_ table キーに複数の行を持つ parent_table にマップされるので、正規化(名前)値('a')に挿入 すると失敗します。つまり、これは key-preserved ではありません。

また、子エンティティーが関連付けられている可能性があるため、parent_table に対する INSERT がビューに表示されない可能性があります。

すべてのシナリオが機能する訳ではありません。上記の例では、p. pk_col を使用して定義されるビューと共に denormalized(pk_col、child_name)値(<a')に挿入 すると失敗します。ロジックはまだキーの値と同じであることを考慮しないためです。

5.1. key-preserved テーブル

key-preserved テーブルには、クエリーの結果に展開される際に一意のままになるプライマリーキーまたは一意のキーがあります。SELECT 句のキー列を参照するのに実際に必要はないことに注意してください。クエリーエンジンは結合構造を分析して key-preserved テーブルを検出できます。エンジンは、key-preserved テーブルへの参加を外部キーのいずれかに対して行うようにします。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat