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 に答える