PostgreSQL UDF妙用 - mybatis等框架,不支持的语法都可以通过UDF来实现

标签

PostgreSQL , UDF , 框架支持 , Django , mybatis , ibatis


背景

PostgreSQL 的功能非常的强大,以至于一些框架可能无法完全发挥出PG的功能。

不过现在活跃的框架对PG的支持越来越好了,例如Django,就有专门针对PG的模块,可以使用PG的JSON,索引接口等功能。

https://docs.djangoproject.com/en/2.0/search/?q=postgresql

那么在框架不支持某些PG特性时,有什么方法让它支持起来呢?

答案是UDF,没错调用UDF就可以用到这些特殊的功能了。

打个比方,PG支持9种索引,语法如下:

Command:     CREATE INDEX
Description: define a new index
Syntax:
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ]
    ( { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] )
    [ WITH ( storage_parameter = value [, ... ] ) ]
    [ TABLESPACE tablespace_name ]
    [ WHERE predicate ]

《自动选择正确索引访问接口(btree,hash,gin,gist,sp-gist,brin,bitmap...)的方法》

《PostgreSQL 9种索引的原理和应用场景》

《Greenplum 最佳实践 - 什么时候选择bitmap索引》

而使用框架时,创建索引也许没有USING method的接口。

使用UDF就可以解决这个问题。

因为select function($parameter)所有框架都支持。

例子

create or replace function f_crt_idx(name,name,name,name,text,name) returns void as $$
declare
  sql text := format('create index %I on %I.%I using %s (%s) tablespace %s', $1,$2,$3,$4,$5,$6);
begin
  raise notice '%', sql;
  execute sql;
end;
$$ language plpgsql strict;
postgres=# select f_crt_idx('idx_a', 'public', 'a', 'btree', 'c1,c2', 'pg_default');  

NOTICE:  create index idx_a on public.a using btree (c1,c2) tablespace pg_default  

 f_crt_idx
-----------  

(1 row)

小结

使用UDF,可以实现几乎所有的功能接口,使得任何框架都可以支持PG的所有功能。

参考

《自动选择正确索引访问接口(btree,hash,gin,gist,sp-gist,brin,bitmap...)的方法》

《PostgreSQL 9种索引的原理和应用场景》

《Greenplum 最佳实践 - 什么时候选择bitmap索引》

时间: 2024-11-23 22:02:53

PostgreSQL UDF妙用 - mybatis等框架,不支持的语法都可以通过UDF来实现的相关文章

spring+springMVC+mybatis的框架项目基础环境搭建

上一个项目在后台用到spring+springMVC+mybatis的框架,先新项目初步需求也已经下来,不出意外的话,应该也是用这个框架组合. 虽然在之前activiti相关的学习中所用到的框架也是这个,但是当时重点在于实现activiti的功能,因此在环境搭建上也只是以能用为前提,与真实项目中所用的还是差了不少. 因此为了给接下来的项目做准备,今天便抽空练习了一下这个框架组合的搭建.虽然之前的框架都不是我来搭,接下来这个可能也不是让我搭,但记录下来说不定以后能用上,也或者对其他人有用. 那么进

springmvc+mybatis+spring框架处理checkbox

问题描述 springmvc+mybatis+spring框架处理checkbox springmvc+mybatis+spring框架,前台页面checkbox类型数据的value值如何传输到后台的控制器,大神求解,我在做一个系统超级管理员设置其他管理员权限的时候,数据库有张权限表,而且这张表对应的实体类数据类型是Boolean,我想在前台用checkbox勾选权限,然后 将value值传到后台进行修改,但是checkbox勾选后,值传不到控制器,大家有木有解决的方法啊~这是对应的实体类和前台

myeclipse从那个版本开始了对3大开源框架的支持

问题描述 myeclipse从那个版本开始了对3大开源框架的支持 RT: .........................到底什么时候集成进IDE的呢 解决方案 据我所知,5点几版本的时候就开始支持了.MyEclipse出现的目的就是为了扩展eclipse的功能,所以三大框架出现不久就集成了.

myeclipse没有struts等框架的支持

问题描述 在项目名右键=>MyEclipse中没有AddStruts哪位高手解决过这种问题麻烦指点下下 解决方案 解决方案二: 问题解决了框架的支持选项都放到了MyEclipse==>Projectfacet里面解决方案三: 可能和myeclipse的版本有关(有点里面带struts的插件了,有的可能就没带)其实楼主可以试着自己搭建struts的环境,这样刚好也能了解下struts的配置

ssh框架-SSH框架里这些包分别都代表什么?各自的作用是什么?

问题描述 SSH框架里这些包分别都代表什么?各自的作用是什么? 解决方案 这说作用吧 貌似没有 只是编程人员一种习惯而已 action一般作为控制层 service一般是做业务逻辑处理 dao一般作为与数据库打交道的一层 解决方案二: 这个包名是个人习惯写的,不固定标准写什么包,ssh分别是struts2,spring和hibernate.action一般写的struts2的控制层.dao一般写接口.daoImpl一般写接口实现类,model是模型的意思. 解决方案三: 这和ssh无关,只是一种

mina udp 广播-Android Mina框架是否支持UDPClient发送广播包?

问题描述 Android Mina框架是否支持UDPClient发送广播包? 如题,请问mina框架是否支持发送udp广播包,以下面代码发送,会提示服务器异常. // 创建一个tcp/ip 连接 //创建客户端连接器 Log.i("TAG","正在创建Socket连接!"); Log.i("TAG","PORT:"+PORT+",HostName:"+hostName); NioDatagramConnec

zend框架实现支持sql server的操作方法_php实例

本文实例讲述了zend框架实现支持sql server的操作方法.分享给大家供大家参考,具体如下: 1.修改Zend/Db/Adapter/Pdo/Abstract.php中的connect方法 protected function _connect() { // if we already have a PDO object, no need to re-connect. if ($this->_connection) { return; } // get the dsn first, bec

zend框架实现支持sql server的操作方法

本文实例讲述了zend框架实现支持sql server的操作方法.分享给大家供大家参考,具体如下: 1.修改Zend/Db/Adapter/Pdo/Abstract.php中的connect方法 protected function _connect() { // if we already have a PDO object, no need to re-connect. if ($this->_connection) { return; } // get the dsn first, bec

Java的MyBatis+Spring框架中使用数据访问对象DAO模式的方法_java

SqlSessionTemplateSqlSessionTemplate是MyBatis-Spring的核心.这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常.SqlSessionTemplate是线程安全的,可以被多个DAO所共享使用. 当调用SQL方法时,包含从映射器getMapper()方法返回的方法,SqlSessionTemplate将会保证使用的SqlSession是和当前Spring的事务相关的.此外,它管理session的生命周期,包含