PostgreSQL:如何查看存在哪些 table 规则

PostgreSQL: how to see which table RULEs exists

我们在表上使用 RULEs 而不是 TRIGGER 来进行审计。

有没有办法查看存在哪些规则(也许information_schema)?

另外,我可以看看规则的来源吗?也许类似于 pg_proc

这存储在pg_rewrite

您可以使用这样的查询来为 public 架构中的所有表制定规则:

select r.rulename, 
       c.relname as rule_table,
       case r.ev_type  
         when '1' then 'SELECT' 
         when '2' then 'UPDATE' 
         when '3' then 'INSERT' 
         when '4' then 'DELETE' 
       end as rule_event, 
       pg_catalog.pg_get_ruledef(r.oid, true) as definition
from pg_catalog.pg_rewrite r  
  join pg_catalog.pg_class c on r.ev_class = c.oid 
where c.relnamespace = 'public'::regnamespace
  and r.rulename <> '_RETURN';

r.rulename <> '_RETURN' 排除了为视图创建的规则。