Ответы пользователя по тегу Миграция базы данных
  • Почему не получается запустить миграцию(php yii migrate)?

    Melkij
    @Melkij
    PostgreSQL DBA
    Access denied for user 'yii2user'@'localhost' (using password: YES)'

    База вас слушает и слышит. И ей не нравится как вы представились.
    Проверяйте, есть ли таковой пользователь, точно ли у него такой пароль.
    Ответ написан
    3 комментария
  • Как реализовать миграцию больших таблиц без блокировок?

    Melkij
    @Melkij
    PostgreSQL DBA
    Можно я сошлюсь на своё сочинение на SO? https://ru.stackoverflow.com/q/721985/203622

    Впрочем пару слов добавлю:
    добавив к примеру столбец

    Важно какой именно. Если default null - просто берёте и добавляете со statement_timeout в 1 секунду. alter table всё равно возьмёт блокировку на таблицу, но default null поле - это лишь быстрое обновление системного каталога.
    Если другой default - то для pg11 просто берёте и добавляете с таймаутом, для более старых немного приключений.
    Ответ написан
    2 комментария
  • Как обновляют структуру БД и данные на продакшене?

    Melkij
    @Melkij
    PostgreSQL DBA
    Поскольку вопрос о трансформации имеющихся данных - то индивидуально для каждой задачи.

    Начать необходимо вот отсюда: https://habrahabr.ru/post/146901/
    И, собственно, придти к выводу, что лучше оставить как есть в одном поле. Если в каких-то местах нужны другие формы обращений - прописать их явно, а не конструируя по имеющимся заблуждениям о фио.

    А так:
    0) делается дополнительный бекап
    1) выкатывается alter table добавляющий новый поля
    2) выкатывается приложение, умеющее писать синхронно старую и новую структуру, но читающее только старую
    3) отдельным процессом в цикле небольшими частями преобразуются данные - это если подлежит автоматической обработке
    4) выкатывается приложение использующее только новую структуру
    5) архивируется и удаляется исходная структура

    Для всего-то тысячи записей может проще будет залочить табличку на несколько секунд.

    Если тривиальной автоматике обработка не подлежит, то часто вместо 3 пункта делают выгрузку primary key, source_data, как-нибудь изменяют и готовят csv primary key, source_data, new_data, копируют в temporary table, затем делают слияние мультитабличным update этих двух таблиц с recheck'ом по source_data. Затем выгружают данные для которых не было обновления, разбираются, ещё раз обновляют и т.д. до заполнения всего.
    Ответ написан
    2 комментария