Что это
Надёжная реляционная база данных — хранит данные строгими связанными таблицами.
Как используем
Основной выбор для продакшена, где важна целостность данных: заказы, клиенты, платежи.
Где база данных нужна бизнесу
- Заказы, платежи и подписки должны храниться надёжно, а не в чате и не в таблице, которую кто-то случайно отсортировал.
- Несколько сотрудников или администраторов работают с одними записями одновременно.
- Бот и сайт должны видеть одни и те же данные.
- Нужны отчёты по истории: месяц, год, по людям и категориям.
Какие бывают и когда какую
- SQLite — база в одном файле, без отдельного сервера. Для небольших ботов: карта лояльности клуба, бот дней рождений, кэш расшифровок. Резервная копия — копия файла.
- MariaDB / MySQL — база WordPress и проектов, где заказчик уже на ней. В биллинге Tech Poly VPN транзакции и блокировка строк в MariaDB не дают засчитать платёж дважды.
- PostgreSQL — наш выбор для новых проектов с деньгами, историей и аналитикой: финансовый учёт, сервисы с тарифами и ролями, очереди.
Как мы это используем
- Финансовый ассистент — PostgreSQL 17 в Docker: операции, счета, правила, долги, бюджеты. Ежедневный дамп проверяется на целостность и ротируется, а восстановление можно проверить на отдельной базе, не трогая боевую.
- UNLOCK — PostgreSQL 17 для открыток, ответов, тарифов и сессий. Отметки времени хранятся как TIMESTAMPTZ, база не публикует порт наружу и видна только сервису.
- Электронная очередь — PostgreSQL 15 через SQLAlchemy в асинхронном режиме, часовой пояс контейнеров задан явно, чтобы время в чекинах совпадало с московским.
Базу под задачу проектируем в разделе Боты для Telegram и ВКонтакте и Сайты.
Типичные проблемы
- Бэкап, который не проверяли. Копия, из которой ни разу не восстанавливались, может оказаться пустой. Поэтому восстановление проверяем на отдельной базе.
- Схема без миграций. В финансовом ассистенте миграций нет, и откат версии делается только из копии базы. Где данных много и схема меняется, нужны миграции.
- Время без часового пояса. В карте лояльности клуба время в базе хранится в UTC, и это записано в ограничения. В новых проектах храним TIMESTAMPTZ и задаём часовой пояс контейнера.
- База торчит наружу. Порт базы не публикуется: её видит только свой сервис во внутренней docker-сети.
Когда это не нужно
Небольшому боту на один клуб или одну семью отдельный сервер базы не нужен: SQLite в одном файле проще развернуть и проще сохранить. А сайту с текстами и кейсами база не нужна вовсе: сайт студии живёт на файлах в git.