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;
$$;

你可能感兴趣的:(postgresql)