阿里云在三個月前上線了postgreSQL的rds搏嗡,我一直用python做后端器紧,python社區(qū)中,尤其DJango的官方推薦psql拍鲤;而且之前也對mysql的不同的引擎頗為不耐煩剩檀,經(jīng)過一些嘗試之后憋沿,我打算基本上一直使用psql來做數(shù)據(jù)庫。
話說在墻的影響下沪猴,AWS的rds的速度實在是有影響辐啄,再加上國內(nèi)的AWS的技術(shù)支持體系還不是太了解,我當(dāng)時已經(jīng)傾向于把服務(wù)器全部使用阿里云字币。AWS給我的印象其實是很好的则披,但是有次跟國內(nèi)的AWS技術(shù)服務(wù)團(tuán)隊溝通過一次之后,發(fā)現(xiàn)可能他們還沒有完全的本地化洗出,我說的本地化是指那種貼心的客戶服務(wù)士复、快速的響應(yīng)時間、以及合理的市場推廣模式翩活。經(jīng)過一些對比之后阱洪,我已經(jīng)把AWS的服務(wù)器停掉了,換成了阿里云的菠镇。唯一的問題是rds冗荸,我不希望使用當(dāng)時阿里云僅有的mysql,于是后來阿里云上了postgreSQL的rds之后利耍,我就把AWS的rds遷移過來了蚌本。
當(dāng)時遷移的方法是用了pg_dump, 把所有的數(shù)據(jù)庫關(guān)系轉(zhuǎn)換為文本結(jié)構(gòu)的sql語句,之后再導(dǎo)入到aliyun rds上隘梨。
那么接著是經(jīng)過了一些權(quán)衡程癌,我認(rèn)為aliyun rds的價格有些高,基礎(chǔ)的配置每月要160元轴猎,于是準(zhǔn)備停掉一臺這樣的rds嵌莉。問題是我的aliyun ecs里面的psql是8.4版本的,aliyun rds上的psql是9.4版本的捻脖,我自己的本地的電腦里面有9.3版本的锐峭,結(jié)果是兩個低版本的pg_dump都無法備份高版本的數(shù)據(jù)。那么我開始找方法去解決問題可婶。
沒有谷歌的情況下沿癞,只能將就著用bing,極其無奈扰肌,效果并不好抛寝。
1.?首先查到的思路是可以給pg_dump命令增加--ignore-version來忽略不同版本間的差異。嘗試去用了卻報錯曙旭,查了文檔后發(fā)現(xiàn)這個選項已經(jīng)過期作廢掉了盗舰。
2. 接著,就只好往新安裝psql到電腦上的思路去走桂躏。年月久遠(yuǎn)钻趋,都不知道自己的電腦上的postgreSQL當(dāng)初是怎樣安裝的,后來發(fā)現(xiàn)果然其中有曲折剂习。我先dump出來自己之前建立的本地的一個pg的數(shù)據(jù)庫蛮位,以免升級時出問題。
接著從搜索安裝pg的思路鳞绕,發(fā)現(xiàn)在mac下最好的方式是下載postgresql.app, 看了文檔后決定替換掉原來的9.3失仁,于是替換之后,發(fā)現(xiàn)舊的app的文件夾全部刪除们何,竟然也沒有經(jīng)過Trash萄焦,估計是在內(nèi)部替換時直接rm -rf掉了。也慶幸之前dump過本地的那個數(shù)據(jù)庫冤竹,否則就完全沒有痕跡了拂封。
假如當(dāng)時保留了兩個app,我其實可以通過pg_upgrade把9.3的數(shù)據(jù)轉(zhuǎn)換為9.4的數(shù)據(jù)鹦蠕,只是現(xiàn)在沒有這個機(jī)會了冒签。
接著增加了系統(tǒng)的PATH,把9.4的bin的路徑添加了進(jìn)去钟病。發(fā)現(xiàn)竟然系統(tǒng)里面的psql命令還是指向9.3的版本的萧恕。根據(jù)我對Linux的理解,一定是在某個地方有著明確的設(shè)置的肠阱,同時也有明確的9.3版本的程序還存在票唆。于是查看了psql指向的地址/usr/local/bin/psql, 發(fā)現(xiàn)它是鏈接到Cellar這個文件夾下面文件。查詢Cellar發(fā)現(xiàn)是homebrew的安裝文件夾辖所。
好了惰说,原來我的系統(tǒng)里面曾經(jīng)裝過兩個psql,一個是通過brew安裝的缘回,另外一個是通過postgresql app安裝的吆视,而我系統(tǒng)里面一直在用的是brew安裝的那個。那么接著就開始卸載brew的這個版本里面的pg酥宴。
第一次沒有成功啦吧,發(fā)現(xiàn)是brew的script里面的ruby的路徑出錯了,可能是之前某次系統(tǒng)更新拙寡,某個路徑發(fā)生了變化授滓,改了之后就好用了。于是brew uninstall postgresql,之后因為PATH中已經(jīng)添加過的路徑般堆,新版的9.4的pg已經(jīng)可以使用了在孝。
當(dāng)然,為了趕在aliyun rds關(guān)停我的數(shù)據(jù)庫前盡快解決問題(當(dāng)時還剩一小時到期)淮摔,在處理兩個pg版本之前私沮,已經(jīng)通過絕對路徑使用了新版的9.4的pg_dump先把數(shù)據(jù)備份了下來,之后就可以放心地去配置自己的電腦了和橙。
涉及到的主要命令:
/Applications/Postgres.app/Contents/Versions/9.4/bin/pg_dump --file=ali-rds-dump-v1.sql --host=xxx.pg.rds.aliyuncs.com -i --port=3432 --username=xxx dbname