Схема БД конфигурируемая: DB_SCHEMA (#38) #53
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "feat/38-db-schema-setting"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #38
Что сделано
Settings.DB_SCHEMA(по умолчаниюdkb; валидация[a-z_][a-z0-9_]{0,62}, неpg_*). В контуре —OPENBAO__APP__DB_SCHEMA.models/base.py(SCHEMA=settings.DB_SCHEMA: MetaData, enum, sequence),db/db.py(search_path),alembic/env.py,scripts/seed.py,tests/conftest.pyчитают её. Миграции 0001-0005 не держат своей константы:from src.models.base import SCHEMA, строковые FK —f"{SCHEMA}.x.id".tests/test_db_schema.py—upgrade head/ запрос через сессию приложения /downgrade baseв схемеdkb_alt(схемаdkbне создаётся, все FK и 28 enum вdkb_alt).api/.env.example,api/.env.test, README (таблица переменных), CLAUDE.md.Сравнение офлайн-SQL
alembic -x dburl=... upgrade head --sql(ENV_FILE=.env.test) до правки (origin/main) и после, значение по умолчанию:cmp— идентичны, 45235 байт, sha2567ad2d14440e5198488059b30044ffb2cc55cf9dc330abaed83c697d9175fb592у обоих. СDB_SCHEMA=dkb_altв выводе 286 строк сdkb_altи ни одной сdkb.make check-full
Зелёный (код 0): 1261 passed (unit), 818 passed (integration), ruff/mypy/dbml-check/docker/web.
Rulings I made
models/base.py(а неschema_translate_map). Настройки уже нужны alembic (URL БД) и всем процессам,.env.testподхватывается pytest-env;schema_translate_mapне покрывает сырой SQL и строковые FK миграций и требует настройки в каждой точке создания движка. Цена: любой процесс, импортирующий модели, должен иметь env настроек (раньше нужен был и так:src/__init__тянет приложение).src.models.base.SCHEMA, а не изop.get_context()—SCHEMAнужна на уровне модуля (хелперenum, FK-строки в теле), контекст доступен только внутриupgrade().DB_SCHEMAв.env.testфиксированdkb; тест нестандартной схемы запускает alembic и «приложение» подпроцессами сDB_SCHEMA=dkb_altв окружении (SCHEMAчитается при импорте, в процессе pytest меняться не может).run_alembic/alembic_asyncполучили параметрenv.scripts/check_dbml_vs_orm.pyпринудительно ставитDB_SCHEMA=dkbв окружении процесса: сверка с DBML идёт в эталонной схеме, имя схемы на неё не влияет;dbml_parity.pyостаётся без импортаsrc.tests/test_*,"dkb."в SQL тестов) оставлены с литераломdkb— они работают в схеме по умолчанию; параметризовать их — вне задачи.Наблюдения
DB_SCHEMAу уже мигрированной БД не переносит таблицы — задокументировано в README (одно значение для приложения и миграций). deferred (нужна ли миграция «переименования схемы» — решение владельца).🤖 Generated with Claude Code
https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
DB_SCHEMA (по умолчанию dkb, валидация идентификатора) читают models/base.py (SCHEMA), db/db.py (search_path), alembic/env.py и миграции 0001-0005 (SCHEMA и строковые FK f"{SCHEMA}.x.id" вместо литералов). В контуре - OPENBAO__APP__DB_SCHEMA. Офлайн-SQL `alembic upgrade head --sql` при значении по умолчанию совпадает побайтно. Тесты: валидация настройки, миграции и сессия приложения в схеме dkb_alt; .env.example/.env.test/README/CLAUDE.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3