转一个有意思的利用存储过程备份恢复PostgreSQL
【转自 housonglin1213 的博客】http://blog.csdn.net/housonglin1213/article/details/51005540
1、自定义函数脚本备份
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、已备份自定义函数脚本的恢复
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;
其中该方法中的参数:func_name为函数名称,即:指定要恢复的函数。
转一个有意思的利用存储过程备份恢复PostgreSQL的更多相关文章
- ORACLE 11G 利用泠备份恢复standby库
利用泠备份恢复standby数据库 開始使用泠备份进行db恢复 2.1,停止掉standby库 SQL> shutdown immediate; Database closed. Databas ...
- 利用增量备份恢复因归档丢失造成的DG gap
故障现象:data guard归档出现gap,悲剧的是丢失的归档在主库上被rman备份时删除了,丢失的归档大约有20几个,数据库大小约2T,如果重建DG将非常耗时间,因此决定利用增量备份的方式恢复DG ...
- 云HBase备份恢复,为云HBase数据安全保驾护航
摘要: 介绍了阿里云HBase自研备份恢复功能的基本背景以及基本原理架构和基本使用方法. 云HBase发布备份恢复功能,为用户数据保驾护航.对大多数公司来说数据的安全性以及可靠性是非常重要的,如何 ...
- 11g RAC 如何备份OCR,利用备份恢复OCR,ocrdump
OCR备份 OCR的备份有2种方式,自动备份和手工备份. 自动备份策略: Oracle Clusterware 每隔4小时,CRSD 进程会自动对OCR 进行一次备份,在任意时刻,oracle 总会保 ...
- 解说mysql之binlog日志以及利用binlog日志恢复数据
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
- mysql之6备份恢复
基本意义: 将数据另存到其他设备,以便于出现问题时恢复数据 为什么要备份: 灾难恢复:需求改变:测试 几个事先需要考虑的问题: 可以容忍丢失多长时间的数据?恢复要在多长时间内完成?是否 ...
- Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...
- Mysql利用binlog日志恢复数据操作(转)
a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...
- 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...
随机推荐
- Spring编码过滤器:解决中文乱码
Spring编码过滤器:解决中文乱码 针对问题: 前台JSP页面和JAVA代码中使用了不同的字符集进行编码的时候就会出现表单提交的数据或者上传/下载中文名称文件出现乱码的问题: 解决方案: web.x ...
- Ant Design 常用命令汇总
Ant Design React 安装 1. 安装脚手架工具# antd-init 是一个用于演示 antd 如何使用的脚手架工具,真实项目建议使用 dva-cli. $ npm install an ...
- MVC中 关于退出按钮的写法
public ActionResult Logoff() { Session.Abandon(); Session.Clear(); FormsAuthentication.SignOut(); re ...
- 20145301Java课程总结
20145301 Java课程总结 每周读书笔记链接汇总 第一周读书笔记: http://www.cnblogs.com/5301z/p/5248888.html 第二周读书笔记: http://ww ...
- 20145324 《Java程序设计》第1周学习总结
20145324 <Java程序设计>第1周学习总结 教材学习内容总结 1.Java是程序语言.标准规范.代表解决问题的平台 2.三大平台:Java SE(JVM.JRE.JDK与Java ...
- 【前端】Vue.js经典开源项目汇总
Vue.js经典开源项目汇总 原文链接:http://www.cnblogs.com/huyong/p/6517949.html Vue是什么? Vue.js(读音 /vjuː/, 类似于 view) ...
- uboot下如何查看内存里的数据
答:使用md工具 md.b $address $count (从地址$address处显示$count个字节的数据,b=byte,8位) md.w $address $count (从地址$addre ...
- poj-2259 team queue(数据结构)
第一遍看的时候立即想到了哈希表. 再想时觉得两个队列,一个用来排队伍之间的顺序,一个用来排队伍内部成员的顺序即足够了. DEQUE的时候先判断哪只队伍排在队首,之后再让该队伍中的首队员出列. 整体没有 ...
- .Net Core Linux部署之进程守护 Supervisor 安装配置
1.Supervisor 安装 //安装easy_install yum install python-setuptools //安装Supervisor easy_install superviso ...
- spark SQL学习(spark连接hive)
spark 读取hive中的数据 scala> import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql. ...