PostgreSQL查看DB中trigger

本文介绍了一种用于分析B2C订单系统的触发器的方法。通过特定的SQL查询,可以找出非系统内部的触发器及其关联的函数,并进一步利用d和sf命令深入探究触发器的具体功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


b2c_product=# select
        t.tgname,
        n.nspname,
        c.relname,
        p.proname
from
        pg_trigger t
join
        pg_class c
  on
        t.tgrelid = c.oid
join
        pg_namespace n
  on
        c.relnamespace = n.oid
join
        pg_proc p
  on
        t.tgfoid = p.oid
where
        t.tgisinternal = 'f'
;
                    tgname                     | nspname |         relname          |           proname            
-----------------------------------------------+---------+--------------------------+------------------------------
 b2c_order_xxx_trigger           | public  | b2c_order_yyy    | check_refund_zzz


注意:


如果直接用如下SQL语句,会查找出来的包括所有系统中的触发器(比如CHECK外键的trigger)!

所以上述SQL中加了限制trigger.tgisinternal = 'f',



select tgname,pg_class.relname,pg_proc.proname
from ( pg_trigger join pg_class on tgrelid=pg_class.oid )
join pg_proc on tgfoid=pg_proc.oid;


最后,使用


\d   relname 
\sf proname ()

这样就可以详细分析出触发器的功能。





### PostgreSQL 中使用 GRANT 命令进行权限管理 #### 权限分类与作用范围 在 PostgreSQL 数据库管理系统中,`GRANT` 和 `REVOKE` 是用于管理和控制数据库对象访问权限的核心命令。这些命令允许管理员精确地定义哪些用户可以对特定的对象执行何种操作。 - **数据库级别的权限**:包括创建新数据库、连接到现有数据库以及临时表的使用权等[^1]。 - **模式(Schema)级别的权限**:涉及对整个模式的操作权利,比如能够查看该模式下的所有对象(`USAGE`)或者在其内部创建新的实体(`CREATE`)。 - **表/视图级别及其他具体对象上的权限**:针对单个表格或视图设置读取 (`SELECT`)、插入 (`INSERT`)、更新 (`UPDATE`) 或删除 (`DELETE`) 的能力;还可以授予对序列(sequence)、函数(functions)和其他类型的数据库对象的具体权限[^2]。 #### 授予权限时使用的语法结构 当需要赋予某位用户某种形式的数据操纵许可时,通常会采用如下所示的标准 SQL 语句格式: ```sql -- 对于数据库层面的权限授予权利 GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,…] | ALL [ PRIVILEGES ] } ON DATABASE database_name [,…] TO role_specification [,…] [ WITH GRANT OPTION ]; -- 示例:授权用户 'example_user' 在名为 'my_database' 的数据库上有创建的权利 GRANT CREATE ON DATABASE my_database TO example_user; ``` 对于更细粒度的对象(如表),则可以通过下面的方式来进行权限配置: ```sql -- 表面上看是对单一资源设定规则 GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER } [, …] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, …] | ALL TABLES IN SCHEMA schema_name [, …] } TO role_specification [,…] [ WITH GRANT OPTION ]; ``` 这里给出几个具体的例子来展示如何实际应用上述概念: - 如果希望给予某个角色在整个指定模式中的全部查询权限,则应编写类似这样的指令: ```sql -- 将模式 public 下的所有表的选择权授予 user_role GRANT SELECT ON ALL TABLES IN SCHEMA public TO user_role; ``` - 若要让一位开发者能够在开发环境中自由地测试而不影响生产数据,那么可能就需要为其提供一个专门用来练习的新建数据库及其内部一切必要的构建权限: ```sql -- 创建一个新的数据库供 dev_user 使用并赋予其在此数据库上的完全控制权 CREATE DATABASE test_db OWNER dev_user; GRANT ALL PRIVILEGES ON DATABASE test_db TO dev_user; ``` 最后值得注意的是,在某些情况下还存在一种特殊的公共角色(PUBLIC),它代表了任何未特别指明身份的人也可以获得相应的默认访问水平。不过出于安全考虑,默认情况下最好保持谨慎的态度对待PUBLIC的角色权限分配[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值