【转自 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的更多相关文章

  1. ORACLE 11G 利用泠备份恢复standby库

    利用泠备份恢复standby数据库 開始使用泠备份进行db恢复 2.1,停止掉standby库 SQL> shutdown immediate; Database closed. Databas ...

  2. 利用增量备份恢复因归档丢失造成的DG gap

    故障现象:data guard归档出现gap,悲剧的是丢失的归档在主库上被rman备份时删除了,丢失的归档大约有20几个,数据库大小约2T,如果重建DG将非常耗时间,因此决定利用增量备份的方式恢复DG ...

  3. 云HBase备份恢复,为云HBase数据安全保驾护航

    摘要: 介绍了阿里云HBase自研备份恢复功能的基本背景以及基本原理架构和基本使用方法.   云HBase发布备份恢复功能,为用户数据保驾护航.对大多数公司来说数据的安全性以及可靠性是非常重要的,如何 ...

  4. 11g RAC 如何备份OCR,利用备份恢复OCR,ocrdump

    OCR备份 OCR的备份有2种方式,自动备份和手工备份. 自动备份策略: Oracle Clusterware 每隔4小时,CRSD 进程会自动对OCR 进行一次备份,在任意时刻,oracle 总会保 ...

  5. 解说mysql之binlog日志以及利用binlog日志恢复数据

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

  6. mysql之6备份恢复

    基本意义: 将数据另存到其他设备,以便于出现问题时恢复数据     为什么要备份: 灾难恢复:需求改变:测试     几个事先需要考虑的问题: 可以容忍丢失多长时间的数据?恢复要在多长时间内完成?是否 ...

  7. Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 一 ...

  8. Mysql利用binlog日志恢复数据操作(转)

    a.开启binlog日志:1)编辑打开mysql配置文件/etc/mys.cnf[root@vm-002 ~]# vim /etc/my.cnf在[mysqld] 区块添加 log-bin=mysql ...

  9. 【转】Mysql之binlog日志说明及利用binlog日志恢复数据操作记录

    众所周知,binlog日志对于mysql数据库来说是十分重要的.在数据丢失的紧急情况下,我们往往会想到用binlog日志功能进行数据恢复(定时全备份+binlog日志恢复增量数据部分),化险为夷! 废 ...

随机推荐

  1. AndroidStudio 使用AIDL

    http://blog.csdn.net/ducklikejava/article/details/51559244 Android Studio中写的一个AIDL的小DEMO. 步骤很繁琐,本来不准 ...

  2. linux lanmp一件安装包

    转载地址:http://lamp.phpstudy.net/ phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Tengine/Lighttpd/IIS7/8/6 ...

  3. vsftpd搭建ftp服务,并实现虚拟用户访问

    安装vsftpd服务: yum install vsftpd -y [root@wadeson ~]# rpm -ql vsftpd /etc/logrotate.d/vsftpd /etc/pam. ...

  4. 团队项目系列博客 —— 在路上(之wampserver 修改根目录以及配置多站点以及修改端口号)

    团队项目系列博客 -- 在路上(之wampserver 修改根目录以及配置多站点以及修改端口号) 标签(空格分隔): wampserver php 参考:参考文献1.慕课网.知乎.github 一.w ...

  5. react native 0.56.0版本在windows下有bug不能正常运行

    react native的0.56.0版本在windows下有bug不能正常运行请init 0.55.4的版本 react-native init MyApp --version 0.55.4 注意v ...

  6. Ubuntu 使用root登陆界面

    打开终端开启root账户 :sudo passwd -u root 输入当前用户的密码 2.为root账户设置密码:sudo passwd root 设置root密码,输入两次 3.进入到/usr/s ...

  7. 分布式文档存储数据库(MongoDB)副本集配置

    副本集特征: N 个节点的集群 任何节点可作为主节点 所有写入操作都在主节点上 自动故障转移 自动恢复 相关文章: http://www.cnblogs.com/huangxincheng/archi ...

  8. spark SQL学习(spark连接 mysql)

    spark连接mysql(打jar包方式) package wujiadong_sparkSQL import java.util.Properties import org.apache.spark ...

  9. [译]JavaScript需要类吗?

    [译]JavaScript需要类吗?   原文:http://www.nczonline.net/blog/2012/10/16/does-javascript-need-classes/ 译者注:在 ...

  10. apache配置ssl

    1.确认是否安装ssl模块 是否有mod_ssl.so文件   2.生成证书和密钥   linux下 步骤1:生成密钥 命令:openssl genrsa 1024 > server.key 说 ...