[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-sovremennaya-razrabotka-web-kak-upravlyat-migratsiyami-bazy-dannykh":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":20,"progress":21,"seo":22},1191,"kak-upravlyat-migratsiyami-bazy-dannykh",37,"sovremennaya-razrabotka-web","Современная разработка WEB","🌐","Как управлять миграциями базы данных?","Миграции базы данных — это версионированные изменения схемы БД, которые применяются автоматически при старте приложения через Flyway или Liquibase.\n\n> Аналогия из жизни: миграции БД похожи на историю коммитов в Git, но для структуры базы данных. Каждая миграция — это \"коммит\", который невозможно изменить после применения.\n\n### Пример Flyway-миграции\n\n\u003Cdetails>\n\u003Csummary>SQL-миграции\u003C\u002Fsummary>\n\n```sql\n-- V1__create_orders_table.sql\nCREATE TABLE orders (\n    id          UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n    customer_id UUID         NOT NULL,\n    status      VARCHAR(20)  NOT NULL DEFAULT 'CREATED',\n    total_amount DECIMAL(19,2) NOT NULL DEFAULT 0,\n    created_at  TIMESTAMPTZ  NOT NULL DEFAULT NOW(),\n    updated_at  TIMESTAMPTZ  NOT NULL DEFAULT NOW(),\n    version     BIGINT       NOT NULL DEFAULT 0,\n    CONSTRAINT chk_status CHECK (status IN ('CREATED','CONFIRMED','SHIPPED','DELIVERED','CANCELLED'))\n);\n\nCREATE INDEX idx_orders_customer_id ON orders(customer_id);\nCREATE INDEX idx_orders_status ON orders(status);\nCREATE INDEX idx_orders_created_at ON orders(created_at);\n\n-- V2__create_order_items_table.sql\nCREATE TABLE order_items (\n    id         UUID PRIMARY KEY DEFAULT gen_random_uuid(),\n    order_id   UUID NOT NULL REFERENCES orders(id) ON DELETE CASCADE,\n    product_id UUID NOT NULL,\n    quantity   INTEGER NOT NULL CHECK (quantity > 0),\n    price      DECIMAL(19,2) NOT NULL CHECK (price >= 0),\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);\n\nCREATE INDEX idx_order_items_order_id ON order_items(order_id);\n```\n\n\u003C\u002Fdetails>\n\n### Конфигурация\n\n```yaml\nspring:\n  flyway:\n    enabled: true\n    locations: classpath:db\u002Fmigration\n    baseline-on-migrate: true\n    validate-on-migrate: true\n```\n\n### Flyway vs Liquibase\n\n| Критерий | Flyway | Liquibase |\n|----------|--------|-----------|\n| Формат | SQL-файлы | XML \u002F YAML \u002F SQL |\n| Rollback | Ручной (отдельная миграция) | Автоматический |\n| Сложность | Простой | Больше возможностей |\n| Популярность | Лидер для Java-проектов | Enterprise с XML-стеком |\n\n### PostgreSQL — почему стандарт де-факто\n\nPostgreSQL доминирует в Java-экосистеме благодаря: полная поддержка ACID, расширенные типы данных (JSONB, UUID, ARRAY), полнотекстовый поиск без внешних систем, надёжные managed-сервисы (AWS RDS, GCP Cloud SQL, Neon).\n\n```sql\n-- Использование JSONB для гибких атрибутов\nALTER TABLE orders ADD COLUMN metadata JSONB DEFAULT '{}';\nCREATE INDEX idx_orders_metadata ON orders USING GIN (metadata);\n```\n\n### Частые ошибки\n\n- ddl-auto=update в production — непредсказуемые изменения схемы\n- Отсутствие индексов для часто используемых запросов\n- Изменение уже применённых миграций — нарушает контрольную сумму\n\n> **На собеседовании:** ключевое: \"Миграции только через Flyway\u002FLiquibase, никогда через ddl-auto=update в production\". Если спросят про выбор между Flyway и Liquibase — Flyway проще и популярнее, Liquibase даёт автоматический rollback и XML-формат для enterprise.","","junior",[15,16,17,18,19],"databases","postgresql","flyway","migration","liquibase",[],null,{"title":23,"description":24,"ogTitle":25,"ogDescription":26,"keywords":27,"schemaAnswer":37,"featuredSnippetReady":38},"Как управлять миграциями базы данных — Gymterview","Миграции БД через Flyway и Liquibase: версионированные SQL-файлы, конфигурация Spring Boot, сравнение инструментов. PostgreSQL как стандарт де-факто для Java.","Миграции базы данных: Flyway vs Liquibase — Gymterview","Flyway и Liquibase для версионирования схемы БД. Конфигурация Spring Boot, сравнение, типичные ошибки.",[28,29,30,31,32,33,34,35,36],"миграции базы данных","Flyway","Liquibase","PostgreSQL","ddl-auto","SQL миграции","Spring Boot","версионирование схемы","собеседование","Миграции — версионированные изменения схемы БД, применяемые автоматически при старте через Flyway или Liquibase. Flyway проще (SQL-файлы), Liquibase даёт автоматический rollback и XML-формат. Правило: только Flyway\u002FLiquibase в production, никогда ddl-auto=update. PostgreSQL — стандарт де-факто благодаря ACID, JSONB, managed-сервисам.",true]