例如,我创建一个这样的触发创建触发器的语句:我想知道哪些表存储事件触发如
CREATE EVENT TRIGGER tr_event_begin
ON ddl_command_start
EXECUTE PROCEDURE event_trigger_begin ();
从该表可以现在以相同的形式拉?或者至少在部分。信息_chema.triggers不包含它,因为它是一个事件触发器,而不是一个普通的触发器。
例如,我创建一个这样的触发创建触发器的语句:我想知道哪些表存储事件触发如
CREATE EVENT TRIGGER tr_event_begin
ON ddl_command_start
EXECUTE PROCEDURE event_trigger_begin ();
从该表可以现在以相同的形式拉?或者至少在部分。信息_chema.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
关系生成的DDL event_triggers,水木清华这样的:
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,尾巴也不行 - 我用它来截断e输出
请告诉我一个请求将只看sql。 –
优秀 - 非常感谢。祝你有美好的一天! –
@Виктор不用担心,如果回答请批准和/或上传 –
请参阅[如何检查PostgreSQL中是否存在触发器?](https://stackoverflow.com/a/33174794/1995738) – klin
这将使用正常的触发器,但我需要事件触发器。 –
[如何检查PostgreSQL中是否存在触发器?](https://stackoverflow.com/questions/33174638/how-to-check-if-trigger-exists-in-postgresql) – pegla