[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-liquibase-kak-rabotat-s-dannymi-v-liquibase-insert-loaddata-loadupdatedata":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},962,"kak-rabotat-s-dannymi-v-liquibase-insert-loaddata-loadupdatedata",29,"liquibase","Liquibase","💧","Как работать с данными в Liquibase (insert, loadData, loadUpdateData)?","Liquibase поддерживает три основных способа работы с данными: поштучная вставка через insert, массовая загрузка из CSV через loadData и upsert-загрузка через loadUpdateData.\n\n### insert\n\nВставка одной или нескольких записей:\n\n\u003Cdetails>\u003Csummary>Пример insert с rollback\u003C\u002Fsummary>\n\n```xml\n\u003CchangeSet id=\"10\" author=\"ivanov\">\n    \u003Cinsert tableName=\"currencies\">\n        \u003Ccolumn name=\"code\" value=\"RUB\"\u002F>\n        \u003Ccolumn name=\"name\" value=\"Российский рубль\"\u002F>\n        \u003Ccolumn name=\"is_active\" valueBoolean=\"true\"\u002F>\n    \u003C\u002Finsert>\n    \u003Cinsert tableName=\"currencies\">\n        \u003Ccolumn name=\"code\" value=\"USD\"\u002F>\n        \u003Ccolumn name=\"name\" value=\"Доллар США\"\u002F>\n        \u003Ccolumn name=\"is_active\" valueBoolean=\"true\"\u002F>\n    \u003C\u002Finsert>\n\n    \u003Crollback>\n        \u003Cdelete tableName=\"currencies\">\n            \u003Cwhere>code IN ('RUB', 'USD')\u003C\u002Fwhere>\n        \u003C\u002Fdelete>\n    \u003C\u002Frollback>\n\u003C\u002FchangeSet>\n```\n\n\u003C\u002Fdetails>\n\n### loadData\n\nЗагрузка данных из CSV-файла:\n\n```xml\n\u003CchangeSet id=\"11\" author=\"ivanov\">\n    \u003CloadData tableName=\"currencies\"\n              file=\"db\u002Fdata\u002Fcurrencies.csv\"\n              separator=\",\"\n              encoding=\"UTF-8\">\n        \u003Ccolumn name=\"code\" type=\"STRING\"\u002F>\n        \u003Ccolumn name=\"name\" type=\"STRING\"\u002F>\n        \u003Ccolumn name=\"is_active\" type=\"BOOLEAN\"\u002F>\n    \u003C\u002FloadData>\n\u003C\u002FchangeSet>\n```\n\nФайл `currencies.csv`:\n\n```\ncode,name,is_active\nRUB,Российский рубль,true\nUSD,Доллар США,true\nEUR,Евро,true\n```\n\n### loadUpdateData\n\nКомбинация INSERT и UPDATE — если запись существует (по первичному ключу или указанному столбцу), она обновляется; если не существует — вставляется:\n\n```xml\n\u003CchangeSet id=\"12\" author=\"ivanov\">\n    \u003CloadUpdateData tableName=\"currencies\"\n                    file=\"db\u002Fdata\u002Fcurrencies.csv\"\n                    primaryKey=\"code\"\n                    separator=\",\"\n                    encoding=\"UTF-8\">\n        \u003Ccolumn name=\"code\" type=\"STRING\"\u002F>\n        \u003Ccolumn name=\"name\" type=\"STRING\"\u002F>\n        \u003Ccolumn name=\"is_active\" type=\"BOOLEAN\"\u002F>\n    \u003C\u002FloadUpdateData>\n\u003C\u002FchangeSet>\n```\n\nЭто особенно полезно для справочных данных, которые могут обновляться от релиза к релизу.\n\n> **На собеседовании:** важно знать разницу между loadData и loadUpdateData. Частая ошибка — забывать, что для insert нужно вручную писать rollback (Liquibase не может автоматически откатить вставку данных).","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Как работать с данными в Liquibase (insert, loadData, loadUp — Gymterview","Liquibase поддерживает три основных способа работы с данными: поштучная вставка через insert, массовая загрузка из CSV через loadData и upsert-загрузка через lo","Liquibase поддерживает три основных способа работы с данными: поштучная вставка через insert, массовая загрузка из CSV ч",[7,13],"Liquibase поддерживает три основных способа работы с данными: поштучная вставка через insert, массовая загрузка из CSV через loadData и upsert-загрузка через loadUpdateData.",true]