2012-07-27 20 views
3

例如,Android系統平臺擁有類似:在Ubuntu .deb軟件包中是否有升級/創建數據庫的機制?

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{ 
    db.execSQL("DROP TABLE ...."); 
    db.execSQL("ATER TABLE ...."); 
    onCreate(db); 
} 

這是非常好的處理升級等

是否有.deb軟件包了類似的策略?我知道我可以使用debian/control,debian/preinst來獲得當前版本,debian/postinst來處理數據庫升級,但它不是一個解決方案。

回答

4

不,沒有。儘管如此,它並不需要乾淨得多。你的postinst只需要有類似的東西

case "$1" in 
    configure) 
     oldver=$2 
     if dpkg --compare-versions "$oldver" -lt 1.2.3; then 
      sqlite3 mydb.db 'DROP TABLE W...' 
      sqlite3 mydb.db 'ALTER TABLE X...' 
     fi 
     if dpkg --compare-versions "$oldver" -lt 1.3.4; then 
      sqlite3 mydb.db 'DROP TABLE Y...' 
      sqlite3 mydb.db 'ALTER TABLE Z...' 
     fi 
    ;; 
... 
esac 
+0

而且我會假設「$ oldver」是你在preinst上創建的環境變量,例如? – 2012-07-30 00:36:55

+1

不,$ oldver由dpkg提供爲$ 2。它被分配在第三行。在第一次安裝時,它將是空的。 – 2012-07-30 13:43:23

+0

我沒有注意到oldver = $ 2。謝謝你,你釘住了我的問題。我以爲我必須手動完成所有的工作,比如在安裝(preinst)之前檢索當前版本,等等。 – 2012-07-30 21:12:18

相關問題