Files
SHiNE-server/docs/libs/shine-server-bd/POSTGRES_RUNTIME_SCHEMA_V1.md
T

93 lines
4.1 KiB
Markdown

# PostgreSQL runtime schema v1
Дата фиксации: `2026-07-24`
## Назначение
Это целевая серверная runtime-схема PostgreSQL для SHiNE без опоры на SQLite.
Схема `v1` нужна как стартовая точка большого механического переноса DAO и runtime-запросов
с существующей SQLite-логики на PostgreSQL.
## Ключевые решения
- Источник истины по пользователям: `solana_user_pda_current`.
- Legacy-таблица `solana_users` в новой схеме не создаётся.
- Legacy-таблица `direct_messages` в новой схеме не создаётся.
- Основная таблица серверных личных сообщений: `signed_messages`.
- Таблица `blockchain_state` сохраняется как runtime-state таблица сервера:
она не является identity-слоем и не мигрируется как legacy SQLite data.
- Триггеры по `blocks` сохраняются и переписываются под PostgreSQL.
## Таблицы sync-модуля Solana users
- `solana_sync_state`
- `solana_sync_tx_history`
- `solana_user_pda_current`
- `solana_user_pda_history`
## Таблицы server runtime
- `db_schema_version`
- `active_sessions`
- `esp_pairing_settings`
- `esp_pairing_requests`
- `users_params`
- `ip_geo_cache`
- `test_free_avatar_uploads`
- `sync_servers`
- `blockchain_state`
- `blocks`
- `connections_state`
- `message_stats`
- `reactions_state`
- `channel_names_state`
- `chat200_state`
- `chat200_members_state`
- `user_push_tokens`
- `signed_direct_message_replay`
- `signed_direct_messages_history`
- `signed_messages`
- `signed_message_session_delivery`
## Триггеры
Схема `v1` уже включает PostgreSQL-версии триггеров:
- `trg_blocks_line_integrity_bi`
- `trg_blocks_connection_state_ai`
- `trg_blocks_message_stats_like_ai`
- `trg_blocks_message_stats_reply_ai`
- `trg_blocks_edit_apply_ai`
## Что не входит в v1
- полная зачистка legacy-документации, старых названий и TODO-хвостов;
- переименование Java DAO/классов `*V2` в runtime-коде;
- перенос прямых SQL-запросов из хэндлеров в DAO/service;
- переключение всего runtime-кода на новый `DbProvider`.
Это отдельные механические шаги поверх уже утверждённой схемы.
## Совместимость со старыми блоками каналов
В runtime-сервере сознательно нет жёсткой серверной проверки
`channelName must not contain only digits`.
Причина: в уже существующей истории блокчейна есть каналы с числовыми именами,
и при холодном восстановлении сервера с пустой БД и без `.bch` такие блоки должны
успешно переигрываться от других sync-серверов.
Сейчас правило "новый публичный канал не должен состоять только из цифр" остаётся
на уровне UI/продуктовых требований и должно быть позже возвращено на сервере
отдельным совместимым способом, который не ломает replay исторических блоков.
## Инициализация пустой БД
Если сервер подключается к PostgreSQL через `db.url=jdbc:postgresql:...` и в выбранной БД ещё нет таблицы `db_schema_version`,
он сам автоматически накатывает `schema_v1.sql` из classpath-ресурса:
- ресурс: `shine-server-db/src/main/resources/postgres/schema_v1.sql`
- признак пустой схемы: отсутствует `db_schema_version`
- стартовая версия схемы: `1`