Практика рассчитана на отдельную учебную среду и вымышленные данные.
Безопасные миграции
Схему могут одновременно читать старая и новая версии приложения. Изменение нужно раскладывать так, чтобы промежуточные состояния оставались совместимыми.
Изменение схемы и обновление приложения не всегда происходят одновременно. Сначала добавьте совместимую структуру, затем переведите код и проверьте данные; удаление старого поля оставьте отдельному этапу. Для каждого шага определите наблюдаемый результат и возможную остановку, не называя обратное изменение универсальным восстановлением.
- Expand/contract
- Блокировки DDL
- Проверка совместимости
Попробуйте
- Спланируйте добавление необязательного поля subtitle в books.
- Опишите поведение старого приложения, новой записи без subtitle и новой записи с ним.
- Отдельно решите, когда поле можно сделать обязательным и как проверить заполнение.
Добавление и ужесточение ограничения — разные этапы; старый клиент не ломается без анализа.
Почему DROP старого поля нельзя считать первым шагом переименования?
Работающие старые клиенты ещё могут его использовать; сначала нужен совместимый переход и проверка потребителей.
Продолжить на русском и английском
- Введение в PostgreSQL RU ↗
Таблицы, SELECT, JOIN и транзакции. Русский перевод документации у Postgres Professional; нужна учебная PostgreSQL для команд.
- PostgreSQL Tutorial EN ↗
Создайте только свою учебную базу и выполните первые запросы. Документация открыта; для команд нужен отдельный экземпляр PostgreSQL.
Восстановление данных
Наличие файла копии не доказывает возможность восстановления. Проверяют отдельную цель, совместимость, полноту данных и время восстановления.
Файл копии ещё не доказывает возможность восстановления. Нужны понятная точка данных, совместимые инструменты и отдельная проверка восстановленного содержимого. В учебной задаче используйте заранее созданный вымышленный набор: сравните количество строк и ключевые значения после восстановления. Не выполняйте упражнение на рабочей базе.
- Дамп и восстановление
- RPO/RTO
- Проверка результата
Попробуйте
- Составьте план для вымышленной базы из трёх таблиц без создания копий реальных данных.
- Назовите отдельную пустую учебную цель и способ исключить запись поверх исходной базы.
- Задайте проверки: таблицы, строки, ограничения и контрольный запрос; фактические команды здесь не выполняйте.
План явно исключает исходную базу как цель; указаны проверяемые данные и допустимая потеря/срок.
Почему успешный exit процесса ещё не полная проверка?
Он не подтверждает бизнес-целостность, нужный момент времени и доступность восстановленных данных приложению.
Продолжить на русском и английском
- Введение в PostgreSQL RU ↗
Таблицы, SELECT, JOIN и транзакции. Русский перевод документации у Postgres Professional; нужна учебная PostgreSQL для команд.
- PostgreSQL Tutorial EN ↗
Создайте только свою учебную базу и выполните первые запросы. Документация открыта; для команд нужен отдельный экземпляр PostgreSQL.
Эксплуатация базы
Долгий запрос, блокировка и нехватка подключений дают разные симптомы. Начинайте с наблюдения и влияния, а не с массового завершения сессий.
Эксплуатация начинается с вопросов: какая версия работает, какие соединения активны, сколько места осталось и что изменилось перед симптомом? Сначала наблюдайте, затем выбирайте вмешательство. Длинный запрос, блокировка и медленный диск дают разные причины ожидания; массовое завершение соединений может только скрыть исходную картину.
- Сессия и транзакция
- Блокировка и ожидание
- План и статистика
Попробуйте
- Разберите отчёт: query A выполняется 1 s, query B ждёт lock 50 s, session C держит открытую транзакцию 10 min.
- Определите, какое ожидание нужно связать с блокирующей сессией.
- Перечислите сведения, нужные до завершения любой сессии.
Отличены исполнение и ожидание; возраст транзакции не объявлен доказанной причиной без связи блокировки.
Почему нельзя завершить все долгие сессии?
Они могут выполнять важную работу, а симптом может быть ожиданием одной блокировки; действие требует контекста и полномочий.
Продолжить на русском и английском
- Введение в PostgreSQL RU ↗
Таблицы, SELECT, JOIN и транзакции. Русский перевод документации у Postgres Professional; нужна учебная PostgreSQL для команд.
- PostgreSQL Tutorial EN ↗
Создайте только свою учебную базу и выполните первые запросы. Документация открыта; для команд нужен отдельный экземпляр PostgreSQL.
- Site Reliability Engineering books EN ↗
SLO, мониторинг и разбор инцидентов. Открытые онлайн-книги; материал для этапа после основ.
Доступ к базе
Аутентификация отвечает, кто подключился, а авторизация — какие действия ему разрешены. Роль приложения обычно не должна владеть всеми объектами и администрировать сервер.
Роль приложения должна иметь права на нужные действия и объекты, а не полномочия администратора. Разделяйте владельца схемы, мигратора и обычное приложение. Проверьте также кто может выдавать права другим. В учебном примере сначала составьте таблицу доступа; реальные пароли, сетевые правила и рабочие роли менять не требуется.
- Роли и привилегии
- Аутентификация
- Минимум доступа
Попробуйте
- Для вымышленной библиотеки задайте reader, librarian и migration роли.
- Составьте матрицу SELECT/INSERT/UPDATE по трём таблицам.
- Проверьте, может ли reader менять чужие выдачи, а приложение — менять схему.
Для каждой роли есть конкретный минимум; административные права не выдаются для удобства.
Почему общий superuser для приложения опасен?
Ошибка или утечка даёт слишком широкий доступ; последствия не ограничены задачами приложения.
Продолжить на русском и английском
- Введение в PostgreSQL RU ↗
Таблицы, SELECT, JOIN и транзакции. Русский перевод документации у Postgres Professional; нужна учебная PostgreSQL для команд.
- PostgreSQL Tutorial EN ↗
Создайте только свою учебную базу и выполните первые запросы. Документация открыта; для команд нужен отдельный экземпляр PostgreSQL.