用第三方语言编写PostgreSQL 存储函数
来源:互联网 发布:方正少儿简体mac 编辑:程序博客网 时间:2024/06/08 03:36
在PostgreSQL里,所有的存储函数需求都可以用PLPGSQL来实现。同时也支持用第三方语言来编写,这个就得看自己哪个方面熟练了。
不过要注意的一点是 PLPGSQL的效率怎么着都比其他第三方语言来的高效。
比如,简单的插入表的存储函数:
现在来插入100W条记录,花费时间大概为27秒。
我们改用python 来实现
在编写python 脚本前,确保系统已经载入了plpythonu扩展。
以下是函数体:
清空表t1.
同样插入100W条记录, 这时候,时间上的差别显而易见了,用python 写的程序效率比数据库内部的语言慢了3倍。
那可以修改以上python 程序,让其效率来的高效一些,接近系统一些。 我们改用insert ... values ..()...() 的方式。
下面是函数体:
清空表t1.
继续插入100W条数据, 这时,插入时间和原始PLPGSQL的时间一致了。
不过要注意的一点是 PLPGSQL的效率怎么着都比其他第三方语言来的高效。
比如,简单的插入表的存储函数:
CREATE OR REPLACE FUNCTION ytt.insert_plpgsql(f_num integer) RETURNS void LANGUAGE plpgsqlAS $ytt$declare i int := 0; v_rank int := 0; v_log_time timestamp;beginwhile i < f_num loop v_rank = ceil(random()*100); v_log_time = now() - '1 day'::interval*ceil(random()*50); insert into t1 (rank,log_time) values (v_rank,v_log_time); i = i + 1;end loop;end;$ytt$;
现在来插入100W条记录,花费时间大概为27秒。
t_girl=# select insert_plpgsql(1000000); insert_plpgsql ---------------- (1 row)Time: 27286.668 ms
我们改用python 来实现
在编写python 脚本前,确保系统已经载入了plpythonu扩展。
t_girl=# \dx plpythonu List of installed extensions Name | Version | Schema | Description -----------+---------+------------+------------------------------------------ plpythonu | 1.0 | pg_catalog | PL/PythonU untrusted procedural language(1 row)
以下是函数体:
CREATE OR REPLACE FUNCTION ytt.insert_py(f_num integer) RETURNS void LANGUAGE plpythonuAS $ytt$import datetimeimport randomi = 0while i < f_num: v_rank = random.randrange(0,100) v_log_time = datetime.datetime.now() - datetime.timedelta(days=random.randrange(0,50)) query0 = "insert into ytt.t1 (rank,log_time) values (" + str(v_rank) + ",'" + str(v_log_time)+ "')" plpy.execute(query0) i += 1$ytt$;
清空表t1.
同样插入100W条记录, 这时候,时间上的差别显而易见了,用python 写的程序效率比数据库内部的语言慢了3倍。
t_girl=# select insert_py(1000000); insert_py ----------- (1 row)Time: 86061.558 ms
那可以修改以上python 程序,让其效率来的高效一些,接近系统一些。 我们改用insert ... values ..()...() 的方式。
下面是函数体:
CREATE OR REPLACE FUNCTION ytt.insert_multi_py(f_num integer, f_values integer) RETURNS text LANGUAGE plpythonuAS $ytt$import datetimeimport randomi = 0j = 0query0 = "insert into ytt.t1(rank,log_time) values "data0 = ''if (f_num/f_values)*f_values < f_num: return 'Parameters should be times relation.(f_num:1000,f_values:10)'else: while i < int(f_num/f_values): j = 0 while j < f_values: v_rank = random.randrange(0,100) v_log_time = datetime.datetime.now() - datetime.timedelta(days=random.randrange(0,50)) data0 = data0 + ",(" + str(v_rank) + ",'" + str(v_log_time)+ "')" j += 1 result0 = query0 + data0[1:len(data0)] plpy.execute(result0) data0 = '' i += 1 return 'Inserting ' + str(f_num) + ' rows'$ytt$;
清空表t1.
继续插入100W条数据, 这时,插入时间和原始PLPGSQL的时间一致了。
t_girl=# select insert_multi_py(1000000,20); insert_multi_py ------------------------ Inserting 1000000 rows(1 row)Time: 27587.715 mst_girl=#
0 0
- 用第三方语言编写PostgreSQL 存储函数
- 使用c语言编写程序:不允许创建第三方变量
- PostgreSQL 存储过程与函数
- PostgreSQL存储过程(函数)
- Atiitt 使用java语言编写sql函数或存储过程
- 第三方组织结构图.net编写
- POSTGRESQL 数据库 SQL 语言 函数
- POSTGRESQL 数据库 过程语言 函数
- 编写存储函数
- iOS开发第三方存储库YTKKeyValueStore
- 第三方服务器Bmob实现数据存储
- PostgreSQL数据库动态函数脚本编写注意事项
- 【C语言】实现一个函数求字符串长度(不能创建第三方变量)
- 【c语言】实现一个函数,求字符串的长度,不允许创建第三方变量
- Go语言安装第三方库
- go语言安装第三方程序包
- 用 Python ctypes 来调用 C/C++ 编写的第三方库
- 用 Python ctypes 来调用 C/C++ 编写的第三方库
- 一道淘汰85%面试者的百度开发者面试题
- 交通灯管理系统
- EditText获取焦点事件
- EDIT Control控件,对应的变量为 int类型,输入为非法字符时怎么判断
- 2014-05-12:vc6.0 定位 navigate back 快捷键设置
- 用第三方语言编写PostgreSQL 存储函数
- 制作根文件系统并以NFS方式挂载成功
- VC6 转V2010问题总结
- JS实现刷新iframe的方法
- Problem 1463 - Come to a spring outing
- Java 之 文件读写及性能比较总结
- FusionCharts 参数说明
- 将EMF文件转换成JPG文件
- 美国在线旅游公司Priceline集团2014年第一季度财务报告