Что такое Postgres? База данных, на которой работают многие приложения
Postgres (официально PostgreSQL) — бесплатная реляционная база данных с открытым кодом: программа, которая хранит данные приложения в таблицах из строк и столбцов, связывает таблицы между собой и отвечает на вопросы о них на языке SQL. Она известна надёжностью, строгим отношением к сохранности данных и гибкостью — от списка регистраций до записей крупной компании. Многие веб-приложения и многие сервисы, которые их хостят, построены на ней.
Почему Postgres важен при создании приложений с ИИ
Когда конструктор приложений с ИИ добавляет в проект «базу данных», с большой вероятностью это Postgres. Писать SQL не нужно, но небольшое понимание очень помогает:
- Можно описать данные в той форме, которая нужна базе. Фраза «у клиентов много заказов, в каждом заказе много позиций» напрямую превращается в таблицы.
- Можно попросить нужную защиту. Postgres сам может отказаться принимать плохие данные — например, дубликат почты или заказ для несуществующего клиента, — если ИИ настроит правила.
- Можно прочитать, что сделал ИИ. Названия таблиц, колонки и связи легко проверить в просмотрщике таблиц, даже не трогая код.
Бытовая аналогия: очень строгий архив
Представьте архивную канцелярию с шкафом для каждого вида документов: один для клиентов, один для заказов, один для товаров. Каждая карточка в ящике заполнена по одинаковым печатным полям. У каждой карточки есть уникальный номер, а карточка заказа не повторяет данные клиента, а просто указывает «клиент № 214» и ссылается на ящик клиентов.
Клерк строгий. Он не примет заказ, который ссылается на несуществующего клиента. Он не примет карточку с пустым обязательным полем даты. А если вы попросите перевести деньги с одной карточки счёта на другую, он выполнит либо обе части, либо ни одной — никогда только одну.
Это и есть Postgres. Ящики — это таблицы, печатные поля — колонки, каждая карточка — строка, а ссылка «клиент № 214» — внешний ключ.
Что Postgres делает хорошо
| Возможность | Что это значит простыми словами |
|---|---|
| Таблицы и связи | Данные живут в таблицах, которые ссылаются друг на друга, поэтому ничего не копируется в пяти местах |
| SQL | Стандартный язык для вопросов: «все неоплаченные заказы за прошлый месяц, сначала новые» |
| Транзакции (ACID) | Группа изменений либо целиком выполняется, либо не выполняется ни одно её изменение, даже если сервер упал на полпути |
| Ограничения (constraints) | Правила, которые база проверяет сама: обязательные поля, уникальные адреса почты, корректные связи между таблицами |
| Индексы | Ускорители поиска, чтобы запросы оставались быстрыми по мере роста таблиц |
| JSONB | Хранение гибких данных в стиле документов в колонке, когда фиксированная структура не подходит |
| Полнотекстовый поиск | Поиск слов в текстовых полях без отдельного поискового сервиса — для простых случаев |
| Расширения | Дополнения, например PostGIS для карт и геоданных или pgvector для хранения векторов ИИ |
| Безопасность на уровне строк (row-level security) | Правила внутри базы: какие строки видит конкретный пользователь |
Postgres начинался как исследовательский проект Калифорнийского университета в Беркли в 1980-х и с 1990-х развивается открыто мировым сообществом. Эта долгая история — причина, по которой его часто выбирают по умолчанию: он хорошо документирован, широко поддерживается, и каждый крупный облачный провайдер предлагает его управляемую версию.
Пример: превращаем таблицу в базу данных
Допустим, у вас небольшой бизнес по кейтерингу, и всё вы ведёте в одной таблице: каждая строка — мероприятие, с именем клиента, телефоном и почтой, датой, позициями меню и ценой.
Проблемы возникают быстро. Один и тот же клиент встречается в шести строках с двумя разными телефонами. Позиции меню набраны в одной ячейке как «канапе x40, салат x2», поэтому вы не можете подсчитать, сколько канапе сделали в этом месяце.
В Postgres та же информация становится четырьмя таблицами:
| Таблица | Колонки | Примечания |
|---|---|---|
| clients | id, name, phone, email | Почта должна быть уникальной |
| events | id, client_id, date, venue, status | client_id должен указывать на реального клиента |
| menu_items | id, name, unit_price | Одна строка на блюдо |
| event_items | event_id, menu_item_id, quantity | Связывает мероприятия с блюдами, с количеством |
Теперь телефон клиента хранится в одном месте. Вопрос «сколько канапе мы сделали в марте?» — это один SQL-запрос. А когда вы записываете новое мероприятие с позициями, транзакция гарантирует, что не останется мероприятия с наполовину сохранёнными позициями.
Этот шаг люди часто пропускают, когда просят ИИ «сделать приложение из моей таблицы». Руководство по превращению таблицы в приложение идёт дальше.
Ключевые термины
- Таблица, строка, колонка: вид сущности, один её экземпляр, одна часть информации о ней.
- Первичный ключ: уникальный идентификатор каждой строки, обычно
id. - Внешний ключ: колонка, которая указывает на строку в другой таблице, например
client_id. - Схема: структура всех ваших таблиц и колонок.
- Миграция: сохранённое, повторяемое изменение схемы, например «добавить колонку
venueв events». - Запрос: вопрос или инструкция, написанная на SQL.
- Строка подключения: адрес и пароль, по которым бэкенд подключается к базе. Это секрет — см. переменные окружения и секреты.
- Управляемый Postgres: сервис, который запускает, резервирует и обновляет Postgres за вас.
Для повседневных операций, которые любое приложение выполняет с этими таблицами — создание, чтение, обновление, удаление, — см. что означает CRUD.
Частые ошибки и заблуждения
- Одна огромная таблица. Копирование таблицы колонка за колонкой приводит к тем же проблемам с дублированием. Выносите повторяющееся в отдельные таблицы.
- Хранение списков в одном текстовом поле. «канапе x40, салат x2» в одной колонке нельзя нормально посчитать или найти. Используйте связующую таблицу.
- Отсутствие ограничений. Без правила «почта должна быть уникальной» или «у каждого мероприятия должен быть клиент» плохие данные тихо попадают в базу и всплывают через месяцы.
- Ручное изменение базы в продакшене. Просите изменения схемы оформлять как миграции, чтобы их можно было записать и повторить.
- Позволять браузеру напрямую обращаться к базе. Фронтенд должен работать через ваш бэкенд, который проверяет права. Пароль от базы никогда не должен попадать в код страницы.
- «Postgres нужен только крупным компаниям». Он отлично работает и для списка ожидания из 50 строк, и вам не придётся с него уходить по мере роста.
- Считать, что база — это резервная копия. Она хранит данные, но сама по себе не защищает от их удаления. Проверьте, какие резервные копии даёт ваш хостинг.
Что попросить у конструктора ИИ
- «Сохраняй [объекты] в базе данных. Таблицы: … с такими полями: … Свяжи каждый [заказ] с [клиентом].»
- «Сделай почту клиентов уникальной. Сделай эти поля обязательными. Не допускай заказ без клиента.»
- «Используй миграции для каждого изменения схемы.»
- «Добавь индексы для самых частых поисков: заказы по клиенту и по дате.»
- «Весь доступ к базе идёт через сервер. Строку подключения храни в переменных окружения.»
Если вы вообще только знакомитесь с идеей базы данных, начните с что такое база данных, а потом вернитесь сюда. Полноценное приложение показывает, где база данных находится рядом с фронтендом и бэкендом.
Postgres в Mythex
Mythex выдаёт каждому проекту, которому она нужна, собственную базу Postgres. Настраивать её не нужно: попросите в чате («сохраняй email участников списка ожидания в базе данных») или используйте команду /database, и Mythex подключит базу, передаст приложению данные для подключения и при необходимости создаст таблицы. База опубликованного приложения засыпает после пяти минут простоя и просыпается при следующем запросе; оплачивается время, когда она реально работала, из того же баланса кредитов, что и создание. Подробности — в документации по базам данных, а шаблоны дашбордов — хорошее место, чтобы увидеть приложения, работающие с данными.
Вопросы
Postgres — это то же самое, что PostgreSQL?
Да. PostgreSQL — официальное название, Postgres — распространённое короткое имя; оба обозначают одну и ту же реляционную базу данных с открытым кодом.
Postgres бесплатный?
Да. PostgreSQL распространяется с открытым кодом по разрешительной лицензии PostgreSQL License, так что его можно использовать бесплатно, в том числе в коммерческих продуктах. Платите вы только за серверы или управляемый сервис, на котором он работает.
В чём разница между Postgres и MySQL?
Оба — бесплатные реляционные SQL-базы, и оба подходят для большинства приложений. Postgres известен строгой целостностью данных, богатыми типами данных, такими как JSONB и массивы, и большой экосистемой расширений; MySQL известен простотой и долгой историей в веб-хостинге.
Postgres подходит для небольшого приложения?
Да. Он хорошо работает и для простого списка ожидания из одной таблицы, и для крупных промышленных систем, так что вам не придётся менять базу по мере роста приложения. Управляемые сервисы позволяют запускать его без администратора баз данных.