Merge branch 'refs/heads/feature/database' into feature/auth
This commit is contained in:
3 files changed
+27
-6
No files matched your search
@@ -0,0 +1,15 @@
|
|||||||
|
.PHONY: check-docker migrate migration-rollback
|
||||||
|
|
||||||
|
check-docker:
|
||||||
|
@command -v docker >/dev/null 2>&1 || { echo "Docker nie jest zainstalowany lub nie ma go w PATH." >&2; exit 1; }
|
||||||
|
@docker compose version >/dev/null 2>&1 || { echo "Docker Compose nie jest dostępny przez polecenie 'docker compose'." >&2; exit 1; }
|
||||||
|
|
||||||
|
MIGRATION_RUNNER = zyrarbot.storage.adapters.postgres.migration_runner
|
||||||
|
|
||||||
|
migrate: check-docker
|
||||||
|
docker compose run --build --rm discord-bot python -m $(MIGRATION_RUNNER) migrate
|
||||||
|
|
||||||
|
# Użyj np. `make migration-rollback TO=1`; domyślnie cofa wszystkie migracje.
|
||||||
|
TO ?= 0
|
||||||
|
migration-rollback: check-docker
|
||||||
|
docker compose run --build --rm discord-bot python -m $(MIGRATION_RUNNER) rollback --to $(TO)
|
||||||
@@ -49,6 +49,8 @@ katalogach `uploads/<guild_id>/`.
|
|||||||
### Migracje bazy
|
### Migracje bazy
|
||||||
|
|
||||||
Przy uruchomieniu bot automatycznie stosuje oczekujące migracje PostgreSQL.
|
Przy uruchomieniu bot automatycznie stosuje oczekujące migracje PostgreSQL.
|
||||||
|
Można je też uruchomić jawnie przez `make migrate`. Makefile korzysta wyłącznie
|
||||||
|
z Dockera i sprawdza, czy dostępne są Docker oraz `docker compose`.
|
||||||
Zastosowane wersje i ich nazwy są zapisywane w tabeli `schema_migrations`.
|
Zastosowane wersje i ich nazwy są zapisywane w tabeli `schema_migrations`.
|
||||||
Każda migracja jest osobną klasą z metodami `apply` i `rollback`, w osobnym
|
Każda migracja jest osobną klasą z metodami `apply` i `rollback`, w osobnym
|
||||||
pliku w `zyrarbot/storage/adapters/postgres/migrations/`. Pliki należy nazywać
|
pliku w `zyrarbot/storage/adapters/postgres/migrations/`. Pliki należy nazywać
|
||||||
@@ -60,12 +62,12 @@ dodać także do krotki `MIGRATIONS` w `migrations/__init__.py`. Obecna migracja
|
|||||||
Rollback wszystkich wersji wykonaj poleceniem:
|
Rollback wszystkich wersji wykonaj poleceniem:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker compose exec discord-bot python -m zyrarbot.storage.adapters.postgres.migration_runner rollback
|
make migration-rollback
|
||||||
```
|
```
|
||||||
|
|
||||||
Aby cofnąć wersje nowsze niż wskazana, dodaj `--to N`, na przykład `--to 1`
|
Aby cofnąć wersje nowsze niż wskazana, ustaw `TO`, na przykład
|
||||||
pozostawi migrację w wersji 1. Przed rollbackiem zatrzymaj bota poleceniem
|
`make migration-rollback TO=1` pozostawi migrację w wersji 1. Przed rollbackiem
|
||||||
`docker compose stop discord-bot`. Rollback wykonuje migracje w odwrotnej kolejności,
|
zatrzymaj bota poleceniem `docker compose stop discord-bot`. Rollback wykonuje migracje w odwrotnej kolejności,
|
||||||
usuwa ich wpisy z `schema_migrations` i może trwale skasować dane z cofanych tabel.
|
usuwa ich wpisy z `schema_migrations` i może trwale skasować dane z cofanych tabel.
|
||||||
Po rollbacku uruchomienie bota ponownie zastosuje brakujące migracje.
|
Po rollbacku uruchomienie bota ponownie zastosuje brakujące migracje.
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class MigrationRunner:
|
|||||||
|
|
||||||
def main() -> None:
|
def main() -> None:
|
||||||
parser = argparse.ArgumentParser(description="Manage PostgreSQL schema migrations")
|
parser = argparse.ArgumentParser(description="Manage PostgreSQL schema migrations")
|
||||||
parser.add_argument("action", choices=("rollback",))
|
parser.add_argument("action", choices=("migrate", "rollback"))
|
||||||
parser.add_argument("--to", type=int, default=0, dest="target_version")
|
parser.add_argument("--to", type=int, default=0, dest="target_version")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
@@ -71,7 +71,11 @@ def main() -> None:
|
|||||||
user=os.environ.get("POSTGRES_USER", "zyrarbot"),
|
user=os.environ.get("POSTGRES_USER", "zyrarbot"),
|
||||||
password=os.environ.get("POSTGRES_PASSWORD", "zyrarbot"),
|
password=os.environ.get("POSTGRES_PASSWORD", "zyrarbot"),
|
||||||
) as connection:
|
) as connection:
|
||||||
MigrationRunner(MIGRATIONS).rollback_to(connection, args.target_version)
|
runner = MigrationRunner(MIGRATIONS)
|
||||||
|
if args.action == "migrate":
|
||||||
|
runner.apply_pending(connection)
|
||||||
|
else:
|
||||||
|
runner.rollback_to(connection, args.target_version)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
Reference in new issue
Block a user