转一个有意思的利用存储过程备份恢复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日志恢复增量数据部分),化险为夷! 废 ...
随机推荐
- thinkerCMS是一款thinkphp写的微型cms框架可以参考下
http://www.thinkphp.cn/code/1764.html thinkphp官网thinkercms介绍 http://cms.thinke ...
- 寻路算法A*, JPS(跳点搜索)的一些杂谈
A*是一个比较经典的启发式寻路算法.是基于dijkstra算法,但是加入了启发函数,使路径搜索效率更高.实现起来很简单.不过要做到通用性高,比如支持各种不同类型的地图,甚至不仅仅是地图,而是个图结构如 ...
- Swoole学习(七)Swoole之异步TCP服务器的创建
环境:Centos6.4,PHP环境:PHP7 <?php //创建TCP服务器 /** * $host 是swoole需要监听的ip,如果要监听本地,不对外服务,那么就是127.0.0.1;如 ...
- spring数据源、数据库连接池
什么是数据源.数据库连接池? DataSource通常被称为数据源,它包含连接池和连接池管理两个部分,习惯上也经常把DataSource称为连接池. 数据库连接池的基本思想:为数据库连接建立一个“缓冲 ...
- 20145322第一次JAVA实验报告
20145322第一周JAVA实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验名称:Java开发环境的熟悉(Linux + Eclipse) 实验日期:2016.04.08 实 ...
- char,short,int长度
数据类型的本质就是固定内存大小的别名 char:1byte short: 2byte int:4byte 其实变量也是对连续内存的别名,相当于这段内存的句柄.钩子
- MR案例:外连接代码实现
[外连接]是在[内连接]的基础上稍微修改即可.具体HQL语句详见Hive查询Join package join.map; import java.io.IOException; import java ...
- 生信实验室收集---Dana Pe'er Lab
Dana Pe'er Lab of Computational Systems Biology Dana Pe'er是哥伦比亚大学生物科学系的副教授,被认为是计算系统生物学的主要研究人员之一.Dana ...
- LeetCode——Longest Word in Dictionary through Deleting
1. Question Given a string and a string dictionary, find the longest string in the dictionary that c ...
- RocketMQ 自己的整理和理解
每个人的想法不同, RocketMQ 介绍的时候就说 是阿里从他们使用的上 解耦出来 近一步简化 便捷的 目的当然是 让其能快速入手和开发 如果不是在项目设计层面上 只是使用的话 从Git上下载该项目 ...