postgrep 更新插入插入 自动分区
来源:互联网 发布:java soap 编辑:程序博客网 时间:2024/06/01 23:28
1.建表:
CREATE TABLE qpf (
lon double precision,-- lon 值
lat double precision,-- lat 值
rain double precision,-- lat 值
time timestamp, -- timestamp
publictime varchar -- 发布时间
)
;
2.函数
CREATE OR REPLACE FUNCTION qpf_partition_time_function()
RETURNS trigger AS
$BODY$
DECLARE tbl_name CHARACTER VARYING;
tbl_name_main CHARACTER VARYING='qpf';
tbl_name_salve CHARACTER VARYING;
tbl_year INTEGER;
tbl_month INTEGER;
tbl_day INTEGER;
time_next_day TIMESTAMP;
create_tbl_sql CHARACTER VARYING;
insert_tbl_sql CHARACTER VARYING;
index_sql CHARACTER VARYING;
_has int ;
BEGIN
select count(1) from qpf where lat = NEW.lat and lon=NEW.lon and time=NEW.time into _has;
raise notice 'ddd:%' , _has;
if _has > 0 then
update qpf set rain = NEW.rain ,publictime=NEW.publictime where lat = NEW.lat and lon=NEW.lon and time=NEW.time;
ElSE
SELECT date_part('year',NEW.time::date) INTO tbl_year;
SELECT date_part('month',NEW.time::date) INTO tbl_month;
SELECT date_part('day',NEW.time::date) INTO tbl_day;
IF(tbl_month<10)THEN
IF(tbl_day<10) THEN
tbl_name_salve=tbl_year||'0'||tbl_month||'0'||tbl_day;
ELSE
tbl_name_salve=tbl_year||'0'||tbl_month||tbl_day;
END IF;
ELSE
IF(tbl_day<10) THEN
tbl_name_salve=tbl_year||tbl_month||'0'||tbl_day;
ELSE
tbl_name_salve=tbl_year||tbl_month||tbl_day;
END IF;
END IF;
tbl_name=tbl_name_main||'_'||tbl_name_salve;
--判断表 时间分段表是否存在
IF ( (SELECT count(1) FROM pg_class WHERE relname=tbl_name)>0) THEN
insert_tbl_sql='INSERT INTO '||tbl_name ||' VALUES('||NEW.lon||','||NEW.lat||','||NEW.rain||', timestamp'''||NEW.time||''','''||NEW.publictime||''')';
EXECUTE insert_tbl_sql;
ELSE
time_next_day = NEW.time + '1 days';
create_tbl_sql='CREATE TABLE '||tbl_name
||'('
|| 'CONSTRAINT '||tbl_name||'_time_check'||' CHECK (time >= timestamp '''||NEW.time||''' AND time <timestamp '''||time_next_day||'s'')'
||')INHERITS (qpf)';
EXECUTE create_tbl_sql;
--索引
index_sql='CREATE INDEX '||tbl_name||'_time_index ON '||tbl_name||'(time,lon,lat)';
EXECUTE index_sql;
insert_tbl_sql='INSERT INTO '||tbl_name ||' VALUES('||NEW.lon||','||NEW.lat||','||NEW.rain||', timestamp'''||NEW.time||''','''||NEW.publictime||''')';
EXECUTE insert_tbl_sql;
END IF;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE PLPGSQL;
3.关联
CREATE TRIGGER qpf_before BEFORE INSERT ON qpf FOR EACH ROW EXECUTE PROCEDURE qpf_partition_time_function();
- postgrep 更新插入插入 自动分区
- hive动态分区插入实验
- HIVE的动态分区插入
- 批量更新插入
- 批量插入与更新
- 插入更新删除数据
- ds更新、插入数据库
- 更新和插入新纪录
- kettle 插入/更新
- kettle插入更新操作
- ORACLE 更新插入数据
- Mysql更新插入
- MongoDB 插入、更新、删除
- Sqlite插入或更新
- Mybatis 级联插入更新
- Sqlite插入或更新
- 插入、删除和更新
- MySQL 插入或更新
- 正则表达式详谈及实例
- iBET Casino LuckyDraw ADIDAS YEEZY- SKY3888 Casino
- java二维数组和字符串
- 排序算法——桶排序
- C++根据前序遍历和后序遍历建二叉树
- postgrep 更新插入插入 自动分区
- github上传时出现error: src refspec master does not match any解决办法
- QtQuick 中的 qml 与 Qt 的 C++
- HTML Input 表单校验之datatype
- springMVC无法访问JSP报404,但是又能访问controller
- java 企业网站源码 后台 springmvc SSM 前台 静态化 代码生成器
- java枚举类型
- apache虚拟主机配置
- C提高(3)/字符串