Postgresql查看自己创建的函数、过程、触发器函数

1 首先获取用户oid

注意这里指的是每个数据库对应一个用户,具体操作方法请参阅再谈PostgreSQL创建数据库.
在数据库用户创建完成后执行下面的命令获取数据库用户oid并记录.
注意获取数据库用户oid只能使用postgres用户登录数据库.

psql -h host -U postgres;
select oid from pg_authid where rolname='core';
```# 2 查看数据库用户创建的函数、过程、触发器函数```bash
psql -h host -U postgres;

2 查看自己创建的函数、过程、触发器函数

psql -h host -U 数据库用户 -d 数据库;
select * from pg_proc where proowner=187178

3 查看自己创建的表

psql -h host -U 数据库用户 -d 数据库;
select * from pg_tables where tableowner='数据库用户'

4 清除所有自己创建的函数

do $$
	declare 
		v_owner oid;
		v_rec record;
		v_rec1 record;
		v_argtypes text;
	begin
		v_owner := 16385; --用postgres用户查询获取 select oid from pg_authid where rolname='数据库用户名';
		for v_rec in select oid,proname,pronargs,proargtypes,prorettype from pg_proc as t1 where proowner=v_owner loop
			v_argtypes := '';
			if( 2279 = v_rec.prorettype ) then --触发器函数
				for v_rec1 in select t2.relname, t1.tgname 
					from pg_trigger as t1
					inner join pg_class as t2 on t2.oid = t1.tgrelid
					where tgfoid=v_rec.oid loop
						execute format('drop trigger if exists %s on %s;',v_rec1.tgname, v_rec1.relname);
						execute format('drop function if exists %s();',v_rec.proname);
						--raise notice  '%',  format('drop trigger if exists %s on %s;',v_rec1.tgname, v_rec1.relname);
						--raise notice  '%',  format('drop function if exists %s();',v_rec.proname);
				end loop;
			else
				if( v_rec.pronargs > 0 ) then --有参数的函数
					for i in 1..array_length(v_rec.proargtypes,1) loop
						v_argtypes := format('%s%s,',v_argtypes,(select typname from pg_type where oid=v_rec.proargtypes[i-1]));			
					end loop;
					v_argtypes := regexp_replace(v_argtypes,',$','');
					execute format('drop function if exists %s(%s);',v_rec.proname,v_argtypes);		
					--raise notice  '%',  format('drop function if exists %s(%s);%s',v_rec.proname,v_argtypes,v_rec.proargtypes);		
				else
					execute format('drop function if exists %s();',v_rec.proname);	
					--raise notice  '%',  format('drop function if exists %s();',v_rec.proname);
				end if;
			end if;
		end loop;
	end;
$$;
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PostgreSQL中,触发器函数是一个没有参数并且返回trigger类型的函数。在创建触发器之前,首先需要创建这样一个函数触发器函数的基本语法如下: CREATE FUNCTION 触发器函数名称() RETURNS trigger AS $$ BEGIN -- 触发器函数的逻辑处理代码 END; $$ LANGUAGE plpgsql; 触发器函数可以根据需要执行一系列的操作,比如对特定的表进行插入、更新、删除等操作。在触发器函数中,可以使用NEW和OLD关键字来引用插入、更新、删除操作之前和之后的数据。触发器函数应该在创建触发器之前定义,以便在创建触发器时引用该函数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [PostgreSQL 触发器](https://blog.csdn.net/qq_28289405/article/details/80409230)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [postgresql触发器](https://blog.csdn.net/weixin_44847119/article/details/119965859)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kmblack1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值