Схема БД конфигурируемая (сейчас «dkb» зашита в коде и миграциях) #38

Closed
opened 2026-10-07 13:14:02 +03:00 by aep · 0 comments
Owner

Проблема

Имя схемы PostgreSQL dkb зашито в восьми местах:

  • api/src/models/base.py:10 — SCHEMA = "dkb" (MetaData моделей, sequence, enum);
  • api/src/db/db.py:10 — search_path: "dkb" движка приложения;
  • api/alembic/env.py:23 — SCHEMA = "dkb" (CREATE SCHEMA, version_table_schema);
  • api/alembic/versions/0001…0004 — свой SCHEMA = "dkb" в каждой миграции плюс строковые FK "dkb.app_user.id" и т.п. (0001, 0002);
  • api/tests/conftest.py:100 — search_path: "dkb".

Платформа может выдать БД с другой схемой (или требовать отдельную схему на стенд), а миграции сейчас пишут только в dkb.

Что сделать

  1. Один источник: настройка (raisa_config.yml / env, например DATABASE.SCHEMA, по умолчанию dkb).
  2. models/base.py, db/db.py (search_path), alembic/env.py читают её.
  3. Миграции не держат свою константу: схема берётся из контекста alembic (op.get_context().version_table_schema или общий хелпер), строковые FK dkb.x.id → f"{SCHEMA}.x.id". При значении по умолчанию DDL миграций не меняется — проверить сравнением alembic upgrade --sql до/после.
  4. Тесты: conftest.py берёт ту же настройку; тест, что миграции применяются и откатываются в схему с нестандартным именем.
  5. README / docs/dev: как задать схему.

Почему не сейчас

Идёт Срез 3b (#36, worktree .wt/slice-3b), он трогает модели и conftest. Начинать после слияния 3b, чтобы не конфликтовать. Если 3b добавит миграцию 0005 — она тоже попадает под п. 3.

Bounded-задача (без OpenSpec change).

## Проблема Имя схемы PostgreSQL `dkb` зашито в восьми местах: - `api/src/models/base.py:10` — `SCHEMA = "dkb"` (MetaData моделей, sequence, enum); - `api/src/db/db.py:10` — `search_path: "dkb"` движка приложения; - `api/alembic/env.py:23` — `SCHEMA = "dkb"` (CREATE SCHEMA, `version_table_schema`); - `api/alembic/versions/0001…0004` — свой `SCHEMA = "dkb"` в каждой миграции **плюс** строковые FK `"dkb.app_user.id"` и т.п. (0001, 0002); - `api/tests/conftest.py:100` — `search_path: "dkb"`. Платформа может выдать БД с другой схемой (или требовать отдельную схему на стенд), а миграции сейчас пишут только в `dkb`. ## Что сделать 1. Один источник: настройка (`raisa_config.yml` / env, например `DATABASE.SCHEMA`, по умолчанию `dkb`). 2. `models/base.py`, `db/db.py` (`search_path`), `alembic/env.py` читают её. 3. Миграции не держат свою константу: схема берётся из контекста alembic (`op.get_context().version_table_schema` или общий хелпер), строковые FK `dkb.x.id` → `f"{SCHEMA}.x.id"`. При значении по умолчанию DDL миграций не меняется — проверить сравнением `alembic upgrade --sql` до/после. 4. Тесты: `conftest.py` берёт ту же настройку; тест, что миграции применяются и откатываются в схему с нестандартным именем. 5. README / docs/dev: как задать схему. ## Почему не сейчас Идёт Срез 3b (#36, worktree `.wt/slice-3b`), он трогает модели и conftest. Начинать после слияния 3b, чтобы не конфликтовать. Если 3b добавит миграцию 0005 — она тоже попадает под п. 3. Bounded-задача (без OpenSpec change).
aep closed this issue 2026-10-07 18:33:46 +03:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: RSHB/arm-core#38
No description provided.