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的东西, ...
随机推荐
- mysql处理大数据合并的另一种方法
在做项目的时候我碰到了一个这样的场景,有两张表,数据都在300W左右,现在要求在生产环境中合并这两张表为一张表,本来想用sql语句insert into select来实现,后来发现这样操作速度很慢, ...
- struts2中标签
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- LaTeX 制作表格
实例代码: \begin{table}[h] \centering \begin{tabular}{|c|c|} \hline \textbf{Distribution} & \textbf{ ...
- 零样本学习 - (Zero shot learning,ZSL)
https://zhuanlan.zhihu.com/p/41846072 https://zhuanlan.zhihu.com/p/38418698 https://zhuanlan.zhihu.c ...
- mysql 添加缓存
解决方法一,修改my.ini文件 找到 query_cache_size =0 估计就是这个问题在造成的,没有开查询缓存 (一般1G 就64M缓存) 我的服务器的内存4G, 调整到 代码如下 复制 ...
- Spring Boot(四):利用devtools实现热部署,改动代码自动生效
一.前言 spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去.原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后 ...
- Windows7 64位安装最新版本号MySQLserver
Windows7 64位安装最新版本号MySQLserver 最近,一直在研究MySQL数据库.常常改动配置文件.导致MySQL数据库无法使用.不得不重复重装MySQL数据库.下面是在Windows7 ...
- Form.ShowWithoutActivation 属性
获取一个值,该值指示显示窗口时是否激活它. 命名空间: System.Windows.Forms程序集: System.Windows.Forms(在 System.Windows.Forms.d ...
- 获取表单select域的选择部分的文本
body> <form action="index.php"> <select name="" id="select" ...
- 结构体sockadrr、sockaddr_in、in_addr的定义
/* Internet address. */typedef uint32_t in_addr_t;struct in_addr { in_addr_t s_addr; }; typed ...