转一个有意思的利用存储过程备份恢复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日志恢复增量数据部分),化险为夷! 废 ...
随机推荐
- Django学习笔记之Django QuerySet的方法
一般情况下,我们在写Django项目需要操作QuerySet时一些常用的方法已经满足我们日常大多数需求,比如get.filter.exclude.delete神马的感觉就已经无所不能了,但随着项目但业 ...
- 20145324 《Java程序设计》第3周学习总结
20145324 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 1.要产生对象必须先定义类,类是对象的设计图,对象是类的实例,建立实例要用new 2.参数名称与对象数据成员 ...
- 20144303 《Java程序设计》第二次实验实验报告
20144303 <Java程序设计>第二次实验实验报告 北京电子科技学院(besti)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握U ...
- java httpUtil
public class HttpUtils { public static String getContent(String url, Map<String, String> heads ...
- webservice用cxf发布SOAP
cxf的安装,就是把文件解压,然后配置环境变量 http://cxf.apache.org/download.html这是官网下载 解压到这里 环境变量 wsdl2java命令测试 1.新建java项 ...
- 自学Java测试代码 - 简单地Student类
2017-08-23 23:45:38 writer:pprp 写这个还蛮开心的 package test; public class Student { //创建成员变量 String name ...
- SPSS t 检验
在针对连续变量的统计推断方法中,最常用的是 t 检验和方差分析两种. t 检验,又称 student t 检验,主要用于样本含量较小(例如n<30),总体标准差未知的正态分布资料.它是用 t 分 ...
- 【三小时学会Kubernetes!(四) 】Deployment实践
Deployment 部署 Kubernetes 部署可以帮助每一个应用程序的生命都保持相同的一点:那就是变化.此外,只有挂掉的应用程序才会一尘不变,否则,新的需求会源源不断地涌现,更多代码会被开发出 ...
- phalcon: dispatcher->forward地址转发/重定向
比如,我indexController里面的indexAction,因为用户没有穿参数,我要重定向到 errorAction里面 $this->dispatcher->forward(ar ...
- Excel如何关闭进程
在使用Microsoft.Interop.Excel对象的时候_application.Quit()并不能彻底关闭Excel进程,原因是没有释放掉非托管组建的引用. System.Runtime.In ...