国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      簡化PostgreSQL分區(qū)代碼的方法

      文檔序號:8412530閱讀:568來源:國知局
      簡化PostgreSQL分區(qū)代碼的方法【
      技術(shù)領(lǐng)域
      】[0001]本發(fā)明是一種PostgreSQL分區(qū)方法,特別是涉及一種簡化PostgreSQL分區(qū)代碼的方法?!?br>背景技術(shù)
      】[0002]PostgreSQL數(shù)據(jù)庫的分區(qū)數(shù)據(jù)路由是通過觸發(fā)器來實現(xiàn)的,例如一個表每個月一個分區(qū)表,對應(yīng)用透明的做法是使用主表和子表,在主表上創(chuàng)建觸發(fā)器函數(shù),用戶訪問主表,觸發(fā)器函數(shù)通過用戶傳遞的數(shù)據(jù)判斷數(shù)據(jù)在哪個子表里面。[0003]現(xiàn)有技術(shù)的缺點:通常情況下,每個主表都需要對應(yīng)至少I個觸發(fā)器函數(shù),所以主表越多,需要寫越多的觸發(fā)器函數(shù),代碼的維護量就越大,出錯的概率也越高。通常觸發(fā)器函數(shù)使用靜態(tài)代碼,所以一旦新增子表,就需要修改觸發(fā)器,例如現(xiàn)在的子表創(chuàng)建到了2014年12月份,當新增子表數(shù)量到2015年12月份時,就需要修改觸發(fā)器代碼。如果觸發(fā)器代碼未及時修改的話,到2015年就會出現(xiàn)數(shù)據(jù)無法插入到正確子表的情況。【
      發(fā)明內(nèi)容】[0004]本發(fā)明的目的是為解決目前的技術(shù)方案存在每個主表都需要對應(yīng)至少I個觸發(fā)器函數(shù),所以主表越多,需要寫越多的觸發(fā)器函數(shù),代碼的維護量就越大,出錯的概率也越高的問題,提供一種簡化PostgreSQL分區(qū)代碼的方法。[0005]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種簡化PostgreSQL分區(qū)代碼的方法,包括以下步驟:[0006]步驟一,倉Il建主表,[0007]步驟二,創(chuàng)建子表,[0008]步驟三,創(chuàng)建觸發(fā)器函數(shù),[0009]步驟四,創(chuàng)建before觸發(fā)器,傳入四個字符串參數(shù),簡化PostgreSQL分區(qū)代碼,[0010]所述觸發(fā)器函數(shù)的實現(xiàn)步驟包括以下子步驟:[0011]子步驟一,觸發(fā)器函數(shù)接收四個字符串參數(shù),[0012]子步驟二,觸發(fā)器函數(shù)打開一個游標,從元表pg_catalog.pg_attribute根據(jù)觸發(fā)器的relid遍歷正常的列名,列對應(yīng)的數(shù)據(jù)類型,[0013]子步驟三,觸發(fā)器函數(shù)執(zhí)行封裝列名,每個封裝列名的格式均為column_name,[0014]子步驟四,觸發(fā)器函數(shù)執(zhí)行封裝值,每個封裝值的格式均為NEWIOLD.TABLE_NAME.C0LUMN_NAME::TYPE,[0015]子步驟五,觸發(fā)器函數(shù)判斷列名是否等于傳入的分區(qū)字段名,如果是,則根據(jù)傳入的分區(qū)算法以及該字段的值得到子表名,觸發(fā)器函數(shù)判斷列名不等于傳入的分區(qū)字段名則繼續(xù)執(zhí)行子步驟六,[0016]子步驟六,如果游標還有數(shù)據(jù),則跳轉(zhuǎn)至子步驟二繼續(xù),否則繼續(xù)執(zhí)行子步驟七,[0017]子步驟七,將子步驟三和子步驟四和子步驟六得到的值,合并成DMLSQL,子步驟八,調(diào)用子步驟七的動態(tài)SQL,將在正確的子表執(zhí)行這個動態(tài)SQL,子步驟九,返回空,退出觸發(fā)器函數(shù)。[0018]作為優(yōu)選,在所述步驟四中,創(chuàng)建before觸發(fā)器,傳入四個字符串參數(shù),所述四個字符串參數(shù)分別為:schemaname、tablename、分區(qū)列名和分區(qū)方法。[0019]作為優(yōu)選,所述子步驟一中,觸發(fā)器函數(shù)接收schemaname、tabIename、分區(qū)列名和分區(qū)方法四個字符串參數(shù)。[0020]本發(fā)明解決了觸發(fā)器函數(shù)代碼維護的問題,新增子表不再需要對觸發(fā)器函數(shù)做任何修改,解決了觸發(fā)器函數(shù)不通用的問題,新增分區(qū)表不需要再新增觸發(fā)器函數(shù),一個函數(shù)搞定所有的分區(qū)算法,解決了不同分區(qū)算法需要寫多個觸發(fā)器函數(shù)的問題,例如按月分區(qū)和按年分區(qū)需要寫2個觸發(fā)器函數(shù),使用本發(fā)明的方法可以只寫一個觸發(fā)器函數(shù)。本發(fā)明在觸發(fā)器函數(shù)中利用動態(tài)代碼替換原有的靜態(tài)代碼,使得新增子表時不需要修改觸發(fā)器函數(shù),在觸發(fā)器函數(shù)中利用PostgreSQL元表和觸發(fā)器字符串接口,自動封裝父表信息,使得多個主表可以共享一個觸發(fā)器函數(shù).做到了I個函數(shù),重復(fù)利用,本發(fā)明通過觸發(fā)器字符串接口,以及傳入分區(qū)字段,分區(qū)類型,例如createjime字段,按月分區(qū),或按年分區(qū),或按時分區(qū)等.根據(jù)傳入的內(nèi)容,封裝動態(tài)SQL,將數(shù)據(jù)引入指定子表。[0021]本發(fā)明的實質(zhì)性效果是:新增子表時,不需要修改觸發(fā)器函數(shù)。新增主表時,不需要新增觸發(fā)器函數(shù)。使用不同的分區(qū)算法時,不需要新增觸發(fā)器函數(shù)?!靖綀D說明】[0022]圖1為本發(fā)明中的觸發(fā)器函數(shù)邏輯圖?!揪唧w實施方式】[0023]下面通過具體實施例,并結(jié)合附圖,對本發(fā)明的技術(shù)方案作進一步的具體說明。[0024]實施例:[0025]—種簡化PostgreSQL分區(qū)代碼的方法,包括以下步驟:[0026]步驟一,倉Il建主表,[0027]步驟二,創(chuàng)建子表,[0028]步驟三,創(chuàng)建觸發(fā)器函數(shù),[0029]步驟四,創(chuàng)建before觸發(fā)器,傳入四個字符串參數(shù),簡化PostgreSQL分區(qū)代碼,[0030]所述觸發(fā)器函數(shù)的實現(xiàn)步驟包括以下子步驟:[0031]子步驟一,觸發(fā)器函數(shù)接收四個字符串參數(shù),[0032]子步驟二,觸發(fā)器函數(shù)打開一個游標,從元表pg_catalog.pg_attribute根據(jù)觸發(fā)器的relid遍歷正常的列名,列對應(yīng)的數(shù)據(jù)類型,[0033]子步驟三,觸發(fā)器函數(shù)執(zhí)行封裝列名,每個封裝列名的格式均為column_name,[0034]子步驟四,觸發(fā)器函數(shù)執(zhí)行封裝值,每個封裝值的格式均為NEWIOLD.TABLE_NAME.C0LUMN_NAME::TYPE,[0035]子步驟五,觸發(fā)器函數(shù)判斷列名是否等于傳入的分區(qū)字段名,如果是,則根據(jù)傳入的分區(qū)算法以及該字段的值得到子表名,觸發(fā)器函數(shù)判斷列名不等于傳入的分區(qū)字段名則繼續(xù)執(zhí)行子步驟六,[0036]子步驟六,如果游標還有數(shù)據(jù),則跳轉(zhuǎn)至子步驟二繼續(xù),否則繼續(xù)執(zhí)行子步驟七,[0037]子步驟七,將子步驟三和子步驟四和子步驟六得到的值,合并成DMLSQL,子步驟八,調(diào)用子步驟七的動態(tài)SQL,將在正確的子表執(zhí)行這個動態(tài)SQL,子步驟九,返回空,退出觸發(fā)器函數(shù)。[0038]在所述步驟四中,創(chuàng)建before觸發(fā)器,傳入四個字符串參數(shù),所述四個字符串參數(shù)分別為:schemaname、tablename、分區(qū)列名和分區(qū)方法。[0039]所述子步驟一中,觸發(fā)器函數(shù)接收schemaname、tablename、分區(qū)列名和分區(qū)方法四個字符串參數(shù)。[0040]本發(fā)明解決了觸發(fā)器函數(shù)代碼維護的問題,新增子表不再需要對觸發(fā)器函數(shù)做任何修改,解決了觸發(fā)器函數(shù)不通用的問題,新增分區(qū)表不需要再新增觸發(fā)器函數(shù),一個函數(shù)搞定所有的分區(qū)算法,解決了不同分區(qū)算法需要寫多個觸發(fā)器函數(shù)的問題,例如按月分區(qū)和按年分區(qū)需要寫2個觸發(fā)器函數(shù),使用本發(fā)明的方法可以只寫一個觸發(fā)器函數(shù)。本發(fā)明在觸發(fā)器函數(shù)中利用動態(tài)代碼替換原有的靜態(tài)代碼,使得新增子表時不需要修改觸發(fā)器函數(shù),在觸發(fā)器函數(shù)中利用PostgreSQL元表和觸發(fā)器字符串接口,自動封裝父表信息,使得多個主表可以共享一個觸發(fā)器函數(shù).做到了I個函數(shù),重復(fù)利用,本發(fā)明通過觸發(fā)器字符串接口,以及傳入分區(qū)字段,分區(qū)類型,例如createjime字段,按月分區(qū),或按年分區(qū),或按時分區(qū)等.根據(jù)傳入的內(nèi)容,封裝動態(tài)SQL,將數(shù)據(jù)引入指定子表。[0041]以上所述的實施例只是本發(fā)明的一種較佳的方案,并非對本發(fā)明作任何形式上的限制,在不超出權(quán)利要求所記載的技術(shù)方案的前提下還有其它的變體及改型?!局鳈?quán)項】1.一種簡化PostgreSQL分區(qū)代碼的方法,其特征在于:包括以下步驟:步驟一,創(chuàng)建主表,步驟二,創(chuàng)建子表,步驟三,創(chuàng)建觸發(fā)器函數(shù),步驟四,創(chuàng)建before觸發(fā)器,傳入四個字符串參數(shù),簡化PostgreSQL分區(qū)代碼,所述觸發(fā)器函數(shù)的實現(xiàn)步驟包括以下子步驟:子步驟一,觸發(fā)器函數(shù)接收四個字符串參數(shù),子步驟二,觸發(fā)器函數(shù)打開一個游標,從元表pg_catalog.pg_attribute根據(jù)觸發(fā)器的relid遍歷正常的列名,列對應(yīng)的數(shù)據(jù)類型,子步驟三,觸發(fā)器函數(shù)執(zhí)行封裝列名,每個封裝列名的格式均為column_name,子步驟四,觸發(fā)器函數(shù)執(zhí)行封裝值,每個封裝值的格式均為NEW|0LD.TABLE_NAME.COLUMN_NAME::TYPE,子步驟五,觸發(fā)器函數(shù)判斷列名是否等于傳入的分區(qū)字段名,如果是,則根據(jù)傳入的分區(qū)算法以及該字段的值得到子表名,觸發(fā)器函數(shù)判斷列名不等于傳入的分區(qū)字段名則繼續(xù)執(zhí)行子步驟六,子步驟六,如果游標還有數(shù)據(jù),則跳轉(zhuǎn)至子步驟二繼續(xù),否則繼續(xù)執(zhí)行子步驟七,子步驟七,將子步驟三和子步驟四和子步驟六得到的值,合并成DMLSQL,子步驟八,調(diào)用子步驟七的動態(tài)SQL,將在正確的子表執(zhí)行這個動態(tài)SQL,子步驟九,返回空,退出觸發(fā)器函數(shù)。2.根據(jù)權(quán)利要求1所述的簡化PostgreSQL分區(qū)代碼的方法,其特征在于:在所述步驟四中,創(chuàng)建before觸發(fā)器,傳入四個字符串參數(shù),所述四個字符串參數(shù)分別為:schemaname、tabIename、分區(qū)列名和分區(qū)方法。3.根據(jù)權(quán)利要求2所述的簡化PostgreSQL分區(qū)代碼的方法,其特征在于:所述子步驟一中,觸發(fā)器函數(shù)接收schemaname、tablename、分區(qū)列名和分區(qū)方法四個字符串參數(shù)?!緦@勘景l(fā)明涉及簡化PostgreSQL分區(qū)代碼的方法。解決了每個主表都需要對應(yīng)至少1個觸發(fā)器函數(shù),所以主表越多,需要寫越多的觸發(fā)器函數(shù),代碼的維護量就越大,出錯的概率也越高的問題,技術(shù)方案為:步驟一,創(chuàng)建主表,步驟二,創(chuàng)建子表,步驟三,創(chuàng)建觸發(fā)器函數(shù),步驟四,創(chuàng)建before觸發(fā)器,傳入四個字符串參數(shù),簡化PostgreSQL分區(qū)代碼,在所述步驟四中,創(chuàng)建before觸發(fā)器,傳入四個字符串參數(shù),所述四個字符串參數(shù)分別為:schemaname、tablename、分區(qū)列名和分區(qū)方法。所述子步驟一中,觸發(fā)器函數(shù)接收schemaname、tablename、分區(qū)列名和分區(qū)方法四個字符串參數(shù)?!綢PC分類】G06F17-30【公開號】CN104731863【申請?zhí)枴緾N201510078225【發(fā)明人】周正中【申請人】杭州米加科技有限公司【公開日】2015年6月24日【申請日】2015年2月13日
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1