postgresql plpythonu例子
以下代码仅作为参考之用
select md5, crc32, record->'UserModerAnalysis'->'base_info'->'file_malware' as file_malware
from reports
CREATE OR REPLACE FUNCTION py_get_file_malware(record TEXT)
RETURNS TEXT
AS $$
# pl/python functioin body
import json
plpy.notice('type of record is', type(record))
# plpy.notice('import json')
# plpy.notice('begin to loads()')
#if 'json' in SD:
# json = SD['json']
#else:
# import json
# SD['json'] = json
obj = json.loads(record)
plpy.notice('UserModerAnalysis = %s'%(str(obj['UserModerAnalysis'])))
try:
file_malware = obj['UserModerAnalysis']['base_info']['file_malware']
except Exception, e:
#plpy.error(record)
plpy.notice('ERROR!')
file_malware = ''
return file_malware
$$ LANGUAGE plpythonu
select md5, crc32, py_get_file_malware(record::TEXT)
from reports
limit 2
-- create table summary
CREATE TABLE summary_file_malware
(
description character varying(10) NOT NULL,
count integer,
CONSTRAINT summary_file_malware_pkey PRIMARY KEY (description)
)
DROP FUNCTION calculate_file_malware()
CREATE OR REPLACE FUNCTION calculate_file_malware()
RETURNS trigger AS $$
plpy.notice('calculate_file_malware invoked')
import json
event = TD['event']
if event == 'INSERT':
plpy.notice('insert triggered')
elif event == 'UPDATE':
plpy.notice('update triggered')
# parse parameter
old_obj = json.loads(TD['old']['record'])
new_obj = json.loads(TD['new']['record'])
plpy.notice('old = %s, new = %s'%(old_obj['UserModerAnalysis']['base_info']['file_malware'],
new_obj['UserModerAnalysis']['base_info']['file_malware']))
# sub old
try:
plpy.notice('begin')
plan = plpy.prepare('SELECT * FROM summary_file_malware WHERE description = $1', ['text'])
old_value = old_obj['UserModerAnalysis']['base_info']['file_malware']
plpy.notice("old_value = " + old_value)
rv = plpy.execute(plan, [old_value], 1)
old_count = int(rv[0]['count'])
plpy.notice('old_count = %s'%(old_count))
plan = plpy.prepare('UPDATE summary_file_malware SET count = $1 WHERE description = $2', ['int', 'text'])
plpy.execute(plan, [old_count - 1, old_value])
except Exception, e:
plpy.notice('exception occured, exception msg = '+str(e))
# add new
try:
plan = plpy.prepare('SELECT * FROM summary_file_malware WHERE description = $1', ['text'])
old_value = new_obj['UserModerAnalysis']['base_info']['file_malware']
rv = plpy.execute(plan, [old_value], 1)
old_count = int(rv[0]['count'])
plpy.notice('old_count = %s'%(old_count))
plan = plpy.prepare('UPDATE summary_file_malware SET count = $1 WHERE description = $2', ['int', 'text'])
plpy.execute(plan, [old_count + 1, old_value])
except Exception, e:
plpy.notice('exception occured, exception msg = '+str(e))
elif event == 'DELETE':
plpy.notice('delete triggered')
elif event == 'TRUNCATE':
plpy.notice('trancate triggered')
else:
plpy.notice('unknow event, event = ', event)
$$ LANGUAGE plpythonu
DROP TRIGGER IF EXISTS calculate on reports;
CREATE TRIGGER calculate AFTER UPDATE OF record
ON reports
FOR EACH ROW
EXECUTE PROCEDURE calculate_file_malware ();
SELECT * FROM summary_file_malware WHERE description ='OK'
INSERT INTO summary_file_malware VALUES('OK', 0)
UPDATE reports SET record = '{"Name": "000BD3A69E56CD5E8D998FEDA8EF3CA6.CCD2FFE1", "UserModerAnalysis": {"base_info": {"file_malware": "YES"}, "file_monitor": [], "virusname": null, "danger_behavior": [], "relation": {"processtree": [{"processid": "608", "process": "000BD3A69E56CD5E8D998FEDA8EF3CA6.CCD2FFE1", "module": "", "parentid": 0, "relationtype": "Root", "id": 1}]}, "other_behavior": [], "network_monitor": [], "process_monitor": [], "reg_monitor": []}, "KernelModelAnalysis": {"MaliciousActives": {"000BD3A69E56CD5E8D998FEDA8EF3CA6.CCD2FFE1": {"MemoryOperations": {}, "FileOperations": {"CREATE_FILE.DROP_PE_TO_SYSTEM_DIR": [{"COMMENT": "Create_File_In_SystemDirectory", "DETAILS": {"file_path": "c:\\windows\\.exe"}, "LEVEL": "LEVEL_3"}]}, "NetworkOperations": {}, "ProcessOperations": {}, "RegistryOperations": {}, "OtherOperations": {}}}, "ProcessFamily": {"000BD3A69E56CD5E8D998FEDA8EF3CA6.CCD2FFE1": {"Parent_Process": "", "Command_Line": "", "Type_Created": "Root"}}, "ProcessActives": {"000BD3A69E56CD5E8D998FEDA8EF3CA6.CCD2FFE1": {"MemoryOperations": {}, "FileOperations": {"DELETE_FILE": [{"COMMENT": "Delete_File_Found", "DETAILS": {"file_path": "C:\\DOCUME~1\\autoer\\LOCALS~1\\Temp\\~DFCCF6.tmp"}, "LEVEL": "LEVEL_2"}], "CREATE_FILE": [{"COMMENT": "Create_File_Found", "DETAILS": {"file_path": "C:\\DOCUME~1\\autoer\\LOCALS~1\\Temp\\~DFCCF6.tmp"}, "LEVEL": "LEVEL_2"}]}, "NetworkOperations": {}, "ProcessOperations": {}, "RegistryOperations": {"SET_KEY_VALUE": [{"COMMENT": "Set_Key_Value_Found", "DETAILS": {"value": "Drive", "type": "REG_SZ", "name": "BaseClass", "key": "HKEY_USERS\\S-1-5-21-1708537768-287218729-1177238915-1003\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MountPoints2\\{7fb46850-baea-11e1-9890-806d6172696f}"}, "LEVEL": "LEVEL_2"}]}, "OtherOperations": {}}}, "TimeOfReportCreated": "2013-06-03 11:25:25:724 +0800", "Summary": ["CREATE_FILE", "CREATE_FILE.DROP_PE_TO_SYSTEM_DIR", "DELETE_FILE", "SET_KEY_VALUE"], "FileName": "000BD3A69E56CD5E8D998FEDA8EF3CA6.CCD2FFE1"}, "Result": "Success", "Time": "2013-06-03 11:25:25:724 +0800", "DESCRIPTION": "\u64cd\u4f5c\u6210\u529f\u5b8c\u6210\u3002"}' WHERE md5 = '000BD3A69E56CD5E8D998FEDA8EF3CA6' and crc32 = 'CCD2FFE1'
select * from summary_file_malware
postgresql plpythonu例子的更多相关文章
- .NET Core开发日志——Entity Framework与PostgreSQL
Entity Framework在.NET Core中被命名为Entity Framework Core.虽然一般会用于对SQL Server数据库进行数据操作,但其实它还支持其它数据库,这里就以Po ...
- PostGIS(解压版)安装
1.软件下载 postgresql-9.6.1-1-windows-x64-binaries.zip https://www.postgresql.org/download/windows/ post ...
- sqlmap用户手册 | WooYun知识库
sqlmap用户手册 说明:本文为转载,对原文中一些明显的拼写错误进行修正,并标注对自己有用的信息. 原文:http://drops.wooyun.org/tips/143 ============ ...
- sqlmap用户手册
http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数2.判断可以用那种SQL注入 ...
- sqlmap用户手册详解(转)
http://url/sqlmap/mysql/get_int.php?id=1 当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注入技术来注入 3.识别出 ...
- OpenLDAP使用疑惑解答及使用Java完成LDAP身份认证
导读 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的数据库系统,其专门针对读取,浏览 ...
- sqlmap
http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注 ...
- 【转】sqlmap用户手册
http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数2.判断可以用那种SQL注入 ...
- sqlmap用户手册 [详细]
当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQL注入技术来注入 3.识别出哪种数据库 4.根据用户选择,读取哪些数据 sqlmap支持五种不同的注入模式: ...
随机推荐
- SQL注入测试平台 SQLol -1. 简介与安装
最近下载了SQLol测试了一下,感觉挺好玩的,做一下记录. SQLol是一个可配置得SQL注入测试平台,它包含了一系列的挑战任务,让你在挑战中测试和学习SQL注入语句,SQLol还是比较有创意的项目. ...
- CentOS搭建Httpd Pyhton3 Django环境
系统环境 centos-6-x86 系统自带httpd 编译安装Python3 pip3 参考 http://www.cnblogs.com/vawter/p/6254170.html 编译安装wsg ...
- 1-1 Windows应用程序的特点
主要内容:介绍Windows应用程序的特点,并附加了消息和事件的一些区别 //以后该分类中字体均采用 隶书 4(14pt) 1. 面向对象 <1>针对Windows应用本身,如记事本界面, ...
- linux之du命令
du命令:disk usage,顾名思义,是关于目录使用情况的.对了- 它的作用就是计算目录大小的. 1. 想看当前目录下所有目录以及子目录的大小: # du -h . “.”代表当前目录下.也可以换 ...
- canvas绘图动画细节
1.canvas动画不能像操作DOM那样修改一个元素的top和left值就能移动.canvas要移动一个元素需要重绘,在重绘的时候修改相应的值.将绘制的图形封装成一个函数,这样才方便重绘.2.在重绘的 ...
- 对 Android 开发者有益的 40 条优化建议
本文转载于:http://www.oschina.net/translate/40-developer-tips-for-android-optimization?cmp 下面是开始Android编程 ...
- java的nio之:java的nio系列教程之DatagramChannel
Java NIO中的DatagramChannel是一个能收发UDP包的通道.因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入.它发送和接收的是数据包. 打开 DatagramChann ...
- 常用的文件和目录操作命令【转vbird】
cdpwdmkdirrmdirlscprmmvcattacnlmorelessheadtailtouch cd (变换目录) 我们知道vbird这个使用者的家目录是/home/vbird/,而root ...
- C++ 学习小程序之 map 的用法
1. map::at #include <iostream> #include <string> #include <map> using namespace st ...
- 【转载】关于Python中的yield
在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor). 一.迭代器(iterator) 在Python中,for循环可以用于Python中的任何 ...