3

例如,android平台有类似的东西:

@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

1 回答 1

6

不,没有。不过,它不需要那么干净。你的 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
于 2012-07-27T22:08:10.880 回答