postgresql 实现用户自定义方法生成脚本的备份及恢复

1、备份函数、触发器函数生成脚本的函数实现

<pre name="code" class="html">CREATE OR REPLACE FUNCTION function_sql_dump()
  RETURNS void AS
$BODY$
DECLARE
	my_cur refcursor;
	isexisted integer:=0;
	oid_var oid;
	role_oid oid;
BEGIN
	--判断临时表是否已经存在
	select count(*) into isexisted from pg_class where relname = 'function_sql_table';
	--如果已经存在则删除
	IF(isexisted !=0)THEN
	DROP TABLE function_sql_table; 
	END IF;
	--创建临时表-用于存储函数sql语句
	CREATE TABLE function_sql_table(t TEXT); 
	select oid into role_oid from pg_roles where rolname='smartsys';
	IF role_oid is null THEN
		return;
	END IF;
	OPEN my_cur FOR select oid from pg_proc where proowner=role_oid order by oid;
	LOOP
	FETCH my_cur INTO oid_var;
		IF NOT FOUND THEN EXIT; END IF;
		INSERT INTO function_sql_table(t) VALUES (pg_get_functiondef(oid_var)); 
	END LOOP;
	CLOSE my_cur;
	COPY function_sql_table TO 'D:/PostgreSQL/9.5/function_sql_bak.sql';
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION function_sql_dump()
  OWNER TO smartsys;
 

补充说明:备份出的sql文件是存储于postgresql数据库服务所在服务器的目录中的。smartsys为数据库用户名

注:pg_get_functiondef(oid_var)方法返回text类型自带换行(效果如下图,需要纵向拉伸才能看到全部信息)



2、已备份函数创建脚本修改后批量还原

<span style="font-size:18px;">-- Function: function_sql_restore(character varying)

-- DROP FUNCTION function_sql_restore(character varying);

CREATE OR REPLACE FUNCTION function_sql_restore(func_name character varying)
  RETURNS void AS
$BODY$
DECLARE
	my_cur refcursor;
	isexisted integer:=0;
	oid_var oid;
	sql_str text;
	sql_var varchar(1024);
BEGIN
	--判断临时表是否已经存在
	select count(*) into isexisted from pg_class where relname = 'function_sql_table';
	--如果已经存在则删除
	IF(isexisted !=0)THEN
	DROP TABLE function_sql_table; 
	END IF;
	--创建临时表-用于存储函数sql语句
	CREATE TABLE function_sql_table(t TEXT); 

	COPY function_sql_table from 'D:/PostgreSQL/9.5/function_sql_bak.sql';

	IF(func_name is not null)THEN
		OPEN my_cur FOR select t from function_sql_table where t like '%'||func_name||'%';
	ELSE
		OPEN my_cur FOR select t from function_sql_table;
	END IF;
	LOOP
		FETCH my_cur INTO sql_str;
		IF NOT FOUND THEN EXIT; END IF;
		execute sql_str;
	END LOOP;
	CLOSE my_cur;
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
</span>
其中该方法中的参数:func_name为函数名称,即:指定要恢复的函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值