首页 > 数据库 > mysql教程 > 【原创】用第三方语言编写PostgreSQL 存储函数

【原创】用第三方语言编写PostgreSQL 存储函数

WBOY
发布: 2016-06-07 17:22:04
原创
1082 人浏览过

在PostgreSQL里,所有的存储函数需求都可以用PLPGSQL来实现。同时也支持用第三方语言来编写,这个就得看自己哪个方面熟练了。不过要注意的一点是PLPGSQL的效率怎

在PostgreSQL里,所有的存储函数需求都可以用PLPGSQL来实现。同时也支持用第三方语言来编写,,这个就得看自己哪个方面熟练了。
不过要注意的一点是 PLPGSQL的效率怎么着都比其他第三方语言来的高效。
比如,简单的插入表的存储函数:

 

CREATE OR REPLACE FUNCTION ytt.insert_plpgsql(f_num integer) RETURNS void LANGUAGE plpgsql AS $ytt$ declare i int := 0; v_rank int := 0; v_log_time timestamp; begin while i 我们改用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 plpythonu AS $ytt$ import datetime import random i = 0 while i 清空表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 plpythonu AS $ytt$ import datetime import random i = 0 j = 0 query0 = "insert into ytt.t1(rank,log_time) values " data0 = '' if (f_num/f_values)*f_values 清空表t1.
继续插入100W条数据, 这时,插入时间和原始PLPGSQL的时间一致了。
t_girl=# select insert_multi_py(1000000,20); insert_multi_py ------------------------ Inserting 1000000 rows (1 row) Time: 27587.715 ms t_girl=#

 

本文出自 “上帝,咱们不见不散!” 博客,请务必保留此出处

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板