postgresql 按小时分表(含触发器)的实现方式_数据库其它

来源:脚本之家  责任编辑:小易  

通过查找表数据文件方式 这种方法通过查找表的数据文件的方式从而确定表的创建时间,但是这种方法并不能准备查询表的创建 时间www.zgxue.com防采集请勿采集本网。

本人后端开发,因为业务需求需要使用分表方式进行数据存储。结合网上的资料最后使用的以下方式:

可以先执行update语句(update的条件是存在的判断条件),然后调用get diagnostics获得上一个SQL语句执行所影响的行数,如果影响行数为0,则说明不存在,那么再执行insert语句。结构类似: declare

CREATE OR REPLACE FUNCTION auto_insert_into_tbl_partition() RETURNS trigger AS$BODY$DECLARE time_column_name text ; -- 父表中用于分区的时间字段的名称[必须首先初始化!!] curMM varchar(16); -- 'YYYYMM'字串,用做分区子表的后缀 isExist boolean; -- 分区子表,是否已存在 strSQL text; BEGIN -- 调用前,必须首先初始化(时间字段名):time_column_name [直接从调用参数中获取!!] time_column_name := TG_ARGV[0]; -- 判断对应分区表 是否已经存在? EXECUTE 'SELECT $1.'||time_column_name INTO strSQL USING NEW; curMM := to_char( strSQL::timestamp , 'YYYYMMDDHH' ); select count(1) INTO isExist from pg_class where relname = ('t_audit_'||curMM); -- 若不存在, 则插入前需 先创建子分区 IF ( isExist = false ) THEN -- 创建子分区表 strSQL := 'CREATE TABLE IF NOT EXISTS t_audit_'||curMM||'() INHERITS (t_audit);' ; EXECUTE strSQL; -- 创建索引 strSQL := 'CREATE INDEX t_audit_'||curMM||'_INDEX_'||time_column_name||' ON t_audit_'||curMM||' ('||time_column_name||');' ; EXECUTE strSQL; END IF; -- 插入数据到子分区! strSQL := 'INSERT INTO t_audit_'||curMM||' SELECT $1.*' ; EXECUTE strSQL USING NEW; RETURN NULL; END$BODY$ LANGUAGE plpgsql;

select*from tablename where(current_timestamp-timestampcolumnname)>'24 hours';tablename替换成表明,timestampcolumnname 替换成你说的时间戳的字段名

我是按照小时对固定的一张表进行分表的,其实可以写活就是加个变量,拼sql的时候拼接进去。这个就是写个函数作为触发器的回调函数。就先判断一下这个表有没有,有就直接插,没有就建表再插。

select*from(select 除了时间所有字段写出来,to_date('COMMENTTIME','yyyy-mm-dd hh24:mi:ss')time from T_SCHOOL_RECORDCOMMENT where RECORDID=:p_cid)order by time desc;这样试试,但是你的

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema;2、查询所有数据的大小: select concat(round(sum(data_

CREATE TRIGGER insert_tbl_partition_trigger BEFORE INSERT ON t_audit FOR EACH ROW EXECUTE PROCEDURE auto_insert_into_tbl_partition('time');

1、通过命令行查询 \\d 数据库—得到所有表抄的名字 \\d 表名—得到表结构 2、通过SQL语句查询袭 select*from pg_tables\"—得到当前百db中所有表的信息(这里pg_tables是系统视图) select

建一个触发器,在父表的插入数据的时候执行前面的那个回调函数。

ps:下面看下postgresql 表触发器

1、先建一个函数,用来执行触发器启动后要执行的脚本

CREATE OR REPLACE FUNCTION "public"."trigger_day_aqi"() RETURNS "pg_catalog"."trigger" AS $BODY$BEGIN --日均值表,没有o3,小时值表,没有o3_8h NEW.so2iaqi=DAY_SO2_AQI(NEW.so2); NEW.no2iaqi=DAY_NO2_AQI(NEW.no2); NEW.coiaqi=DAY_CO_AQI(NEW.co); NEW.o3_8hiaqi=O3_8_AQI(NEW.o3_8h); NEW.pm10iaqi=PM10_AQI(NEW.pm10); NEW.pm25iaqi=PM25_AQI(NEW.pm25); NEW.aqi=NEW.coiaqi; NEW.primarypol='CO'; IF NEW.aqi<NEW.no2iaqi then NEW.aqi=NEW.no2iaqi; NEW.primarypol='NO2'; end if; IF NEW.aqi<NEW.so2iaqi then NEW.aqi=NEW.so2iaqi; NEW.primarypol='SO2'; end if; IF NEW.aqi<NEW.o3_8hiaqi then NEW.aqi=NEW.o3_8hiaqi; NEW.primarypol='O3_8H'; end if; IF NEW.aqi<NEW.pm10iaqi then NEW.aqi=NEW.pm10iaqi; NEW.primarypol='PM10'; end if; IF NEW.aqi<NEW.pm25iaqi then NEW.aqi=NEW.pm25iaqi; NEW.primarypol='PM2.5'; end if; IF NEW.aqi<=50 then NEW.primarypol='-'; end if; NEW.aqilevel=getRank(NEW.aqi); RETURN NEW;END;$BODY$ LANGUAGE plpgsql VOLATILE COST 100

2、建表的触发器,

CREATE TRIGGER gk_site_day_insert BEFORE INSERT ON gk_site_day FOR EACH ROW EXECUTE PROCEDURE trigger_day_aqi();

总结

以上所述是小编给大家介绍的postgresql 按小时分表(含触发器)的实现方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对真格学网网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

用时间值减去获取的周几数值与1的差组成的日期间隔。示例:select current_timestamp-(extract(dow from current_timestamp)-1|' day'):interval其中,current_timestamp是获取当前的时间值,extract(dow from current_timestamp)是获取周几的数值(以周日为一周的开始,周日,周一,周二.的数值依次为0,1,2,.),然后减去1,再和字串' day'组成一个以日为单位的interval值内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • python连接postgresql过程解析
  • postgresql图(graph)的递归查询实例
  • postgresql 如何获取当前日期时间及注意事项
  • python 两个数据库postgresql对比
  • 详解centos7下postgresql 11的安装和配置教程
  • sql脚本函数编写postgresql数据库实现解析
  • centos7使用yum安装postgresql和postgis的方法
  • postgresql物化视图(materialized view)过程解析
  • postgresql 按小时分表(含触发器)的实现方式
  • 很全的sql中文解释代码
  • 如何判断a、b、c三个字段同时为0则不显示这条数据
  • redis和memcache的区别总结
  • sql嵌套查询总结
  • sql表连接图解
  • 存储过程返回数组对象示例代码
  • 详解sqlite中的数据类型
  • 数据库查询中遭遇特殊字符导致问题的解决方法
  • 关于sql注入绕过的一些知识点
  • PostgreSQL怎么在查询时,得到时间对应周的周一日期
  • PostgreSQL 统计24个小时的数据 行转列展示
  • postgresql 数据库我要知道当前时间最近24小时的数据或者求出当前时间的前24小时是多少时间也可以求帮助
  • postgresql里面怎么得到两个日期相差多少秒,或者多少分钟
  • postgresql如何更新插入一起判断执行??
  • postgresql中,怎么取一个表中24小时以前的内容? 注:比表有一个时间戳记录此行插入的时间。
  • postgresql 全文检索 怎么按时间范围查询
  • 如何检查PostgreSQL数据库和表大小
  • 如何查PostgreSQL 数据库中所有的表
  • 在PostgreSQL中如何删除重复记录
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页数据库其它python连接postgresql过程解析postgresql图(graph)的递归查询实例postgresql 如何获取当前日期时间及注意事项python 两个数据库postgresql对比详解centos7下postgresql 11的安装和配置教程sql脚本函数编写postgresql数据库实现解析centos7使用yum安装postgresql和postgis的方法postgresql物化视图(materialized view)过程解析postgresql 按小时分表(含触发器)的实现方式很全的sql中文解释代码如何判断a、b、c三个字段同时为0则不显示这条数据redis和memcache的区别总结sql嵌套查询总结sql表连接图解存储过程返回数组对象示例代码详解sqlite中的数据类型数据库查询中遭遇特殊字符导致问题的解决方法关于sql注入绕过的一些知识点sql join on 用法mysql mysqldump命令使用详解sqlserver、mysql、oracle三种数sql中代替like语句的另一种写法如何让sql运行得更快关于adox的相关知识如何取得一个表的所有字段名用逗sql server下数据库链接的使用方sql server 2005的表分区sql 查询语句积累在windows下自动备份postgresql的教程几种常用db驱动和db连接串小结sql server 和 access 操作数据库结构sqlhadoop map-reduce中的文件并发操作一篇文章带你了解数据库中join的用法数据库设计的完整性约束表现在哪些方面一条慢sql导致购物车服务无法使用的解决方以前架征途时的合区的sql语句代码备份sql语句中where 1=1的作用数据库建立索引的一般依据小结
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved