[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-liquibase-kakova-struktura-changeset":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},952,"kakova-struktura-changeset",29,"liquibase","Liquibase","💧","Какова структура changeset?","Changeset — основной строительный блок миграции. Он содержит атрибуты идентификации, опциональные предусловия, одно или несколько изменений и инструкции для отката.\n\n\u003Cdetails>\u003Csummary>Пример полной структуры changeset\u003C\u002Fsummary>\n\n```xml\n\u003CchangeSet id=\"2\" author=\"sidorov\"\n           context=\"dev,test\"\n           labels=\"JIRA-123\"\n           runOnChange=\"false\"\n           runAlways=\"false\"\n           failOnError=\"true\"\n           dbms=\"postgresql\">\n\n    \u003C!-- Предусловия (опционально) -->\n    \u003CpreConditions onFail=\"MARK_RAN\">\n        \u003Cnot>\n            \u003CtableExists tableName=\"transactions\"\u002F>\n        \u003C\u002Fnot>\n    \u003C\u002FpreConditions>\n\n    \u003C!-- Комментарий (опционально) -->\n    \u003Ccomment>Создание таблицы транзакций\u003C\u002Fcomment>\n\n    \u003C!-- Одно или несколько изменений -->\n    \u003CcreateTable tableName=\"transactions\">\n        \u003Ccolumn name=\"id\" type=\"BIGINT\" autoIncrement=\"true\">\n            \u003Cconstraints primaryKey=\"true\" nullable=\"false\"\u002F>\n        \u003C\u002Fcolumn>\n        \u003Ccolumn name=\"account_id\" type=\"BIGINT\">\n            \u003Cconstraints nullable=\"false\"\n                         foreignKeyName=\"fk_transaction_account\"\n                         references=\"accounts(id)\"\u002F>\n        \u003C\u002Fcolumn>\n        \u003Ccolumn name=\"amount\" type=\"DECIMAL(19,2)\"\u002F>\n        \u003Ccolumn name=\"created_at\" type=\"TIMESTAMP\" defaultValueComputed=\"CURRENT_TIMESTAMP\"\u002F>\n    \u003C\u002FcreateTable>\n\n    \u003C!-- Rollback (опционально) -->\n    \u003Crollback>\n        \u003CdropTable tableName=\"transactions\"\u002F>\n    \u003C\u002Frollback>\n\n\u003C\u002FchangeSet>\n```\n\n\u003C\u002Fdetails>\n\n### Основные атрибуты changeset\n\n| Атрибут | Описание |\n|---|---|\n| `id` | Уникальный идентификатор (обязательный) |\n| `author` | Автор изменения (обязательный) |\n| `dbms` | СУБД, для которой применяется changeset (postgresql, oracle, mysql и т.д.) |\n| `context` | Контекст выполнения (dev, test, prod) |\n| `labels` | Метки для фильтрации |\n| `runOnChange` | Перевыполнить, если changeset изменился (по умолчанию false) |\n| `runAlways` | Выполнять при каждом запуске (по умолчанию false) |\n| `failOnError` | Остановиться при ошибке (по умолчанию true) |\n| `logicalFilePath` | Переопределить путь к файлу для расчёта уникальности |\n\n> **На собеседовании:** важно назвать обязательные атрибуты (id, author) и объяснить разницу между runOnChange и runAlways. Частая ошибка — путать эти два атрибута.","","junior",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Какова структура changeset? — Gymterview","Changeset — основной строительный блок миграции. Он содержит атрибуты идентификации, опциональные предусловия, одно или несколько изменений и инструкции для отк","Changeset — основной строительный блок миграции. Он содержит атрибуты идентификации, опциональные предусловия, одно или ",[7,13],"Changeset — основной строительный блок миграции. Он содержит атрибуты идентификации, опциональные предусловия, одно или несколько изменений и инструкции для отката.",true]