PG的非分割槽表線上轉分割槽表

xuexiaogang發表於2022-07-12

 前幾次說了Oracle、MySQL和TiDB的,今天看看PG的。我一開始用Oracle的辦法做,發現做不下去。查資料也沒看到,這裡就求助了。找到PG四小龍,平安科技熊總。熊總給了我他公眾號的一個文章。 https://mp.weixin.qq.com/s?__biz=MzUyOTAyMzMyNg==&mid=2247486137&idx=1&sn=1000a8c68e7752cd4e9737df02504461&chksm=fa662288cd11ab9ec09cbd69104e1bb8706a03e9645a43ce64e7106323f68320c30a1d7edd37&token=1334586368&lang=zh_CN#rd

我本來打算白嫖一下,結果發現做的時候報錯還不一樣。索性就連表名什麼的都改一下,自己走一遍。中間出問題各式各樣的。我現在整理的是最後一次成功的做法的。

     首先是要安裝外掛的,熊總給的連線我直接 git clone 還不行。機器所在的網路不通。自己去下載ZIP,解壓上傳。

PG的非分割槽表線上轉分割槽表

然後編譯一下才行。這個是之前所有資料庫都沒有的特殊步驟。PG很多都是外掛支援的。

     PG的非分割槽表線上轉分割槽表

PG的非分割槽表線上轉分割槽表

然後檢查一下外掛的情況。這裡是安裝好了。

Create table t1 ( id int not null,a varchar(10),t date);建立一個普通表。

寫入一些資料。

insert into t1  values (1,'a',now() - interval '120 day');

insert into t1  values (2,'b',now() - interval '90 day');

insert into t1  values (3,'c',now() - interval '60 day');

insert into t1  values (4,'d',now() - interval '30 day');

insert into t1  values (5,'e',now());


再來一個中間的分割槽表這裡這些2022XXX的表就是PGT的分割槽了。有點不習慣對吧。先適應一下。

這個PGT的表結構,欄位型別,約束條件要和T1一樣(我是這樣成功的,之前多次失敗,不是這裡報錯,就是那裡報錯)

CREATE table pgt (id int not null,a varchar(10), t date not null) PARTITION BY RANGE (t);

Create table pt01_202201 partition of pgt for values from ('2022-01-01') to ('2022-02-01');

Create table pt01_202202 partition of pgt for values from ('2022-02-01') to ('2022-03-01');

Create table pt01_202203 partition of pgt for values from ('2022-03-01') to ('2022-04-01');

Create table pt01_202204 partition of pgt for values from ('2022-04-01') to ('2022-05-01');

Create table pt01_202205 partition of pgt for values from ('2022-05-01') to ('2022-06-01');

Create table pt01_202206 partition of pgt for values from ('2022-06-01') to ('2022-07-01');

Create table pt01_202207 partition of pgt for values from ('2022-07-01') to ('2022-08-01');

執行效果如圖

PG的非分割槽表線上轉分割槽表

 開始轉換吧。居然兩個表還要求一樣主鍵。分別給兩個表增加id+t的主鍵。才能執行成功。

PG的非分割槽表線上轉分割槽表

1.第一個引數是源表,也就是需要改造成分割槽表的表,此處是t1

2.第二個引數是目標表,也就是需要改造後的分割槽表,此處是pgt 

3.第三個引數是源表重新命名後的表,此處是t1_old

以上3句話是從連線中拿的。

接下來準備截斷分割槽。截斷之前看看資料是5條。

PG的非分割槽表線上轉分割槽表

截斷之後是4條,一個分割槽沒有了。

PG的非分割槽表線上轉分割槽表

PG的截斷和Oracle MySQL語法不一樣。

同樣建議實現規劃好,這樣表大了再改其實代價大。估算如果表很大,有一定阻塞的。因為他是一個藉助其他表互動一下的動作。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2905318/,如需轉載,請註明出處,否則將追究法律責任。

相關文章