PostgreSQLでは、SQL文が実際に実行されるため、SQL文全体を実行せずにdctUpdate
関数を呼び出す必要があるテーブルに対してUPDATE規則があります。関数。PSQL:関数呼び出しの出力をサイレンシングするか、SELECTなしで呼び出す
create or replace function infoUpdate(windowId in numeric) returns void as $$
begin
if windowId is null then
update info_timestamp set timestamp = now();
else
update info_timestamp set timestamp = now() where window_id = windowId;
end if;
end;
$$ LANGUAGE plpgsql;
create or replace rule info_update_rule as on update to some_table do also select infoUpdate(NEW.window_id);
しかし、私はsome_table
内の行を更新しているため、そのルールがトリガされますコマンドライン上で、私が呼び出すSELECT
句からの無駄な出力を得る:私は関数を呼び出すの知っている唯一の方法は、SELECT dctUpdate(windowId)
ています機能:
db=# update some_table set name = 'foobar' where window_id = 1;
infoupdate
-----------
(1 row)
UPDATE 1
info_update_rule
呼び出し、それがダミー出力を表示せずにinfoUpdate
機能を持たせる方法はありますか?
新しい 'window_id'だけがNULLの場合、テーブル全体のタイムスタンプを' now() 'に設定するのは本当ですか? PostgreSQLのどのバージョンをサポートする必要がありますか? –
@mu:はい、NULLの場合はすべてのタイムスタンプを設定し、PostgreSQL 9.0以降をサポートすることを意味します。 – Fred