/*创建索引序列,自增id,也可以直接声明id类型为serialCREATE SEQUENCE "xu"."t_sys_log_main_id_seq"INCREMENT 1MINVALUE 1MAXVALUE 99999999START 1CACHE 1;
ALTER TABLE "xu"."t_sys_log_main_id_seq" OWNER TO "postgres";
*//*创建父表
CREATE TABLE "xu"."t_sys_log_main" (
"id" int4 DEFAULT nextval('t_sys_log_main_id_seq'::regclass) NOT NULL,
"account_affiliation_code" varchar(100) COLLATE "default" NOT NULL,
"account_affiliation" varchar(50) COLLATE "default" NOT NULL,
"operation_time" timestamp(6) NOT NULL,
"operation_key" varchar(2) COLLATE "default" NOT NULL,
"operation_value" varchar(30) COLLATE "default" NOT NULL,
"operation_loginid" varchar(100) COLLATE "default" NOT NULL,
"operation_message" varchar(300) COLLATE "default" NOT NULL,
"operation_ip" varchar(30) COLLATE "default" NOT NULL
)
WITH (OIDS=FALSE);
COMMENT ON TABLE "xu"."t_sys_log_main" IS '系统日志表';
COMMENT ON COLUMN "xu"."t_sys_log_main"."account_affiliation_code" IS '帐号所属机构代码';
COMMENT ON COLUMN "xu"."t_sys_log_main"."account_affiliation" IS '帐号所属机构';
COMMENT ON COLUMN "xu"."t_sys_log_main"."operation_time" IS '操作时间';
COMMENT ON COLUMN "xu"."t_sys_log_main"."operation_key" IS '操作类型(key)';
COMMENT ON COLUMN "xu"."t_sys_log_main"."operation_value" IS '操作类型(value)';
COMMENT ON COLUMN "xu"."t_sys_log_main"."operation_loginid" IS '操作帐号';
COMMENT ON COLUMN "xu"."t_sys_log_main"."operation_message" IS '操作信息';
COMMENT ON COLUMN "xu"."t_sys_log_main"."operation_ip" IS '登录地址';ALTER TABLE "xu"."t_sys_log_main" ADD PRIMARY KEY ("id");
*/
/*创建分区表,分区表从父表继承,数据类型和字段数没有变化,主要以时间为分区键,也可以使用其他关键字分区。
create table xu.t_sys_log_y2016m09
(CHECK (operation_time >= DATE '2016-09-01' AND operation_time< DATE '2016-10-01'))
INHERITS (xu.t_sys_log_main);create table xu.t_sys_log_y2016m10
(CHECK (operation_time >= DATE '2016-10-01' AND operation_time< DATE '2016-11-01'))
INHERITS (xu.t_sys_log_main);create table xu.t_sys_log_y2016m11
(CHECK (operation_time >= DATE '2016-11-01' AND operation_time< DATE '2016-12-01'))
INHERITS (xu.t_sys_log_main);create table xu.t_sys_log_y2016m12
(CHECK (operation_time >= DATE '2016-12-01' AND operation_time< DATE '2017-01-01'))
INHERITS (xu.t_sys_log_main);
*/
/*
根据分区键,为每张分区表建立索引。
create index t_sys_log_y2016m09_operation_time ON xu.t_sys_log_y2016m09(operation_time);
create index t_sys_log_y2016m10_operation_time ON xu.t_sys_log_y2016m10(operation_time);
create index t_sys_log_y2016m11_operation_time ON xu.t_sys_log_y2016m11(operation_time);
create index t_sys_log_y2016m12_operation_time ON xu.t_sys_log_y2016m12(operation_time);
*/
/*
创建函数,为没涨分区表中插入数据
CREATE
OR REPLACE FUNCTION sys_log_insert_trigger () RETURNS TRIGGER AS $$
BEGINIF (NEW .operation_time >= DATE '2016-09-01'AND NEW .operation_time < DATE '2016-10-01'
) THENINSERT INTO xu.t_sys_log_y2016m09
VALUES(NEW .*) ;
ELSEIF (NEW .operation_time >= DATE '2016-10-01'AND NEW .operation_time < DATE '2016-11-01'
) THENINSERT INTO xu.t_sys_log_y2016m10
VALUES(NEW .*) ;
ELSEIF (NEW .operation_time >= DATE '2016-11-01'AND NEW .operation_time < DATE '2016-12-01'
) THENINSERT INTO xu.t_sys_log_y2016m11
VALUES(NEW .*) ;
ELSEIF (NEW .operation_time >= DATE '2016-12-01'AND NEW .operation_time < DATE '2017-01-01'
) THENINSERT INTO xu.t_sys_log_y2016m12
VALUES(NEW .*) ;
ELSERAISE EXCEPTION 'Date out of range!' ;
END
IF ; RETURN NULL ;
END ; $$ LANGUAGE plpgsql;
*/
/*
创建触发器,触发函数。
CREATE TRIGGER sys_log_insert_trigger BEFORE INSERT ON xu.t_sys_log_main
FOR EACH ROW
EXECUTE PROCEDURE sys_log_insert_trigger();
*/
/*插入数据。
INSERT INTO xu.t_sys_log_main VALUES
(1,'200022', '西安高新第一中学初中校区', '2016-9-8 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');
INSERT INTO xu.t_sys_log_main VALUES
(1,'200023', '西安高新第一中学初中校区', '2016-9-12 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');
INSERT INTO xu.t_sys_log_main VALUES
(1,'200024', '西安高新第一中学初中校区', '2016-10-8 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');
INSERT INTO xu.t_sys_log_main VALUES
(1,'200025', '西安高新第一中学初中校区', '2016-11-8 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');
INSERT INTO xu.t_sys_log_main VALUES
(1,'200026', '西安高新第一中学初中校区', '2016-12-8 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');
INSERT INTO xu.t_sys_log_main VALUES
(1,'200027', '西安高新第一中学初中校区', '2016-12-25 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');
*/select * from t_sys_log_main;
--查询分区表
selectavg(expense)
from(selectclient_key,sum(expense) as expensefromalmartwheredate_key = date '2015-12-13'group by 1);--查询非分区表
selectavg(expense)
from(selectclient_key,sum(expense) as expensefromalmart_allwheredate_key = date '2015-12-13'group by 1) foo;--创建主表         CREATE TABLE tbl_partition
(id integer,name text,data numeric,gather_time timestamp
);
--创建自动分区
CREATE OR REPLACE FUNCTION auto_insert_into_tbl_partition()RETURNS trigger AS
$BODY$
DECLAREtime_column_name    text ;          -- 父表中用于分区的时间字段的名称[必须首先初始化!!]curMM       varchar(6);     -- 'YYYYMM'字串,用做分区子表的后缀isExist         boolean;        -- 分区子表,是否已存在startTime       text;endTime     text;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 , 'YYYYMM' );select count(*) INTO isExist from pg_class where relname = (TG_RELNAME||'_'||curMM);-- 若不存在, 则插入前需 先创建子分区IF ( isExist = false ) THEN  -- 创建子分区表startTime := curMM||'01 00:00:00.000';endTime := to_char( startTime::timestamp + interval '1 month', 'YYYY-MM-DD HH24:MI:SS.MS');strSQL := 'CREATE TABLE IF NOT EXISTS '||TG_RELNAME||'_'||curMM||' ( CHECK('||time_column_name||'>='''|| startTime ||''' AND '||time_column_name||'< '''|| endTime ||''' )) INHERITS ('||TG_RELNAME||') ;'  ;  EXECUTE strSQL; -- 创建索引strSQL := 'CREATE INDEX '||TG_RELNAME||'_'||curMM||'_INDEX_'||time_column_name||' ON '||TG_RELNAME||'_'||curMM||' ('||time_column_name||');' ;EXECUTE strSQL;       END IF; -- 插入数据到子分区!strSQL := 'INSERT INTO '||TG_RELNAME||'_'||curMM||' SELECT $1.*' ;EXECUTE strSQL USING NEW;RETURN NULL;
END
$BODY$LANGUAGE plpgsql;---调度触发器CREATE TRIGGER insert_tbl_partition_triggerBEFORE INSERTON tbl_partitionFOR EACH ROWEXECUTE PROCEDURE auto_insert_into_tbl_partition('gather_time');
--插入数据
INSERT INTO public.tbl_partition(id, name, data, gather_time)VALUES (2, '大海都是水', 123,  '2018-08-12 14:23:15.012');select pg_size_pretty(pg_database_size('postgres'));
/*
CREATE TABLE xu.almart
(date_key date,hour_key smallint,client_key integer,item_key integer,account integer,expense numeric
);
*/
/*
CREATE TABLE xu.almart_2015_12_10 () inherits (xu.almart);
CREATE TABLE xu.almart_2015_12_11 () inherits (xu.almart);
CREATE TABLE xu.almart_2015_12_12 () inherits (xu.almart);
CREATE TABLE xu.almart_2015_12_13 () inherits (xu.almart);
*/
/*
ALTER TABLE xu.almart_2015_12_10
ADD CONSTRAINT almart_2015_12_10_check_date_key
CHECK (date_Key = '2015-12-10'::date);
ALTER TABLE xu.almart_2015_12_11
ADD CONSTRAINT almart_2015_12_10_check_date_key
CHECK (date_Key = '2015-12-11'::date);
ALTER TABLE xu.almart_2015_12_12
ADD CONSTRAINT almart_2015_12_10_check_date_key
CHECK (date_Key = '2015-12-12'::date);
ALTER TABLE xu.almart_2015_12_13
ADD CONSTRAINT almart_2015_12_10_check_date_key
CHECK (date_Key = '2015-12-13'::date);
*/
/*
CREATE INDEX almart_date_key_2015_12_10
ON xu.almart_2015_12_10 (date_key);
CREATE INDEX almart_date_key_2015_12_11
ON xu.almart_2015_12_11 (date_key);
CREATE INDEX almart_date_key_2015_12_12
ON xu.almart_2015_12_12 (date_key);
CREATE INDEX almart_date_key_2015_12_13
ON xu.almart_2015_12_13 (date_key);
*/
--创建分区函数
/*
CREATE OR REPLACE FUNCTION almart_partition_trigger()
RETURNS TRIGGER AS $$
BEGINIF NEW.date_key = DATE '2015-12-10'THENINSERT INTO xu.almart_2015_12_10 VALUES (NEW.*);ELSIF NEW.date_key = DATE '2015-12-11'THENINSERT INTO xu.almart_2015_12_11 VALUES (NEW.*);ELSIF NEW.date_key = DATE '2015-12-12'THENINSERT INTO xu.almart_2015_12_12 VALUES (NEW.*);ELSIF NEW.date_key = DATE '2015-12-13'THENINSERT INTO xu.almart_2015_12_13 VALUES (NEW.*);ELSIF NEW.date_key = DATE '2015-12-14'THENINSERT INTO xu.almart_2015_12_14 VALUES (NEW.*);END IF;RETURN NULL;
END;
$$
LANGUAGE plpgsql;
*/
--挂载分区Trigger
/*
CREATE TRIGGER insert_almart_partition_trigger
BEFORE INSERT ON xu.almart
FOR EACH ROW EXECUTE PROCEDURE almart_partition_trigger();
*/
/*
CREATE TABLE xu.almart_all
(date_key date,hour_key smallint,client_key integer,item_key integer,account integer,expense numeric
);
*/
/*
INSERT INTO xu.almart_all
select(selectarray_agg(i::date)from generate_series('2015-12-01'::date, '2015-12-30'::date, '1 day'::interval) as t(i))[floor(random()*4)+1] as date_key,floor(random()*24) as hour_key,floor(random()*1000000)+1 as client_key,floor(random()*100000)+1 as item_key,floor(random()*20)+1 as account,floor(random()*10000)+1 as expense
fromgenerate_series(1,300000000,1);
*/   select count(*) from xu.almartINSERT INTO xu.almart SELECT * FROM xu.almart_all;

postrgresql常用语句相关推荐

  1. VBA经典常用语句400句

    VBA经典常用语句400句 定制模块行为 (1) Option Explicit '强制对模块内所有变量进行声明 Option Private Module '标记模块为私有,仅对同一工程中其它模块有 ...

  2. python基础常用语句-Python基本语句

    在学习W3Cschool python高级教程之前,大家接触过许多python语句,在本文中我们将Python一些基本的常用语句做了汇总,并简单介绍下这些python常用语句的用途和标准格式,放在一起 ...

  3. python 语言-Python语言的一些基本常用语句

    在学习玩蛇网python教程高级篇之前,大家接触过许多python语句,在本文中我们将Python一些基本的常用语句做了汇总,并简单介绍下这些python常用语句的用途和标准格式,放在一起方便大家参考 ...

  4. CSDN的Markdown编辑器常用语句

    CSDN的Markdown编辑器还是挺好用的,比那个富文本编辑器用起清爽得多,那个富文本编辑器常常是一个换行符留很宽的距离,而且插入图片.代码等都没有Markdown编辑器方便.Markdown编辑器 ...

  5. legend2---开发常用语句

    legend2---开发常用语句 一.总结 一句话总结: 其实敲代码都是很类似的,比如ajax,模型等等,敲代码就是一个由生到熟的过程 1.ajax? $.post("{:url('broa ...

  6. mysql修改字段名称_MySQL增删改查的常用语句汇总

    以下是总结的mysql的常用语句,欢迎指正和补充~ 一.创建库,删除库,使用库 1.创建数据库:create database 库名; 2.删除数据库:drop database 库名; 3.使用数据 ...

  7. SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用

    SQLite数据库常用语句及MAC上的SQLite可视化工具MeasSQLlite使用 一.引言 在移动开发中,通常会用到一些小型的数据库进行数据管理.SQLite是一款十分小巧便捷的数据库,在iOS ...

  8. MongoDB常用语句

    记录一下MongoDB常用语句,顺带与SQL做个简单的对比. 1.查询(find) (1)查询所有结果 select * from articledb.article.find() (2)指定返回哪些 ...

  9. mysql 语句块语法_MySQL ------ MySQL常用语句的语法 (三十四)

    MySQL常用的语句语法 注意:1. | 符号用来指出几个选中中的一个,因此NULL | NOT NULL 表示给出null 或 not null 2.包含在方括号中的关键字或子句是可选的(如 [li ...

最新文章

  1. java读取doc文档
  2. 【JavaSE_07】Java中类和对象-封装特性--练习
  3. Juint整合Log4j
  4. 推荐一个集录屏、截图、音频于一体的软件给大家
  5. 工作按钮(216):点击按钮报错--bug修复--直接写接口里面
  6. UE4 查看打包文件内容
  7. vue点击按钮之后置成不可用_Vue 动态改变 button 的 disabled 状态
  8. QTP鼠标点击和浏览器事件的动态切换
  9. soapui连接oracle,myeclipse 安装soapui插件
  10. 08、ADS使用记录之低通滤波器设计与优化
  11. L298N——简介及用法
  12. USACO3.2.4 Feed Ratios (ratios)
  13. B站头部UP主抱团垄断优质资源,腰部UP主的流量突破口在哪?
  14. PHP 索引数组合并
  15. 【VUE】vue3学习笔记(异步组件,包含defineAsyncComponent、Suspense的使用)
  16. jQuery实现购物车计算价格统计功能
  17. NLM_B-A non-local algorithm for image denoising分享
  18. 如何防止破解?MCU加密技术揭秘
  19. Linux下怎么退出telnet命令行
  20. GAMES104 B1+B2 引擎的结构与开发分层

热门文章

  1. 程序员必备利器——敏捷软件
  2. 单元测试 JAVA Junit
  3. F81E42安装lion成功
  4. 阿里巴巴集团告别 CTO,一个时代又落幕了
  5. Echarts图表绘制,小白看了不迷路
  6. navicat与phpstudy的冲突解决
  7. 【满分】【华为OD机试真题2023 JAVAJS】核酸检测人员安排
  8. JPype:实现在python中调用JAVA 和 错误处理
  9. CentOS 端口转发
  10. Arcgis路网导入3dmax批量改成道路面