Возврат определенного изменения с помощью sqitch? - PullRequest
0 голосов
/ 23 апреля 2019

Можно ли отменить конкретное изменение, если в sqitch нет зависимостей?Например, я настроил свой проект, как показано ниже, развернул его и загрузил некоторые данные.Примерно через день (или, может быть, в тот же день) заинтересованная сторона решает, что мне нужно добавить еще несколько столбцов в fct_tickets или внести другие изменения в эту таблицу.

Если я попытаюсь отменить fct_tickets, он вернетсявсе последующие таблицы - это позор, потому что я уже загрузил в них данные.

Я пробовал определенные флаги (--upon, --unto и т. Д.), Но он все еще хочет восстановить все после fct_tickets в моем файле sqitch.plan.

sqitch add scm_example --template pg_create_schema -s schema=example -n 'Create schema for Example data.'
sqitch add fct_tickets --requires scm_example -n 'Create table for ticket data.'
sqitch add fct_chats --requires scm_example -n 'Create table for chat data.'
sqitch add fct_calls --requires scm_example -n 'Create table for call data.'
sqitch add dim_users --requires scm_example -n 'Create table for user mapping data.'
sqitch add dim_source_files --requires scm_example -n 'Create table to track all files downloaded from the SFTP.' 

IМожно изменить таблицу и добавить столбцы, но когда это новый проект первого дня, было бы неплохо иметь чистый лист.

Это не страшно - мне просто интересно, что я упустил что-то простое, так какfct_tickets не имеет зависимостей.

1 Ответ

2 голосов
/ 03 мая 2019

Нет, вы не можете отменить ни одно изменение, кроме самого последнего развернутого изменения.Это по замыслу.Sqitch использует шаблон дерева Merkle , аналогичный Git и Blockchain, для обеспечения целостности развертывания.Это означает, что развертывание является связанной цепочкой в ​​порядке, указанном в файле плана.Если вы развернули свой проект Sqitch в среде, в которую были загружены данные, лучше добавить новое изменение, чтобы добавить новый столбец.

Шаблон, который я часто использую при разработке базы данных доВыпуск продукции должен часто изменять изменения.Это означает изменение сценария развертывания fct_tickets для добавления нового столбца, затем повторную установку на fct_tickets^, который вернет все изменения после изменения непосредственно перед fct_tickets, а затем повторно развернет их все.Я избегаю загрузки данных в такие системы как часть процесса разработки, вместо этого я либо храню данные, которые важны для модели данных, в отдельном изменении, либо в отдельном файле, который загружается независимо, например, в модульных тестах.

Если у вас есть тестовая система или что-то, к чему другие люди добавили данные, и это не финальная версия с тегами, то ваш лучший вариант, вероятно, состоит в том, чтобы выгрузить таблицу fct_tickets в файл, выполнить перезагрузку с изменением, а затем перезагрузитьданные из этого файла.Обязательно установите значение по умолчанию для столбца или измените файл дампа, чтобы добавить данные в каждую строку перед загрузкой в ​​обновленную таблицу.

...