話說那天我們家"理哥"在上課時說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的情況喔!!
沒有留言:
張貼留言