4.1 KiB
PostgreSQL runtime schema v1
Дата фиксации: 2026-07-24
Назначение
Это целевая серверная runtime-схема PostgreSQL для SHiNE без опоры на SQLite.
Схема v1 нужна как стартовая точка большого механического переноса DAO и runtime-запросов
с существующей SQLite-логики на PostgreSQL.
Ключевые решения
- Источник истины по пользователям:
solana_user_pda_current. - Legacy-таблицы старого runtime для пользователей и личных сообщений в новой схеме не создаются.
- Основная таблица серверных личных сообщений:
signed_messages. - Таблица
blockchain_stateсохраняется как runtime-state таблица сервера: она не является identity-слоем и не мигрируется как legacy SQLite data. - Триггеры по
blocksсохраняются и переписываются под PostgreSQL.
Таблицы sync-модуля Solana users
solana_sync_statesolana_sync_tx_historysolana_user_pda_currentsolana_user_pda_history
Таблицы server runtime
db_schema_versionactive_sessionsesp_pairing_settingsesp_pairing_requestsusers_paramsip_geo_cachetest_free_avatar_uploadssync_serversblockchain_stateblocksconnections_statemessage_statsreactions_statechannel_names_statechat200_statechat200_members_stateuser_push_tokenssigned_direct_message_replaysigned_direct_messages_historysigned_messagessigned_message_session_delivery
Триггеры
Схема v1 уже включает PostgreSQL-версии триггеров:
trg_blocks_line_integrity_bitrg_blocks_connection_state_aitrg_blocks_message_stats_like_aitrg_blocks_message_stats_reply_aitrg_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