0

私はpostgresql(したがってルール)が初めてで、周りを見回しましたが、「グローバル」関数を呼び出す例を実際に見つけることができません。

行が削除されたのではなく、削除済みとしてフラグが立てられる正規化されたデータベースを使用しています。DELETE FROM...ただし、代わりに削除ルールを使用してテーブルのdeleted_time列を更新することにより、エンド ユーザーの機能を保持したいと考えています。したがって、各テーブルは共通の関数を使用できるはずですが、これがこのコンテキストでどのように呼び出されるのか、またはどのようにアクセスできるのかわかりNEWませOLDん。

CREATE OR REPLACE RULE rule_tablename_delete AS ON DELETE
TO tablename DO INSTEAD (
   /// call function here to update the table's delete_time column
);

これは正しいアプローチですか?(INSTEAD OF トリガーはビューのみに制限されていることに注意してください)

4

1 に答える 1

4

UPDATE ステートメントを使用するだけです。

create rule rule_tablename_delete as
  on delete to tablename
do instead
   update tablename 
      set delete_time = current_timestamp
    where id = old.id
      and delete_time is null;

id列がそのテーブルの主キーであると仮定します。

いくつかの例がマニュアルにあります: http://www.postgresql.org/docs/9.1/static/rules-update.html

于 2012-06-19T19:39:15.010 に答える