|
653 | 653 | or rewrite the query per a user-defined rule. |
654 | 654 | These options are discussed below. |
655 | 655 | </span> |
656 | | -《マッチ度[89.233038]》ビューが<code class="command">INSERT</code>、<code class="command">UPDATE</code>、<code class="command">DELETE</code>などの目的リレーションとして名付けられた場合はどうなるのでしょうか? |
| 656 | +ビューが<code class="command">INSERT</code>、<code class="command">UPDATE</code>、<code class="command">DELETE</code>、<code class="command">MERGE</code>などの対象リレーションとして名付けられた場合はどうなるのでしょうか? |
657 | 657 | 上で説明したような置換をすると、結果リレーションが副問い合わせの範囲テーブル項目を指す問い合わせツリーができてしまい、それは上手く機能しません。しかし、いくつかのケースでは<span class="productname">PostgreSQL</span>はビューの更新をサポートする事ができます。 |
658 | 658 | ユーザエクスペリエンスの複雑さの順に、ビューから参照されているテーブルでの自動的な置換、ユーザ定義トリガの実行、ユーザ定義ルールごとの問い合わせの書き換えがあります。 |
659 | 659 | これらのオプションについては、以下で説明します。 |
660 | | -《機械翻訳》ビューが<code class="command">INSERT</code>、<code class="command">UPDATE</code>、<code class="command">DELETE</code>、<code class="command">MERGE</code>のターゲットリレーションとして記名的である場合はどうなりますか。 |
661 | | -上記の置換を行うと、結果の問い合わせツリーがサブクエリレンジ-テーブルエントリを指しているリレーションが得られますが、これは機能しません。 |
662 | | -ただし、いくつかの方法があります<span class="productname">PostgreSQL</span>サポートは更新の外観をビューにすることができます。 |
663 | | -ユーザのオーダーで経験された複雑さは、ビューの基礎となるテーブルで自動的に置き換えること、実行でユーザ定義のトリガを置き換えること、ユーザ定義のルールごとにクエリを書き直すことである。 |
664 | | -これらのオプションについては後述する。 |
665 | 660 | </p><p> |
666 | 661 | <span class="original"> |
667 | 662 | If the subquery selects from a single base relation and is simple |
|
674 | 669 | information on the kinds of view that can be automatically updated, see |
675 | 670 | <xref linkend="sql-createview"/>. |
676 | 671 | </span> |
677 | | -《マッチ度[88.536155]》副問い合わせが単一の基底リレーションを参照しかつ十分に単純である時、リライタは副問い合わせを基となる基底リレーションに自動的に置き換え、したがって、<code class="command">INSERT</code>、<code class="command">UPDATE</code>あるいは<code class="command">DELETE</code>を適切な方法で基底リレーションに適用する事ができます。 |
678 | | -この場合の<span class="quote">「<span class="quote">十分に単純</span>」</span>なビューは<em class="firstterm">自動的に更新可能</em>であると呼ばれます。自動的に更新可能なビューに関するより詳細な情報については、<a class="xref" href="sql-createview.html" title="CREATE VIEW"><span class="refentrytitle">CREATE VIEW</span></a>を参照してください。 |
679 | | -《機械翻訳》サブクエリが単一の基本リレーションから選択され、シンプルが十分である場合、リライタは自動的にサブクエリを基礎となる基本リレーションに置き換えて、<code class="command">INSERT</code>、<code class="command">UPDATE</code>、<code class="command">DELETE</code>、または<code class="command">MERGE</code>が適切な方法で基本リレーションに適用されるようにすることができます。 |
680 | | -そのための<span class="quote">「<span class="quote">シンプルで十分な</span>」</span>景色を<em class="firstterm">自動的に更新可能</em>と呼びます。 |
681 | | -自動的に更新できるビューの種類の詳細については、<a class="xref" href="sql-createview.html" title="CREATE VIEW"><span class="refentrytitle">CREATE VIEW</span></a>を参照してください。 |
| 672 | +副問い合わせが単一の基底リレーションを参照しかつ十分に単純である時、リライタは副問い合わせを基となる基底リレーションに自動的に置き換え、したがって、<code class="command">INSERT</code>、<code class="command">UPDATE</code>、<code class="command">DELETE</code>あるいは<code class="command">MERGE</code>を適切な方法で基底リレーションに適用できます。 |
| 673 | +この場合の<span class="quote">「<span class="quote">十分に単純</span>」</span>なビューは<em class="firstterm">自動的に更新可能</em>であると呼ばれます。 |
| 674 | +自動的に更新可能なビューに関するより詳細な情報については、<a class="xref" href="sql-createview.html" title="CREATE VIEW"><span class="refentrytitle">CREATE VIEW</span></a>を参照してください。 |
682 | 675 | </p><p> |
683 | 676 | <span class="original"> |
684 | 677 | Alternatively, the operation may be handled by a user-provided |
|
694 | 687 | but another unexpanded range-table entry is added to the query |
695 | 688 | to represent the view in its capacity as the result relation. |
696 | 689 | </span> |
697 | | -《マッチ度[87.603306]》もう一つの方法として、ビューに対するユーザ定義の<code class="literal">INSTEAD OF</code>トリガによってこれらのコマンドを処理する事ができます。この場合、書き換えは少々違う形で行われます |
698 | | -(<a class="xref" href="sql-createtrigger.html" title="CREATE TRIGGER"><span class="refentrytitle">CREATE TRIGGER</span></a>を参照してください)。 |
| 690 | +もう一つの方法として、ビューに対するユーザ定義の<code class="literal">INSTEAD OF</code>トリガによってこれらのコマンドを処理できます(<a class="xref" href="sql-createtrigger.html" title="CREATE TRIGGER"><span class="refentrytitle">CREATE TRIGGER</span></a>を参照してください)。 |
| 691 | +この場合、書き換えは少々違う形で行われます |
699 | 692 | <code class="command">INSERT</code>に対しては、リライタはビューに全く何もせず、問い合わせの結果リレーションをそのままにします。 |
700 | | -<code class="command">UPDATE</code>と<code class="command">DELETE</code>に対しては、コマンドが更新もしくは削除しようとする<span class="quote">「<span class="quote">古い</span>」</span>行を生成するためにビュー問い合わせを展開する必要がまだあります。 |
| 693 | +<code class="command">UPDATE</code>、<code class="command">DELETE</code>、<code class="command">MERGE</code>に対しては、コマンドが更新、削除もしくはマージしようとする<span class="quote">「<span class="quote">古い</span>」</span>行を生成するためにビュー問い合わせを展開する必要がまだあります。 |
701 | 694 | そのため、ビューは通常通り展開されますが、もう一つの展開されない範囲テーブル項目が結果リレーションとしてビューを表す問い合わせに追加されます。 |
702 | | -《機械翻訳》あるいは、オペレーションは、ビューのユーザ提供<code class="literal">代わり</code>トリガによって取り扱われてもよい(<a class="xref" href="sql-createtrigger.html" title="CREATE TRIGGER"><span class="refentrytitle">CREATE TRIGGER</span></a>を参照)。 |
703 | | -このケースでは、書き直しの動作が少し異なります。 |
704 | | -<code class="command">INSERT</code>の場合、リライタはビューに対して何も行わず、クエリの結果リレーションとして残します。 |
705 | | -<code class="command">UPDATE</code>、 <code class="command">DELETE</code>、<code class="command">MERGE</code>については、コマンドが更新、削除、マージに対して試みる<span class="quote">「<span class="quote">古い</span>」</span>行を生成するために、ビュークエリを拡張する必要があります。 |
706 | | -したがって、ビューは通常どおり拡張ですが、拡張されていない別のレンジ-テーブルエントリがクエリに追加され、結果としてリレーションとしての能力でビューを表します。 |
707 | 695 | </p><p> |
708 | 696 | <span class="original"> |
709 | 697 | The problem that now arises is how to identify the rows to be |
|
720 | 708 | <literal>INSTEAD OF</literal> trigger. It is up to the trigger to work |
721 | 709 | out what to update based on the old and new row values. |
722 | 710 | </span> |
723 | | -《マッチ度[90.697674]》ここで起こる問題はビューで更新される行をどのように特定するかということです。 |
| 711 | +ここで起こる問題はビューで更新される行をどのように特定するかということです。 |
724 | 712 | 結果リレーションがテーブルの場合、更新する行の物理的な位置を特定するために特別な<acronym class="acronym">CTID</acronym>項目が目的リストに追加されることを思い出して下さい。 |
725 | 713 | ビューの行には実際の物理的な位置がないため、ビューには<acronym class="acronym">CTID</acronym>がありませんので、これは結果リレーションがビューの場合には上手くいきません。 |
726 | | -その代わり、<code class="command">UPDATE</code>や<code class="command">DELETE</code>操作では、特別な<code class="literal">行全体</code>の項目が目的リストに追加されていて、それはビューからすべての列を含むように展開されています。 |
| 714 | +その代わり、<code class="command">UPDATE</code>、<code class="command">DELETE</code>、<code class="command">MERGE</code>操作では、特別な<code class="literal">行全体</code>の項目が目的リストに追加されていて、それはビューからすべての列を含むように展開されています。 |
727 | 715 | エグゼキュータはこの値を使って<span class="quote">「<span class="quote">古い</span>」</span>行を<code class="literal">INSTEAD OF</code>トリガに提供します。 |
728 | 716 | 新旧の行の値に基づいて更新するものを計算するのはトリガの責任です。 |
729 | 717 | </p><p> |
|
737 | 725 | <command>MERGE</command>, which currently does not support rules on |
738 | 726 | the target relation other than <command>SELECT</command> rules. |
739 | 727 | </span> |
740 | | -《マッチ度[65.579710]》別の方法としては、ビューに対する<code class="command">INSERT</code>、<code class="command">UPDATE</code>、<code class="command">DELETE</code>コマンドに代替の動作を指定する<code class="literal">INSTEAD</code>ルールを定義する事です。 |
| 728 | +別の方法としては、ビューに対する<code class="command">INSERT</code>、<code class="command">UPDATE</code>、<code class="command">DELETE</code>コマンドに代替の動作を指定する<code class="literal">INSTEAD</code>ルールを定義する事です。 |
741 | 729 | これらのルールは、ビューではなくコマンドを、通常は1つもしくは複数のテーブルを更新するコマンドに書き換えます。 |
742 | 730 | それが<a class="xref" href="rules-update.html" title="39.4. INSERT、UPDATE、DELETEについてのルール">39.4</a>の論題になります。 |
743 | | -《機械翻訳》もう1つの可能性は、ユーザで<code class="command">INSERT</code>、<code class="command">UPDATE</code>、<code class="command">DELETE</code>コマンドの代わりにアクションを指定する<code class="literal">INSTEAD</code>ルールをビューが定義することです。 |
744 | | -これらのルールは、コマンドを、通常はビューではなく1つ以上のテーブルを更新するコマンドに書き換えます。 |
745 | | -それは<a class="xref" href="rules-update.html" title="39.4. INSERT、UPDATE、DELETEについてのルール">39.4</a>のトピックです。 |
746 | | -ノートこれは<code class="command">MERGE</code>では機能しません。 |
747 | | -現在、<code class="command">SELECT</code>ルール以外のターゲットリレーションではサポートルールがありません。 |
| 731 | +これは<code class="command">MERGE</code>では機能しないことに注意してください。現在、<code class="command">SELECT</code>ルール以外の対象リレーションでのルールをサポートしていません。 |
748 | 732 | </p><p> |
749 | 733 | <span class="original"> |
750 | 734 | Note that rules are evaluated first, rewriting the original query |
|
765 | 749 | triggers, they will override the default behavior of automatically |
766 | 750 | updatable views. |
767 | 751 | </span> |
768 | | -《マッチ度[82.828283]》単純なビューに対する<code class="command">INSERT</code>、<code class="command">UPDATE</code>あるいは<code class="command">DELETE</code>コマンドの自動書き換えは常に最後に試みられます。したがって、ビューがルールもしくはトリガを持っていた場合、これらは更新可能ビューのデフォルト動作を上書きします。 |
769 | | -《機械翻訳》シンプルビューの<code class="command">INSERT</code>、<code class="command">UPDATE</code>、<code class="command">DELETE</code>、<code class="command">MERGE</code>クエリの自動書き換えは、常に最後に試行されます。 |
770 | | -したがって、ビューにルールまたはトリガーがある場合、自動的に更新可能ビューのデフォルト動作は上書きになります。 |
| 752 | +単純なビューに対する<code class="command">INSERT</code>、<code class="command">UPDATE</code>、<code class="command">DELETE</code>あるいは<code class="command">MERGE</code>問い合わせの自動書き換えは常に最後に試みられます。 |
| 753 | +したがって、ビューがルールもしくはトリガを持っていた場合、これらは自動的に更新可能なビューのデフォルト動作を上書きします。 |
771 | 754 | </p><p> |
772 | 755 | <span class="original"> |
773 | 756 | If there are no <literal>INSTEAD</literal> rules or <literal>INSTEAD OF</literal> |
|
0 commit comments