一般在使用django快速開發網站的時候,DB方面使用Sqlite3,對開發會方便很多
因為少掉了非常大量DB方面的設置,當然換個角度想,也算是在埋技術債啦
畢竟相對PostgreSQL,Sqlite3比較不適合用在營運環境上一點
但當系統早期建置時,需求相當不穩定下,與其追求DB的穩定,使用ORM,早點把系統雛形開發出來
再為了營運需求,使用更符合的DB也是個策略
而這篇最主要紀錄的,就是將Sqlite3上的資料快速的轉換到PostgreSQL上
這邊介紹一些轉換方案,這些方案都會有適合他的情況,基本上可以挑狀況去用
至於我覺得最泛用的方法,寫在下方最終方案中
用sqlite指令,直接dump資料,再把dump出來的資料格式轉成PostgreSQL看得懂的格式
或者也可以透過SQLiteStudio這樣的tool去dump資料
dump的格式、資料量,會是個大問題,再來如果資料有許多reference關西的話
資料輸出輸入的順序也不能有錯,比較適合在資料量小,schema單純的情況下用
但好處是,環境相依低,基本上各OS一定可以匯出匯入這些"格式正確"的資料
可以直接讓PostgreSQL自己去讀取Sqlite3上面的資料
看說明是寫的很美好,但有個問題,就是windows上不是太好用
光是要把pgloader這個指令安裝起來就是個大問題
有些人是建議安裝Windows Subsystem for Linux,但這流程就會變得有點長了
但如果是在Linux based上的機器做轉換的話,pgloader應該還是個不錯的做法
主要參考自這篇文章
簡單來說,就是使用Django指令把資料dump出來,再import回去
# 將資料全部倒到 datadump.json
python manage.py dumpdata > datadump.json
# 更改DB連線設定後,重新建立對應
python manage.py migrate --run-syncdb
# 開啟一個django的shell,並清掉一些設定資料
python manage.py shell
>>> from django.contrib.contenttypes.models import ContentType
>>> ContentType.objects.all().delete()
>>> quit()
# 將資料倒回
python manage.py loaddata datadump.json
這樣就能很快地將資料進行移轉了
這個方法唯一的限制是,他是透過django指令,還有ORM機制來輔助的
所以系統如果不是用Django開發,ORM機制建立DB的話,就不能這樣轉換資料了