PostgreSql Partition + Hibernate Insert
与Oracle不同。PostgreSQL须要手动控制分区规则触发器。
步骤一:创建分区
CREATE TABLE table_partition_1( CHECK partition_column criteria) INHENRITS (table)
ALTER TABLE ONLY table_partition_1
ADD CONSTRAINT table_partition_1_pkey PRIMARY KEY (key_column);
CREATE INDEX index_table_partition_1 ON table_partition_1 USING btree(column);
步骤三:手动创建触发器
CREATE OR REPLACE FUNCTION before_insert_table()
RETURNS trigger AS
$BODY$
DECLARE
BEGIN
if criteria then
EXECUTE 'insert into appropriate table ...' SELECT ($1).* ' USING NEW;
end if;
return null;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION before_insert_table()
OWNER TO db;
rule在批量操作时更合适,可是对于单独操作会占用较大的开销。
CREATE RULE table_partition_1 _insert AS
(criteria ...)
DO INSTEAD
INSERT INTO table_partition_1 VALUES (NEW.*)
步骤四:触发器方式hibernate向分区插入数据时。获得的result count为0,会导致推断失败而回滚。
@SQLInsert(sql = "INSERT INTO "
+ "table(column,...)"
+ " VALUES(?,...)", check = ResultCheckStyle.NONE)
CREATE OR REPLACE FUNCTION "public"."function"()
RETURNS void AS $BODY$
DECLARE
_tablename text ;
quarter integer;
record1 record;
BEGIN
select function(now()) as quarter into record1;
quarter := record1.quarter;
_tablename := 'partition_name';
PERFORM 1
FROM pg_catalog.pg_class c
WHERE c.relname = _tablename;
IF FOUND <> TRUE THEN
EXECUTE 'CREATE TABLE ' || _tablename || ' (
CHECK ( criteria)
) INHERITS (table)';
EXECUTE 'ALTER TABLE ' || _tablename || ' OWNER TO db ';
EXECUTE ' alter table ' || _tablename || ' add CONSTRAINT ' || _tablename||'_pkey PRIMARY key (column) ' ;
EXECUTE ' CREATE INDEX ' || _tablename|| '_index
ON '|| _tablename ||'
USING btree
(column)';
END IF;
END
$BODY$
LANGUAGE 'plpgsql' VOLATILE COST 100;
ALTER FUNCTION "public"."function"() OWNER TO "db";
參考资料:
PostgreSql Partition + Hibernate Insert的更多相关文章
- Mycat+Mysql 插入数据报错 i[Err] 1064 - partition table, insert must provide ColumnList
使用Navicat连接Mycat 8066 成功插入了分库表和全局表 1.全局表 sql如下: '); '); '); 插入成功! 2.分库表 sql如下: ', null, null, null, ...
- PostgreSQL使用MyBatis,insert时返回主键
MyBatis中普通的insert语句是这样的: <insert id="insert" parameterType="com.xxx.xxx.xxDo" ...
- mybatis使用注解往postgresql数据库表insert数据[主键自增]的写法
建表SQL: DROP TABLE IF EXISTS person; CREATE TABLE person( person_id serial PRIMARY KEY NOT NULL, pers ...
- PostgreSQL PARTITION 分区表
PostgreSQL 分区表,操作性相当便捷. 但只能在创建时决定是否为分区表,并决定分区条件字段,普通表创建后,不能在修改为分区表. Note:通过其他方法也可转化为分区表. 和其他数据库一样,分区 ...
- Hibernate: insert into xxx (name) values (?)但是数据库中没有数据
学习hibernate 控制台提示 但数据库中没有任何数据被插入 同样的代码,参考例程中就有数据被插入 比较无解,删除部分代码,红框中的部分,运行一下,再贴回去,就好了
- hibernate 操作 Postgresql 数据库报 operator does not exist: integer = character varying
网上的说法如下: Java开发Postgresql 数据库兼容应用的问题,与Oracle有一些不同: Java类型映射数据库类型的不同,Oracle jdbc驱动程序处理Java String类型可正 ...
- Hibernate 简介
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...
- [转]Hibernate不能自动建表解决办法及Hibernate不同数据库的连接及SQL方言
最近开始学Hibernate,看的是李刚的那本<轻量级java ee企业应用实战>.头一个hibernate程序,我原原本本的按照书上例子写下来,同时只是改动了些mysql的连接参数,并且 ...
- 简单的Hibernate入门简介
其实Hibernate本身是个独立的框架,它不需要任何web server或application server的支持.然而,大多数的Hibernate入门介绍都加入了很多非Hibernate的东西, ...
随机推荐
- 06-spring学习-自动装配
自动装配前面也有写过.这里只做补充 在之前,对于要引用的属性,都必须写上名称, 原始配置: 当要在emp对象里面引用dept对象的时候,需要明确的使用“ref“属性去找到指定的名称,但是这种操作中也可 ...
- Hibernate 入门示例
版权声明:本文为博主原创文章,如需转载请标注转载地址 博客地址:http://www.cnblogs.com/caoyc/p/5593406.html 环境: myelipse2015+Hibern ...
- Linux-Nginx-关闭进程
当然就仅仅是介绍一条命令了,就这么简单. nginx默认创建一个工作进程 root 2713 1 0 07:56 ? 00:00:00 nginx: master process ../sbin/ng ...
- mongodb的基本语法(一)
一.数据库常用命令 1.Help查看命令提示 help db.help(); db.yourColl.help(); db.youColl.find().help(); rs.help(); 2.切换 ...
- Backbone.js 1.0.0源码架构分析(一)
Backbone.js 是javascript 语言中 首个实现MVC设计模式的类库,API接口方法重度依赖于underscore.js,DOM选择器则依赖于jQuery.js或者zepto.js. ...
- 解决 TextMate 2 无法安装 Emmet 插件
本篇文章由:http://xinpure.com/solving-textmate-2-cannot-install-emmet-plugin/ 前端神器 Emmet 插件原名为 ZedCoding ...
- cookie_session的详细用法
相对路径与绝对路径 相对路径: 链接地址 <a href="list.do"></a> 表单提交地址 <form action="add. ...
- php fpm安装curl后,nginx出现connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied)的错误
这里选择直接apt-get安装,因为比起自己编译简单多了,不需要自己配置什么 #sudo apt-get install curl libcurl3 libcurl3-dev php5-curl 安装 ...
- JS关于scrollTop和可视区域clientWidth
一.scrollTop,scrollLeft 要获得页面的scrollTop及scrollLeft,在不同的浏览器中是不一样的: 谷歌浏览器和没声明DTD的文档,通过document.body.scr ...
- log4j 具体解说(不能再具体了)
日志是应用软件中必不可少的部分.Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录.在apache站点:jakarta.apache.org/log4j 能够免费下载到Log ...