intDataBlog
← ЖурналМаршруты обучения ↗

База данных: изменение и восстановление

Спланируйте миграцию, проверку восстановления и минимальные права.

Практика рассчитана на отдельную учебную среду и вымышленные данные.

Безопасные миграции

Схему могут одновременно читать старая и новая версии приложения. Изменение нужно раскладывать так, чтобы промежуточные состояния оставались совместимыми.

Изменение схемы и обновление приложения не всегда происходят одновременно. Сначала добавьте совместимую структуру, затем переведите код и проверьте данные; удаление старого поля оставьте отдельному этапу. Для каждого шага определите наблюдаемый результат и возможную остановку, не называя обратное изменение универсальным восстановлением.

  • Expand/contract
  • Блокировки DDL
  • Проверка совместимости

Попробуйте

  1. Спланируйте добавление необязательного поля subtitle в books.
  2. Опишите поведение старого приложения, новой записи без subtitle и новой записи с ним.
  3. Отдельно решите, когда поле можно сделать обязательным и как проверить заполнение.

Добавление и ужесточение ограничения — разные этапы; старый клиент не ломается без анализа.

Почему DROP старого поля нельзя считать первым шагом переименования?

Работающие старые клиенты ещё могут его использовать; сначала нужен совместимый переход и проверка потребителей.

Продолжить на русском и английском
  • Введение в PostgreSQL RU ↗

    Таблицы, SELECT, JOIN и транзакции. Русский перевод документации у Postgres Professional; нужна учебная PostgreSQL для команд.

  • PostgreSQL Tutorial EN ↗

    Создайте только свою учебную базу и выполните первые запросы. Документация открыта; для команд нужен отдельный экземпляр PostgreSQL.

Восстановление данных

Наличие файла копии не доказывает возможность восстановления. Проверяют отдельную цель, совместимость, полноту данных и время восстановления.

Файл копии ещё не доказывает возможность восстановления. Нужны понятная точка данных, совместимые инструменты и отдельная проверка восстановленного содержимого. В учебной задаче используйте заранее созданный вымышленный набор: сравните количество строк и ключевые значения после восстановления. Не выполняйте упражнение на рабочей базе.

  • Дамп и восстановление
  • RPO/RTO
  • Проверка результата

Попробуйте

  1. Составьте план для вымышленной базы из трёх таблиц без создания копий реальных данных.
  2. Назовите отдельную пустую учебную цель и способ исключить запись поверх исходной базы.
  3. Задайте проверки: таблицы, строки, ограничения и контрольный запрос; фактические команды здесь не выполняйте.

План явно исключает исходную базу как цель; указаны проверяемые данные и допустимая потеря/срок.

Почему успешный exit процесса ещё не полная проверка?

Он не подтверждает бизнес-целостность, нужный момент времени и доступность восстановленных данных приложению.

Продолжить на русском и английском
  • Введение в PostgreSQL RU ↗

    Таблицы, SELECT, JOIN и транзакции. Русский перевод документации у Postgres Professional; нужна учебная PostgreSQL для команд.

  • PostgreSQL Tutorial EN ↗

    Создайте только свою учебную базу и выполните первые запросы. Документация открыта; для команд нужен отдельный экземпляр PostgreSQL.

Эксплуатация базы

Долгий запрос, блокировка и нехватка подключений дают разные симптомы. Начинайте с наблюдения и влияния, а не с массового завершения сессий.

Эксплуатация начинается с вопросов: какая версия работает, какие соединения активны, сколько места осталось и что изменилось перед симптомом? Сначала наблюдайте, затем выбирайте вмешательство. Длинный запрос, блокировка и медленный диск дают разные причины ожидания; массовое завершение соединений может только скрыть исходную картину.

  • Сессия и транзакция
  • Блокировка и ожидание
  • План и статистика

Попробуйте

  1. Разберите отчёт: query A выполняется 1 s, query B ждёт lock 50 s, session C держит открытую транзакцию 10 min.
  2. Определите, какое ожидание нужно связать с блокирующей сессией.
  3. Перечислите сведения, нужные до завершения любой сессии.

Отличены исполнение и ожидание; возраст транзакции не объявлен доказанной причиной без связи блокировки.

Почему нельзя завершить все долгие сессии?

Они могут выполнять важную работу, а симптом может быть ожиданием одной блокировки; действие требует контекста и полномочий.

Продолжить на русском и английском
  • Введение в PostgreSQL RU ↗

    Таблицы, SELECT, JOIN и транзакции. Русский перевод документации у Postgres Professional; нужна учебная PostgreSQL для команд.

  • PostgreSQL Tutorial EN ↗

    Создайте только свою учебную базу и выполните первые запросы. Документация открыта; для команд нужен отдельный экземпляр PostgreSQL.

  • Site Reliability Engineering books EN ↗

    SLO, мониторинг и разбор инцидентов. Открытые онлайн-книги; материал для этапа после основ.

Доступ к базе

Аутентификация отвечает, кто подключился, а авторизация — какие действия ему разрешены. Роль приложения обычно не должна владеть всеми объектами и администрировать сервер.

Роль приложения должна иметь права на нужные действия и объекты, а не полномочия администратора. Разделяйте владельца схемы, мигратора и обычное приложение. Проверьте также кто может выдавать права другим. В учебном примере сначала составьте таблицу доступа; реальные пароли, сетевые правила и рабочие роли менять не требуется.

  • Роли и привилегии
  • Аутентификация
  • Минимум доступа

Попробуйте

  1. Для вымышленной библиотеки задайте reader, librarian и migration роли.
  2. Составьте матрицу SELECT/INSERT/UPDATE по трём таблицам.
  3. Проверьте, может ли reader менять чужие выдачи, а приложение — менять схему.

Для каждой роли есть конкретный минимум; административные права не выдаются для удобства.

Почему общий superuser для приложения опасен?

Ошибка или утечка даёт слишком широкий доступ; последствия не ограничены задачами приложения.

Продолжить на русском и английском
  • Введение в PostgreSQL RU ↗

    Таблицы, SELECT, JOIN и транзакции. Русский перевод документации у Postgres Professional; нужна учебная PostgreSQL для команд.

  • PostgreSQL Tutorial EN ↗

    Создайте только свою учебную базу и выполните первые запросы. Документация открыта; для команд нужен отдельный экземпляр PostgreSQL.