亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > PostgreSQL > 正文

PostgreSQL分區(qū)表(partitioning)應(yīng)用實例詳解

2020-03-12 23:52:24
字體:
供稿:網(wǎng)友

前言

項目中有需求要垂直分表,即按照時間區(qū)間將數(shù)據(jù)拆分到n個表中,PostgreSQL提供了分區(qū)表的功能。分區(qū)表實際上是把邏輯上的一個大表分割成物理上的幾小塊,提供了很多好處,比如:

1、查詢性能大幅提升
2、刪除歷史數(shù)據(jù)更快
3、可將不常用的歷史數(shù)據(jù)使用表空間技術(shù)轉(zhuǎn)移到低成本的存儲介質(zhì)上
那么什么時候該使用分區(qū)表呢?官方給出的指導(dǎo)意見是:當(dāng)表的大小超過了數(shù)據(jù)庫服務(wù)器的物理內(nèi)存大小則應(yīng)當(dāng)使用分區(qū)表,接下來結(jié)合一個例子具體記錄一下創(chuàng)建分區(qū)表的詳細(xì)過程。

創(chuàng)建分區(qū)表

首先看一下需求,現(xiàn)在有一張日志表,現(xiàn)在需要按表中的操作時間字段(operation_time)分區(qū),如下圖:

PostgreSQL,分區(qū)表,partitioning

PostgreSQL,分區(qū)表,partitioning

這個需求就是一個典型的按時間創(chuàng)建分區(qū)表,首先看一下步驟:

1.創(chuàng)建父表
2.創(chuàng)建n個子表,每個子表都是繼承于父表
3.定義一個規(guī)則(Rule)或觸發(fā)器(Trigger),把對主表的數(shù)據(jù)插入重定向到合適的分區(qū)表

如上所示,整體的大步驟就分為以上三個,當(dāng)然還可以有一些小的優(yōu)化措施,比如對于每個分區(qū),在關(guān)鍵字字段上創(chuàng)建一個索引等等。首先來看第一步——創(chuàng)建父表。

在創(chuàng)建分區(qū)表之前應(yīng)當(dāng)先創(chuàng)建一張“父表”,所有分區(qū)表都從它繼承,這個表中沒有數(shù)據(jù),也不要在這個表上定義任何檢查約束及索引,現(xiàn)在我們就先創(chuàng)建這樣一張表,但之前先建一個序列:

CREATE SEQUENCE "public"."t_sys_log_main_id_seq" INCREMENT 1 MINVALUE 1 MAXVALUE 99999999 START 1 CACHE 1;ALTER TABLE "public"."t_sys_log_main_id_seq" OWNER TO "postgres";

接下來創(chuàng)建“父表”,因為是日志表,所以表名命名為“t_sys_log_main”:

 

CREATE TABLE "public"."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 "public"."t_sys_log_main" IS '系統(tǒng)日志表';COMMENT ON COLUMN "public"."t_sys_log_main"."account_affiliation_code" IS '帳號所屬機(jī)構(gòu)代碼';COMMENT ON COLUMN "public"."t_sys_log_main"."account_affiliation" IS '帳號所屬機(jī)構(gòu)';COMMENT ON COLUMN "public"."t_sys_log_main"."operation_time" IS '操作時間';COMMENT ON COLUMN "public"."t_sys_log_main"."operation_key" IS '操作類型(key)';COMMENT ON COLUMN "public"."t_sys_log_main"."operation_value" IS '操作類型(value)';COMMENT ON COLUMN "public"."t_sys_log_main"."operation_loginid" IS '操作帳號';COMMENT ON COLUMN "public"."t_sys_log_main"."operation_message" IS '操作信息';COMMENT ON COLUMN "public"."t_sys_log_main"."operation_ip" IS '登錄地址';ALTER TABLE "public"."t_sys_log_main" ADD PRIMARY KEY ("id");

運(yùn)行以上DDL語句創(chuàng)建父表,創(chuàng)建成功后接下來就可以挨個創(chuàng)建分區(qū)表了,由于每個分區(qū)表都是從父表繼承的,所以分區(qū)表不會增加任何字段,下面我們按需求創(chuàng)建4張分區(qū)子表,分別用于存放9月、10月、11月和12月的日志數(shù)據(jù):

 

create table t_sys_log_y2016m09(CHECK (operation_time >= DATE '2016-09-01' AND operation_time< DATE '2016-10-01'))INHERITS (t_sys_log_main);create table t_sys_log_y2016m10(CHECK (operation_time >= DATE '2016-10-01' AND operation_time< DATE '2016-11-01'))INHERITS (t_sys_log_main);create table t_sys_log_y2016m11(CHECK (operation_time >= DATE '2016-11-01' AND operation_time< DATE '2016-12-01'))INHERITS (t_sys_log_main);create table t_sys_log_y2016m12(CHECK (operation_time >= DATE '2016-12-01' AND operation_time< DATE '2017-01-01'))INHERITS (t_sys_log_main);

如上所示,運(yùn)行完成后即可創(chuàng)建4張分區(qū)子表,在上面的語句中我們添加了一個約束表示只允許插入本月的數(shù)據(jù),接下來在這4張分區(qū)表的每個分區(qū)鍵上建立索引:

create index t_sys_log_y2016m09_operation_time ON t_sys_log_y2016m09(operation_time);create index t_sys_log_y2016m10_operation_time ON t_sys_log_y2016m10(operation_time);create index t_sys_log_y2016m11_operation_time ON t_sys_log_y2016m11(operation_time);create index t_sys_log_y2016m12_operation_time ON t_sys_log_y2016m12(operation_time);

到此為止我們的分區(qū)表就創(chuàng)建完畢了,接下來需要考慮數(shù)據(jù)插入的問題,如何才能讓不同日期的數(shù)據(jù)自動的插入與其對應(yīng)的分區(qū)子表中呢?有兩種解決方案,分別是:規(guī)則(Rule)和觸發(fā)器(Trigger),相比觸發(fā)器,Rule的開銷更大,所以我在這里就不做過多介紹了,下面直接介紹Trigger的方式。

Trigger通常會結(jié)合自定義函數(shù)(Function)來實現(xiàn)分區(qū)插入,F(xiàn)unction負(fù)責(zé)根據(jù)條件選擇插入,而Trigger則負(fù)責(zé)Function的自動調(diào)用。首先定義Function,功能很簡單,即根據(jù)日期區(qū)間insert數(shù)據(jù)即可:

CREATEOR 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') THEN  INSERT INTO t_sys_log_y2016m09VALUES  (NEW .*) ;ELSEIF (  NEW .operation_time >= DATE '2016-10-01'  AND NEW .operation_time < DATE '2016-11-01') THEN  INSERT INTO t_sys_log_y2016m10VALUES  (NEW .*) ;ELSEIF (  NEW .operation_time >= DATE '2016-11-01'  AND NEW .operation_time < DATE '2016-12-01') THEN  INSERT INTO t_sys_log_y2016m11VALUES  (NEW .*) ;ELSEIF (  NEW .operation_time >= DATE '2016-12-01'  AND NEW .operation_time < DATE '2017-01-01') THEN  INSERT INTO t_sys_log_y2016m12VALUES  (NEW .*) ;ELSE  RAISE EXCEPTION 'Date out of range!' ;ENDIF ; RETURN NULL ;END ; $$ LANGUAGE plpgsql;

最后再創(chuàng)建觸發(fā)器用于執(zhí)行剛才的Function:

CREATE TRIGGER sys_log_insert_trigger BEFORE INSERT ON t_sys_log_mainFOR EACH ROWEXECUTE PROCEDURE sys_log_insert_trigger();

到這里就全部創(chuàng)建完成了,最后測試一下看看結(jié)果。為了確認(rèn)我們的觸發(fā)器的確觸發(fā)了,我們打開存儲過程的統(tǒng)計開關(guān),在postgresql.conf中,找到track_functions,改成all:

PostgreSQL,分區(qū)表,partitioning

接下來就可以運(yùn)行幾條測試insert語句來看看是否能把指定的時間記錄分別插入到與其對應(yīng)的分區(qū)子表中,插入之前先看下sys_log_insert_trigger()的統(tǒng)計信息:

PostgreSQL,分區(qū)表,partitioning

可以看到目前沒有統(tǒng)計記錄,接下來插入幾條測試數(shù)據(jù):

INSERT INTO t_sys_log_main VALUES (1,'200022', '西安高新第一中學(xué)初中校區(qū)', '2016-9-8 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');INSERT INTO t_sys_log_main VALUES (1,'200023', '西安高新第一中學(xué)初中校區(qū)', '2016-9-12 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');INSERT INTO t_sys_log_main VALUES (1,'200024', '西安高新第一中學(xué)初中校區(qū)', '2016-10-8 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');INSERT INTO t_sys_log_main VALUES (1,'200025', '西安高新第一中學(xué)初中校區(qū)', '2016-11-8 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');INSERT INTO t_sys_log_main VALUES (1,'200026', '西安高新第一中學(xué)初中校區(qū)', '2016-12-8 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');INSERT INTO t_sys_log_main VALUES (1,'200027', '西安高新第一中學(xué)初中校區(qū)', '2016-12-25 18:49:26.004', '01', 'xx', 'zhsz_t', 'test!', '127.0.0.1');

緊接著再看一下sys_log_insert_trigger()的統(tǒng)計信息:

PostgreSQL,分區(qū)表,partitioning

如上圖,可以看出調(diào)用了6次函數(shù),因為我們插入了6條數(shù)據(jù),至此分區(qū)表由創(chuàng)建到測試的整個過程就已經(jīng)成功完成了。

總結(jié)

簡單記錄一下PostgreSQL創(chuàng)建分區(qū)表的完整步驟以及注意事項,希望對遇到同樣問題的朋友有所幫助,The End。


注:相關(guān)教程知識閱讀請移步到PostgreSQL頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产美女免费视频| 五月天中文字幕一区二区| 中文字幕第一区二区| 一本一本久久a久久精品综合麻豆| 福利片在线免费观看| b站大片免费直播| 94色蜜桃网一区二区三区| 国产欧美综合精品一区二区| 超碰最新在线| 你懂的视频在线播放| 午夜在线成人av| 精品中文字幕在线播放| 欧美贵妇videos办公室| 国产美女视频网站| 久久亚洲中文字幕无码| 欧美猛男做受videos| 国产九九九视频| 6080亚洲理论片在线观看| 污污网站在线看| 蜜桃日韩视频| 欧美大片拔萝卜| 欧美人与性动交xxⅹxx| 特级黄国产片一级视频播放| 亚洲小视频在线播放| 九色综合狠狠综合久久| 日本一区二区不卡视频| 国产精品毛片无码| 欧洲成人一区二区三区| 国产精品高潮呻吟久久久久| 久久亚洲导航| 在线免费av观看| 国产欧美视频在线观看| 美女做暖暖视频免费在线观看全部网址91| 国产一区二区精品久久99| 亚洲成人动漫精品| 超碰97免费观看| 国产视频三级在线观看播放| 亚洲国产欧美国产综合一区| 国产伦精品一区二区三区免费| 九一国产精品| 成品网站w灬+源码1| 国产一区二区三区三区在线观看| 欧美成人777| 色噜噜狠狠一区二区三区| 91pron在线| 国产福利资源在线| 国产成人a亚洲精v品无码| 国产精品扒开腿做爽爽爽的视频| 亚洲天堂精品视频| 在线不卡一区二区| 国产精品一区二区x88av| 欧美在线视频不卡| 国产亚洲1区2区3区| 第一会所sis001亚洲| 国产精品乱码视频| 人人干人人干人人| av电影在线观看网址| 日韩av电影资源网| 成人精品在线观看视频| 欧洲熟妇的性久久久久久| 亚洲欧美日韩综合网| 久久一级电影| 亚洲欧美一区二区精品久久久| 黄瓜视频成人app免费| 91蝌蚪视频在线观看| 亚洲国产视频网站| 精品国产污污免费网站入口| 日韩极品视频在线观看| 在线高清一区| 中文字幕日韩综合av| 国产精品1234| 污污的视频网站在线观看| 日韩在线xxx| 欧美videos大乳护士334| 午夜美女久久久久爽久久| 狠狠躁夜夜躁人人爽视频| 99国产精品久久久久老师| 国产一区在线观看免费| 国产黄色大片免费看| 91久久久久久久久久久久久久| 欧美久久久久久久久久| 日韩欧美一级特黄在线播放| 136导航精品福利| 中文字幕日本不卡| 精品免费一区二区| 欧美精品999| 成人资源www网在线最新版| 亚洲wwwav| 91成人在线| 日日噜噜夜夜狠狠久久波多野| 免费av网站在线播放| jazzjazz国产精品麻豆| 久久久久99精品成人片我成大片| 午夜精品久久久内射近拍高清| 羞羞小视频在线观看| 中文字幕av导航| 国内精品久久久| 91视频免费观看| 欧美成人午夜电影| 日本在线播放视频| 久久久久久久久久久网| 一区二区三区四区视频免费观看| 午夜在线一区| 成人短视频在线观看免费| 国产精品理论在线观看| 自拍视频在线免费观看| 久久精品免费网站| 精品香蕉一区二区三区| 欧美性猛交xxxx乱| 成人3d精品动漫精品一二三| 国产欧美一区二区精品性色超碰| 亚洲欧洲日产国产网站| 91tv亚洲精品香蕉国产一区7ujn| 国产三级伦理片| 韩日毛片在线观看| 午夜精品久久久久久久99热影院| 成人看片视频| 久久久久久久97| 免费福利视频一区二区三区| 奇米4444一区二区三区| 在线播放中文字幕| 色欧美在线观看| 久久久一本精品99久久精品66| 久久综合之合合综合久久| 亚洲瘦老头同性70tv| 日韩精品人妻中文字幕| 日韩中文理论片| 日韩欧美精品中文字幕| 亚洲毛片在线看| 欧美成人一区在线观看| 亚洲欧洲另类精品久久综合| 欧美日韩三级视频| 欧美激情aⅴ一区二区三区| 先锋亚洲精品| 久久99精品久久久久久久久久久久| 51精品在线| 在线视频综合导航| 91在线视频九色| 欧美一级黄色录像| 99久久夜色精品国产亚洲1000部| 国产精品无码一区二区三区免费| 亚洲精品乱码久久久久久蜜桃麻豆| а√天堂资源在线| 久久国产精品无码一级毛片| 日韩电影在线观看完整免费观看| 潘金莲一级淫片aaaaa免费看| 国产最新精品精品你懂的| 成人一级片网址| 国产精品美女久久久久高潮| 自拍视频第一页| 11024精品一区二区三区日韩| 亚洲欧美激情国产综合久久久| 亚洲图片久久| 好看的av网站| 天天综合天天| 天天骑天天干| 在线观看免费观看在线| 国产一区二区三区色淫影院| 亚洲综合在线观看视频| 国产一区二区av在线| 日日噜噜噜噜夜夜爽亚洲精品| 久久成人精品视频| 欧美日韩亚洲一区三区| 美女黄色片视频| 亚洲欧美乱综合图片区小说区| 中国女人内谢69xxx视频| 国产freexxxx性播放麻豆| 91在线国产剧情| 毛片免费视频| 国精品人妻无码一区二区三区喝尿| 蜜臀久久99精品久久久画质超高清| 欧美久久视频| 免费国产自久久久久三四区久久| 亚洲国产精品suv| 日韩精品在线一区| 在线观看免费成人av| 天天综合天天做天天综合| 欧美五码在线| 18禁裸男晨勃露j毛免费观看| 国内露脸中年夫妇交换精品| 日韩美女视频免费看| 欧美色图影院| 久久av喷吹av高潮av| 亚洲综合不卡| 久久久久久97三级| 国产精品你懂的| 久久综合丝袜日本网| 国产福利一区二区三区在线播放| 欧美性猛交xxxx乱大交蜜桃| 摸bbb搡bbb搡bbbb| 91麻豆精品国产综合久久久| 青青草免费在线观看| 欧美激情喷水视频| 国产成人在线视频网站| www.久久伊人| 亚洲综合免费观看高清在线观看| 在线碰免费视频在线观看| 高清欧美性猛交xxxx黑人猛| 无码人妻精品一区二区三应用大全| 一区二区三区在线电影| 国产欧美精品国产国产专区| 国产高清亚洲| 无码人中文字幕| 尤物影院在线播放| 久久久一二三四| 日韩肉感妇bbwbbwbbw| 亚洲黄色大片| 日韩在线精品强乱中文字幕| 成人免费高清视频在线观看| 精品国产三级电影在线观看| 亚洲激情视频小说| 亚洲精品大片www| 免费精品一区二区三区在线观看| 中文字幕av一区二区三区高| 97精品久久久久中文字幕| 青青久精品观看视频最新| 日韩av在线网| 国产91色在线|| 欧美大片在线影院| 强制高潮抽搐sm调教高h| 欧美日韩影院| 欧美大片在线观看一区二区| 国产99视频精品免费视频36| 精品日产卡一卡二卡麻豆| 欧美a大片欧美片| 在线能看的黄色| 色综合老司机第九色激情| 一级美女在线| 久久精品xxxxx| 欧美一级欧美三级| 欧美久久电影| 日本不卡不卡| 亚洲综合成人在线视频| 欧美激情在线| 国产美女激情视频| 超碰精品在线观看| 99re久久精品国产| 9人人澡人人爽人人精品| 91麻豆精品国产91久久综合| 国产欧美一区二区三区精品观看| 丰满人妻一区二区三区四区53| 乌克兰美女av| 中文字幕理论片| freexxxx性特大另类| 国产精品日本一区二区| 欧美综合一区| 日韩欧美精品在线不卡| 在线视频日韩精品| 一区二区三区 在线观看视| 丝袜亚洲另类欧美综合| 国产真实的和子乱拍在线观看| 蜜桃色一区二区三区| 亚洲a成v人在线观看| 国产精品久久久久久久久免费相片| 亚洲成av人片一区二区密柚| 成人在线二区| 女人帮男人橹视频播放| 4444kk亚洲人成电影在线| 免费毛片观看| 日批视频免费在线观看| 欧美大黑帍在线播放| 国产精品久在线观看| jizzjizzjizz美国| 亚洲精品日韩综合观看成人91| 免费一级做a爰片久久毛片潮| 一区免费观看视频| 国产精品成人观看视频国产奇米| 国产在线一区二区综合免费视频| 残酷重口调教一区二区| 国产乱理伦片在线观看夜一区| 欧美性极品少妇| 中文字幕+乱码+中文字幕一区| 日本电影全部在线观看网站视频| 欧洲杯足球赛直播| 在线视频三级| 欧美韩日国产| 国产色婷婷国产综合在线理论片a| 国产精品美女久久久久| 亚洲欧美国产精品va在线观看| 欧美成人资源| 999精品在线视频| 欧美性色xo影院| 久久久久综合一区二区三区| 免费a在线观看| 伊人婷婷久久| 日韩精品视频免费专区在线播放| 春暖花开亚洲一区二区三区| 成年大片免费视频播放二级| 伊人久久中文字幕| 99久久综合狠狠综合久久止| 国产成人福利片| 毛片视频免费观看| 极品一线天粉嫩虎白馒头| 久久精品ww人人做人人爽| 国产精品热久久久久夜色精品三区| 制服丝袜av在线| 中文字幕av一区二区三区谷原希美| 国内视频精品| 久久精品亚洲天堂| 欧美性猛交xxxx免费看漫画| 国产成人一区二区在线| 日本中文在线视频| 亚洲天堂男人的天堂| 久久综合影院| 国产精品高颜值在线观看| 麻豆免费在线视频| 在线视频中文字幕久| 精品国产美女福利到在线不卡| 亚洲天堂视频在线播放| 国产成人精品午夜视频免费| 国产iv一区二区三区| 欧美在线www| jizzjizzjizzjizz| 日本精品视频一区二区三区| 色综合久久一区二区三区| 欧美一区二区三区电影在线观看| 国产精品国产三级国产| 日韩精品1区2区3区| 久久夜靖品2区| 偷拍自拍在线| 色婷婷综合成人av| 国产在线麻豆精品| 日韩欧美精品在线观看| 久久久免费观看| 久久久国产精品一区二区中文| 欧美美女在线观看| 免费欧美一区| 最近中文字幕免费mv视频多少集|