11

私のサイトは、Ubuntu 11.10 の Postgresql 8.3 サーバーで実行されている Drupal 6 を使用して開発されました。また、webmin バージョン 1.590。

今、テーブル内のレコードを更新したいのですが、実行すると:

UPDATE uac_institution_view SET status = '2' WHERE nid = '9950'

次のようなエラーが表示されます。

SQL の実行に失敗しました: SQL UPDATE uac_institution_view SET status = '2' WHERE nid = '9950' に失敗しました: エラー: ビューを更新できません ヒント: 無条件の ON UPDATE DO INSTEAD ルールが必要です。

問題は、SELECTクエリのみが機能することです。UPDATEINSERTおよびDELETEコマンドが機能していません。上記のエラーで失敗します。

これは許可の問題ですか?構文エラー?他の何か?

4

4 に答える 4

25

デフォルトでは、PostgreSQL ビューは更新できません。ビューを更新する方法を PostgreSQL に伝える必要があります。

これは、「無条件のON UPDATE DO INSTEADルール」を使用して行うか (貼り付けたエラー メッセージにあるように)、できればビュー トリガーを使用して PostgreSQL 9.1 以降で行います。以前の投稿への回答ですべてのリンクを提供しましたが、詳細は次のとおりです。

多くの場合、ビューを読み取り専用のままにして、基になるテーブルを更新するだけの方が適切です。ビューの定義を提供していないため、実際に何が含まれるかはわかりません。質問を実行の出力で更新\d uac_institution_viewpsql、コメントして、そうしたと言ってください。基になるテーブルで直接更新を実行する方法を指摘できるかもしれません。

非常に古いバージョンの PostgreSQL (8.3) を使用しているため、推奨されるINSTEAD OFトリガー アプローチを使用できません。ルールを使用するか、基になるテーブルを直接更新する必要があります。

于 2012-10-31T05:14:54.477 に答える
8

参考までに、ルール/トリガーに関する回答が投稿された後、PostgreSQL 9.3 には自動更新可能なビューが追加されました。バージョン 9.3 は 2013 年 6 月 27 日の時点でベータ 2 であるため、まだ GA ではありません。

例を次に示します

于 2013-08-19T22:09:13.463 に答える