File: db-updates.md

package info (click to toggle)
yokadi 1.3.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 772 kB
  • sloc: python: 5,499; sh: 70; makefile: 8
file content (49 lines) | stat: -rw-r--r-- 1,585 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# Database updates

## How the update system works

Lets assume current version is x and target version is x+n.

The update process goes like this:

- Copy yokadi.db to work.db
- for each v between x and x + n - 1:
    - run `update<v>to<v+1>.update()`
- Create an empty database in recreated.db
- Fill recreated.db with the content of work.db
- If we are updating the database in place, rename yokadi.db to yokadi-$date.db
  and recreated.db to yokadi.db
- If we are creating a new database (only possible by directly calling
  update/update.py), rename recreated.db to the destination name;

The recreation steps ensure that:

- All fields are created in the same order (when adding a new column, you can't
  specify its position)
- All constraints are in place (when adding a new column, you can't mark it
  'non null')
- The updated database has the exact same structure as a brand new database.

## Database schema changes

If you want to modify the database schema (adding, removing, changing tables or
fields). You should:

- Present the changes on the mailing-list

- Implement your changes in db.py

- Increase the database version number (`DB_VERSION` in db.py)

- Write an update script in update/

- When the changes are merged in master, tag the merge commit using the tag
  name `db-v<new-version-number>`, like this:

      # Note the -a!
      git tag -a db-v<version-number>
      git push --tags

Note: up to db-v4, `db-v*` have been created on the last commit before the
update to a new version, so `db-v4` is on the last commit before `DB_VERSION`
was bumped to 5.