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

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_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