PostgreSQL 9.5以降、関数pg_event_trigger_ddl_commands()
ddl_command_end
で使用できます イベントトリガー。 TAG
の使用 フィルタ。ALTERされたテーブルの処理に使用できます。 object_identity
(またはobjid
)は、どのテーブルが変更されたかを知るという元の問題を解決するために使用できます。完全なコマンドの取得に関しては、それも利用可能ですが、内部タイプはpg_ddl_command
です。 。
CREATE TABLE t (n INT);
CREATE FUNCTION notice_event() RETURNS event_trigger AS $$
DECLARE r RECORD;
BEGIN
FOR r IN SELECT * FROM pg_event_trigger_ddl_commands() LOOP
RAISE NOTICE 'caught % event on %', r.command_tag, r.object_identity;
END LOOP;
END;
$$
LANGUAGE plpgsql;
CREATE EVENT TRIGGER tr_notice_alter_table
ON ddl_command_end WHEN TAG IN ('ALTER TABLE')
EXECUTE PROCEDURE notice_event();
ALTER TABLE t ADD c CHAR;
出力:NOTICE: caught ALTER TABLE event on public.t