mirror of
https://github.com/zvx-echo6/central.git
synced 2026-05-21 18:14:44 +02:00
docs: migration idempotency and runner policy
This commit is contained in:
parent
158504f335
commit
315f5cdab6
1 changed files with 27 additions and 0 deletions
27
docs/migrations.md
Normal file
27
docs/migrations.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
# Migration policy
|
||||
|
||||
## Migrations must be idempotent
|
||||
|
||||
New migration files (007+) must use guards so they can be safely
|
||||
re-run without error:
|
||||
|
||||
- `CREATE TABLE IF NOT EXISTS ...`
|
||||
- `CREATE INDEX IF NOT EXISTS ...`
|
||||
- `INSERT ... ON CONFLICT DO NOTHING` (or `ON CONFLICT ... DO UPDATE`
|
||||
where the intent is upsert)
|
||||
- `ALTER TABLE ... ADD COLUMN IF NOT EXISTS ...`
|
||||
|
||||
Migrations 003-006 predate this policy and are grandfathered. Do not
|
||||
rewrite them.
|
||||
|
||||
## All schema changes go through migrate.py
|
||||
|
||||
Direct `psql` execution bypasses the `schema_migrations` tracker and
|
||||
was the cause of the v0.2.0 reconcile. If a migration needs to be
|
||||
applied on the live system, run:
|
||||
|
||||
sudo -u central /opt/central/.venv/bin/python -m scripts.migrate
|
||||
|
||||
Never apply migration SQL directly via `psql`, even as a superuser,
|
||||
even "just to test." If migrate.py has a bug that's blocking you, fix
|
||||
migrate.py.
|
||||
Loading…
Add table
Add a link
Reference in a new issue