[Postgresql] Slony - 如何在slon的table做DDL的動作(add column, alter column...etc)

話說那天我們家"理哥"在上課時說slony內的table如果要行DDL就一定要先把該Table先移出slony,然後兩邊都alter完後再重新加入slony才行(這我不大相信,PostgreSQL這種集大家力量完成的東西會沒人想到,而用這麼瞎的方式做).後來在Google上發現Execute Script的方法可以用,以下就是實現的方式,給大家做個參考,當然如果您有更好的方法可以互相交流一下喔:

pre.
slony-Master 192.168.38.25 (EDBDemo)
slony-Slave   192.168.38.26 (EDBDemo1)

DB name : demo
Table name : tb1 (id, name)
1. 建立一個folder來放置所有的檔案,包含conf, sk, sh...etc.,並將PGSYSCONFDIR指定在該路徑下:
# mkdir -p /root/slony
# export PGSYSCONFDIR=/root/slony

2. 準備pg_service.conf內容如下:
# vi pg_service.conf
========================
[192.168.38.25-slonik]
dbname=demo
user=slony
password=1qaz2wsx

[192.168.38.26-slonik]
dbname=demo
host=192.168.38.26
user=slony
password=1qaz2wsx
========================

3. 準備preamble.sk
# vi preamble.sk
========================
cluster name = testcluster;
node 1 admin conninfo = 'service=192.168.38.25-slonik';
node 2 admin conninfo = 'service=192.168.38.26-slonik';
========================

4. 準備要執行的DDL scirpt (.sql),在這我們對tb1增加一個cloumn叫address長度是varchar(30).
# vi alterTB1.sql
========================
ALTER TABLE tb1 ADD COLUMN address varchar(30);
========================

5. 準備slonik的執行script


6. 執行exeScriptDDL.sk
# ./exeScriptDDL.sk
就可以在兩台都看到tb1多了一個 address的欄位囉...

最後,要注意的一件事是,當要執行DDL指令時,你連到該資料庫的應用程式最好是先停止,這樣才不會有Lock的情況喔!!


沒有留言:

張貼留言