我想知道哪个 table 存储事件触发器的触发器的创建语句,例如
I would like to know which table stores the create statement of a trigger for event trigger eg
比如我创建了这样一个触发器:
CREATE EVENT TRIGGER tr_event_begin
ON ddl_command_start
EXECUTE PROCEDURE event_trigger_begin ( );
现在可以从哪个 table 中提取相同的表单?或者至少部分。
information_schema.triggers 不包含它,因为它是事件触发器,而不是普通触发器。
示例:
et=# create or replace function event_trigger_begin() returns event_trigger as $$ begin raise info '%',99; end;$$ language plpgsql;
CREATE FUNCTION
Time: 27.611 ms
et=# CREATE EVENT TRIGGER tr_event_begin
ON ddl_command_start
EXECUTE PROCEDURE event_trigger_begin ( );
CREATE EVENT TRIGGER
Time: 18.293 ms
et=# create table i (i int);
INFO: 99
CREATE TABLE
您可以使用 pg_catalog
关系为 event_triggers 生成 DDL,类似于:
et=# SELECT format('CREATE EVENT TRIGGER %I ON %s EXECUTE PROCEDURE %I()',evtname,evtevent,evtfoid::regproc) as ddl
FROM pg_event_trigger;
ddl
--------------------------------------------------------------------------------------------------
CREATE EVENT TRIGGER tr_event_begin ON ddl_command_start EXECUTE PROCEDURE event_trigger_begin()
(1 row)
最后是获得定义的正确方法:
MacBook-Air:~ vao$ pg_dump -d et -s | tail -20
CREATE FUNCTION event_trigger_begin() RETURNS event_trigger
LANGUAGE plpgsql
AS $$ begin raise info '%',99; end;$$;
ALTER FUNCTION public.event_trigger_begin() OWNER TO vao;
--
-- Name: tr_event_begin; Type: EVENT TRIGGER; Schema: -; Owner: vao
--
CREATE EVENT TRIGGER tr_event_begin ON ddl_command_start
EXECUTE PROCEDURE public.event_trigger_begin();
当然 dbname 不会是 et,tail 也不会工作 - 我用它来截断输出
比如我创建了这样一个触发器:
CREATE EVENT TRIGGER tr_event_begin
ON ddl_command_start
EXECUTE PROCEDURE event_trigger_begin ( );
现在可以从哪个 table 中提取相同的表单?或者至少部分。 information_schema.triggers 不包含它,因为它是事件触发器,而不是普通触发器。
示例:
et=# create or replace function event_trigger_begin() returns event_trigger as $$ begin raise info '%',99; end;$$ language plpgsql;
CREATE FUNCTION
Time: 27.611 ms
et=# CREATE EVENT TRIGGER tr_event_begin
ON ddl_command_start
EXECUTE PROCEDURE event_trigger_begin ( );
CREATE EVENT TRIGGER
Time: 18.293 ms
et=# create table i (i int);
INFO: 99
CREATE TABLE
您可以使用 pg_catalog
关系为 event_triggers 生成 DDL,类似于:
et=# SELECT format('CREATE EVENT TRIGGER %I ON %s EXECUTE PROCEDURE %I()',evtname,evtevent,evtfoid::regproc) as ddl
FROM pg_event_trigger;
ddl
--------------------------------------------------------------------------------------------------
CREATE EVENT TRIGGER tr_event_begin ON ddl_command_start EXECUTE PROCEDURE event_trigger_begin()
(1 row)
最后是获得定义的正确方法:
MacBook-Air:~ vao$ pg_dump -d et -s | tail -20
CREATE FUNCTION event_trigger_begin() RETURNS event_trigger
LANGUAGE plpgsql
AS $$ begin raise info '%',99; end;$$;
ALTER FUNCTION public.event_trigger_begin() OWNER TO vao;
--
-- Name: tr_event_begin; Type: EVENT TRIGGER; Schema: -; Owner: vao
--
CREATE EVENT TRIGGER tr_event_begin ON ddl_command_start
EXECUTE PROCEDURE public.event_trigger_begin();
当然 dbname 不会是 et,tail 也不会工作 - 我用它来截断输出