バージョンごとのドキュメント一覧

38.5. テーブル書き換えイベントトリガの例 #

<title>A Table Rewrite Event Trigger Example</title>

Thanks to the <literal>table_rewrite</literal> event, it is possible to implement a table rewriting policy only allowing the rewrite in maintenance windows. table_rewriteイベントのおかげで、メンテナンスウィンドウでの書き換えを許可するだけでテーブル書き換えポリシーを実装できます。

Here's an example implementing such a policy. これが、そのようなポリシーを実装した例です。

CREATE OR REPLACE FUNCTION no_rewrite()
 RETURNS event_trigger
 LANGUAGE plpgsql AS
$$
---

&#45;&#45;- Implement local Table Rewriting policy:
&#45;&#45;-   public.foo is not allowed rewriting, ever
&#45;&#45;-   other tables are only allowed rewriting between 1am and 6am
&#45;&#45;-   unless they have more than 100 blocks

--- ローカルテーブル書き換えポリシーの実装:
---   public.fooは書き換えが許可されていません
---   その他のテーブルは100ブロック以下であれば、
---   午前1時から午前6時までの間だけ書き換えが許可されます
---
DECLARE
  table_oid oid := pg_event_trigger_table_rewrite_oid();
  current_hour integer := extract('hour' from current_time);
  pages integer;
  max_pages integer := 100;
BEGIN
  IF pg_event_trigger_table_rewrite_oid() = 'public.foo'::regclass
  THEN
        RAISE EXCEPTION 'you''re not allowed to rewrite the table %',
                        table_oid::regclass;
  END IF;

  SELECT INTO pages relpages FROM pg_class WHERE oid = table_oid;
  IF pages > max_pages
  THEN
        RAISE EXCEPTION 'rewrites only allowed for table with less than % pages',
                        max_pages;
  END IF;

  IF current_hour NOT BETWEEN 1 AND 6
  THEN
        RAISE EXCEPTION 'rewrites only allowed between 1am and 6am';
  END IF;
END;
$$;

CREATE EVENT TRIGGER no_rewrite_allowed
                  ON table_rewrite
   EXECUTE FUNCTION no_rewrite();