说明
最近在做数据资产管理平台,需要连接数据源获取元数据信息,触发器是其中的1种数据信息,现在把几类不同的数据库,通过SQL获取的方式整理出来。
MySQL
查询SQL
SHOW TRIGGERS
说明
字段名 | 解释 |
---|---|
Trigger | 触发器名称 |
Event | 触发事件 |
Table | 触发器是建立在哪张表上的 |
Statement | 触发时执行的SQL |
Timing | 触发时机 |
查询结果展示
SQL Server
用于测试获取的环境是SQL Server 2017
查询SQL
select triggers.name as [trigger_name],
tables.name as [table_name],
triggers.is_disabled,
case
when triggers.is_instead_of_trigger = 1 then 'INSTEAD OF'
when triggers.is_instead_of_trigger = 0 then 'AFTER'
else null end as [is_instead_of_trigger],
comments.text
from sys.triggers triggers
inner join sys.tables tables on triggers.parent_id = tables.object_id,
syscomments comments
where triggers.type = 'TR'
and triggers.object_id = comments.id
说明
字段名 | 解释 |
---|---|
trigger_name | 触发器名称 |
table_name | 触发器是建立在哪张表上的 |
syscomments.text | 触发器SQL |
is_instead_of_trigger | 触发器类型 |
syscomments表下的text保存创建触发器的SQL,sys.triggers表保存着触发器的一些基本信息
Oralce
查询SQL
select * from user_triggers
说明
字段名 | 解释 |
---|---|
TRIGGER_NAME | 触发器名称 |
TABLE_NAME | 触发器是建立在哪张表上的 |
TRIGGER_BODY | 触发器主体 |
TRIGGER_TYPE | 触发器类型 |
TRIGGERING_EVENT | 触发事件 |
查询结果展示
PostgreSQL
查询SQL
select tgname, pg_class.relname table_name, pg_proc.proname, n.nspname, pg_proc.prosrc tgbody, pg_trigger.tgtype
from (pg_trigger join pg_class on tgrelid = pg_class.oid)
join pg_proc on tgfoid = pg_proc.oid
join pg_namespace n on pg_class.relnamespace = n.oid
说明
字段名 | 解释 |
---|---|
tgname | 触发器名称 |
table_name | 触发器是建立在哪张表上的 |
proname | 调用函数名称 |
nspname | 模式名称 |
tgbody | 触发器主体 |
tgtype | 触发器类型 |
tgtype看结果应该是触发器类型的code,不知道它的中文值是什么,没了解清楚PG的字典表是哪个。还有触发器也查着。