目的:本项功能的目的是为了将数据库中某项内容监控的结果邮件出来提示给相关人员。

实现方式:将数据库监控结果存储到监控记录表当中,使用PL/python函数将记录表中的数据传入附件并将附件使用MUTT邮件发送给相关人员进行通知。

  环境准备:

Linux:  Release:  5.8  版本

Postgreqsl:9.5.1 版本

Python版本:2.7.12

Mutt 版本号:1.4.2.2i

  一、安装postgresql

安装过程(略)

下载地址:https://www.postgresql.org/download/

注意:在编译./configure的时候记得加上 --with-python 这样在拓展python的时候 直接拓展就OK了

二、安装python 2.7.12

在官网上下载了python2.7.12

地址:https://www.python.org/getit/

将安装包上传到服务器中并解压 解压后会生成目录Python-2.7.12

进入目录编译安装

#./comfigure --prefix=/opt/python2.7.12 --enable-shared   #注意这个参数一定要带

#make

#make install

---完成。

三、安装MUTT邮件发送工具

这里解释下为什么选择MUTT而不是linux的mail或者xmail?---因为在刚开始使用xmail向foxmail发送附件的时候 foxmail中接收不到附件 并且正文内容乱码,所以选用了更为简便的mutt 来进行发送邮件。

下载地址:http://www.mutt.org/download.html

安装mutt

#yum -y install mutt

四、在postgresql端用创建pl/python拓展

#su - postgres

#psql

#create extension plpythonu;

五、编写调用操作系统mutt邮件命令的函数

 5.1首先是将监控记录表中信息通过copy命令传入到文件中 send_mail_info 表为监控记录表,自行创建即可。

CREATE OR REPLACE FUNCTION public.fc_copy_date(v text)

RETURNS text AS

$BODY$

try:

plpy.execute("copy send_mail_info to '/app/pgdata/pg951date/view_test.xls'")

plpy.execute("select fc_file_icon('%s')" % v)

except plpy.SPIError:

return "something went wrong"

else:

return "ok"

$BODY$

LANGUAGE plpythonu VOLATILE

COST 100;

ALTER FUNCTION public.fc_copy_date(text)

OWNER TO postgres;

5.2其中fc_file_icon函数是用来转换文件编码的,因为从数据库中copy出来的文件是utf-8的邮件出来后是乱码,所以转换成了gb2312的格式。

CREATE OR REPLACE FUNCTION public.fc_file_icon(v text)

RETURNS text AS

$BODY$

import commands

strs = args[0]  #接收函数传入命令

cmds ='iconv -f utf-8 -t gb2312 view_test.xls > %s' % v

(status, output) = commands.getstatusoutput(cmds)

return output

$BODY$

LANGUAGE plpythonu VOLATILE

COST 100;

ALTER FUNCTION public.fc_file_icon(text)

OWNER TO postgres;

   5.3这是由postgresql调用操作系统命令mutt的一个函数,

 

CREATE OR REPLACE FUNCTION public.fc_send_mail(text)

RETURNS text AS

$BODY$

import commands

strs = args[0]  #接收函数传入命令

emadr ='xxxxx@xxx.com '

cmd1 = 'echo  "正文:xxxxx" | mutt -a  ' + strs  -----strs为传入的文件名

emailx = ' -s "主题:xxx" '+ emadr

cmds = cmd1 + emailx

(status, output) = commands.getstatusoutput(cmds)

return output

$BODY$

LANGUAGE plpythonu VOLATILE

COST 100;

ALTER FUNCTION public.fc_send_mail(text)

OWNER TO postgres;

5.4最后一个外层的函数调用这两个函数

-- Function: public.fc_sendmail_main(text)

-- DROP FUNCTION public.fc_sendmail_main(text);

CREATE OR REPLACE FUNCTION public.fc_sendmail_main(v text)

RETURNS text AS

$BODY$

try:

plpy.execute("select fc_copy_date('%s')" % v)

plpy.execute("select fc_send_mail('%s')" % v)

except plpy.SPIError:

return "something went wrong"

else:

return "OK"

$BODY$

LANGUAGE plpythonu VOLATILE

COST 100;

ALTER FUNCTION public.fc_sendmail_main(text)

OWNER TO postgres;

5.5当需要发邮件的时候只需要执行这条命令即可

Select    fc_sendmail_main(‘xxxx.sss’) ;   ----- xxxx.sss代表 文件名.文件类型

六、如若需要定时发送的话 可以使用postgresql的定时任务工具:pgAgent  

Pgagent的安装及使用(略):可参考 我的上一篇文章:Pgagent的安装及使用

Postgresql 使用 Pl/python实现邮件监控相关推荐

  1. plpythonu_PostgreSQL PL/Python 函数

    PL/Python 写的函数用通常的 CREATE FUNCTION 语法声明.比如: CREATE FUNCTION funcname (argument-list) RETURNS return- ...

  2. python函数转换_将Python函数转换为PL/Python函数

    我编写了几个python函数来对数据集中的连续变量进行幂变换.第一个函数基本上查找每个列的数据类型,并返回数据类型的dict以及相应的列名称作为值.在 第二个函数现在接受数据类型和列名的dict,并获 ...

  3. python发邮件脚本_Python实现的简单发送邮件脚本分享

    近来有些东西需要监控报警发邮件,然后在网上找了点材料,自己写了一个简单发送邮件的脚本,主要就是运用python的smtplib模块,分享给大家看一下: #!/usr/bin/env python # ...

  4. python发邮件模板

    代码模板 # -*- coding: utf-8 -*- """ Created on Thu Apr 9 09:57:43 2020@author: Administr ...

  5. 实例代码分享Python实现Linux监控

    本文通过实例代码给大家介绍了Python实现Linux监控的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下. 工作原理:基于/proc 文件系统 Linux 系统为管理员提供了非常好的方 ...

  6. python实现网络监控_使用python进行服务器监控

    使用python进行服务器监控 Linux服务器中,一切皆为文件.也就是说服务器运行的各种信息,其实是可以从某些文件中查询得到: Linux系统中,有一个/proc的虚拟文件系统 Linux 系统为管 ...

  7. python监控错误语句,基于Python的关键字监控及告警

    基于Python的关键字监控及告警 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  基于Python的关键字监控及告警.txt ] (友情提示:右键点上行txt文档 ...

  8. python 发邮件 timeout_python发送邮件

    一.相关模块介绍 发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍: 1.smtplib模块 smtplib.SMTP([host[, port[, loca ...

  9. Python:通过远程监控用户输入来获取淘宝账号和密码的实验(二)

    从今天早上产生了写个获取淘宝账号及密码的想法后,到现在,全天都在看书.调试程序,12小时内写了三篇相关博客,如下: <Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性> ...

  10. python写mysql脚本_使用python写一个监控mysql的脚本,在zabbix web上加上模板

    使用python写一个监控mysql的脚本,在zabbix web上加上模板: ##先使用MySQLdb的接口关联数据库. [root@cml python]# cat check_Mysql_cus ...

最新文章

  1. android studio 编译报错:download fastutil-7.2.0.jar
  2. centos树莓派版本安装ssh_Raspberry Pi 4B(树莓派4B)远程ssh和jupyter lab环境搭建记录
  3. 关于利用IBERT核对GTX收发器板级测试的原理与过程详解
  4. mac上的更新node npm
  5. python测试用例管理模块_python-selenium并发执行测试用例(方法一 各模块每一条并发执行)...
  6. (20)css3新增选择器
  7. word文档被锁定无法编辑的解决方法
  8. Oracle redo 日志切换时间频率
  9. highcharts插件使用总结和开发中遇到的问题及解决办法
  10. ftp服务器app配置文件,Ubuntu FTP服务器配置与应用
  11. 第一天,搬家到博客园
  12. Linux 并发测试工具 httpd-tools工具的安装和使用
  13. SQL 遇到以零作除数错误——用NULLIF()函数处理为0的分母
  14. DMA控制器 intel237
  15. PS7.0 下雨效果
  16. Ten Rules of Good Studying
  17. 什么是碳中和,如何实现?
  18. 2022年软件设计师考试复习资料(1)
  19. 安卓8.0桌面图标适配
  20. 如何与离职员工面谈沟通?

热门文章

  1. 深度学习二分类问题--IMDB数据集
  2. C/C++中string和int相互转换的常用方法
  3. Win10你需要提供管理员权限才能复制到此文件
  4. 这片“农场”被他们承包了|第一届中国农业人工智能创新创业大赛初赛回顾
  5. 机器学习 | 牛顿冷却定律
  6. 记nuc8的开箱以及安装hackintosh
  7. 类和对象7:构造和析构方法
  8. 隧道点云处理(三):一种简单的隧道二维中线提取方法
  9. [py] 考拉兹猜想
  10. 【深度学习-吴恩达】L1-3 浅层神经网络 作业