200+ проектовДоговорNDAГарантия 12 мес.Оплата по этапам
Gulaev.dev
[ MIGRATION PATH ]

Миграция с MySQL на PostgreSQL

Средняя сложность2-6 недель
About

О миграции

Почему переходят с MySQL на PostgreSQL

MySQL и PostgreSQL — оба отличные реляционные СУБД, однако PostgreSQL в ряде сценариев обеспечивает принципиально лучшие возможности, что и обусловливает миграцию.

  • Расширенные типы данных. PostgreSQL поддерживает JSONB с индексированием, массивы, hstore, геометрические типы, полнотекстовый поиск с tsvector. В MySQL эти возможности либо отсутствуют, либо реализованы слабее.
  • Надёжность транзакций. PostgreSQL изначально проектировался как ACID-база с полной поддержкой транзакций на уровне DDL. MySQL с движком InnoDB добился этого позже и с оговорками.
  • Производительность сложных запросов. Оптимизатор PostgreSQL лучше справляется с комплексными JOIN, CTE, оконными функциями. Для аналитических запросов разница может быть кратной.
  • Расширяемость. PostGIS для геоданных, TimescaleDB для временных рядов, pgvector для векторного поиска — всё это расширения PostgreSQL. MySQL таким экосистемным богатством не обладает.

Что теряете и что приобретаете

ТеряетеПриобретаете
Привычные инструменты (phpMyAdmin, Sequel Pro)pgAdmin, DBeaver с более богатым функционалом
Простой синтаксис LIMIT/OFFSETОконные функции и CTE без компромиссов
AUTO_INCREMENTSERIAL / GENERATED ALWAYS AS IDENTITY
Нечувствительность к регистру по умолчаниюСтрогое сравнение строк (предсказуемое поведение)
Знакомую документацию командыБолее широкие возможности для будущего роста

7 этапов миграции

  1. Аудит схемы MySQL. Экспорт DDL. Выявление MySQL-специфичного синтаксиса: ENGINE=InnoDB, AUTO_INCREMENT, ENUM-поля, TINYINT(1) как boolean.
  2. Конвертация схемы. Адаптация DDL для PostgreSQL: SERIAL вместо AUTO_INCREMENT, boolean вместо TINYINT(1), JSONB вместо JSON, корректный синтаксис индексов.
  3. Конвертация данных. Использование pgloader или AWS DMS для переноса данных. Проверка кодировок, NULL-значений, дат в неправильном формате.
  4. Адаптация приложения. Замена MySQL-специфичных запросов: GROUP BY без полного перечисления, IFNULL → COALESCE, DATE_FORMAT → TO_CHAR, IF() → CASE WHEN.
  5. Адаптация ORM и миграций. Для Laravel: driver меняется с mysql на pgsql, проверка всех сырых запросов, адаптация миграций под PostgreSQL-типы.
  6. Тестирование. Прогон всех feature-тестов. Сравнение результатов запросов между MySQL и PostgreSQL. Нагрузочное тестирование.
  7. Переключение. Параллельная запись в обе БД в период переключения. Проверка расхождений. Финальный переключение и отключение MySQL.

Сроки и стоимость

База до 50 таблиц без сложной специфики MySQL: 2–4 недели, от 40 000 рублей. Крупная база с нестандартными типами, хранимыми процедурами и триггерами: 6–12 недель, от 120 000 рублей. Хранимые процедуры и триггеры обычно требуют полной переписи.

Частые сложности

  • MySQL нечувствителен к регистру в строковых сравнениях — в PostgreSQL это ломает часть запросов
  • Хранимые процедуры на MySQL-диалекте не совместимы с PL/pgSQL
  • ENUM в MySQL реализован иначе, чем в PostgreSQL — требует отдельной стратегии
  • Даты в формате '0000-00-00' (MySQL-специфика) не совместимы с PostgreSQL
  • Поведение NULL в агрегатных функциях может отличаться

Миграция с MySQL на PostgreSQL — техническая задача с конкретными рисками, требующая тщательного тестирования. Мы рекомендуем этот переход проектам, которые планируют активно использовать JSONB-поиск, геоданные или сложную аналитику. Для типового CRUD-приложения разница незначительна.

Technologies

Откуда и куда

Откуда
MySQL

MySQL — самая популярная реляционная СУБД MySQL — это открытая реляционная система управления базами данных, созданная в 1995 году шведской компанией MySQL AB. В 2010 году MySQL приобрела Oracle. Сегодня MySQL является частью стека LAMP (Linux, Apache, MySQL, PHP) и остаётся самой широко используемой базой данных в веб-разработке. Крупнейшие интернет-компании мира — Facebook, YouTube, Twitter, Wikipedia — используют или использовали MySQL в своей инфраструктуре. Сообществом также активно развивается форк MariaDB. Для каких проектов подходит MySQL Веб-сайты и приложения любого масштаба на стеке LAMP/LEMP Интернет-магазины, каталоги, порталы Системы управления контентом (WordPress, Drupal, Joomla) Read-heavy приложения с большим количеством чтений Проекты, где важна широкая совместимость и доступность специалистов Ключевые преимущества для бизнеса Широкая доступность специалистов — MySQL знают практически все backend-разработчики, что упрощает найм и не создаёт зависимости от узких специалистов. Высокая производительность чтения — движок InnoDB с пулом буферов и оптимизированным кешированием обеспечивает отличную скорость для read-heavy нагрузок. Простота администрирования — phpMyAdmin, MySQL Workbench и обилие управляемых облачных решений делают работу с базой доступной без глубоких знаний DBA. Отличная репликация — встроенная master-slave и групповая репликация позволяет строить отказоустойчивые кластеры. Огромная экосистема — практически все фреймворки, ORM и инструменты имеют первоклассную поддержку MySQL. Managed-решения — AWS RDS, Google Cloud SQL, Yandex Managed MySQL берут на себя резервное копирование, обновления и мониторинг. Стоимость внедрения MySQL MySQL распространяется бесплатно под GPL. Managed MySQL в облаке стоит от 2 000 ₽/мес для небольших инстансов. Проектирование схемы данных и оптимизация запросов — 30 000–150 000 ₽. Настройка репликации и отказоустойчивого кластера — 80 000–250 000 ₽. Коммерческая лицензия MySQL Enterprise — от $5 000/год, но большинство проектов обходятся Community Edition. Когда MySQL не стоит выбирать Для сложной аналитики со сложными запросами, оконными функциями и рекурсивными CTE — PostgreSQL обгоняет MySQL по функциональности и производительности планировщика. Для геоинформационных систем или приложений с нативными JSON-операциями — PostgreSQL с PostGIS и JSONB будет значительно эффективнее.

О MySQL
Куда
PostgreSQL

PostgreSQL — мощная реляционная база данных PostgreSQL — это объектно-реляционная СУБД с открытым исходным кодом, разрабатываемая с 1986 года в Калифорнийском университете Беркли. Сегодня это одна из наиболее функциональных баз данных в мире, поддерживающая полный стандарт SQL, ACID-транзакции, мощный набор типов данных (JSON, массивы, геогеографические типы) и расширяемую систему индексов. PostgreSQL регулярно занимает первое место в рейтингах СУБД по популярности среди профессиональных разработчиков. Для каких проектов подходит PostgreSQL Веб-приложения с высокими требованиями к целостности данных Финансовые системы, биллинг, учётные системы Геоинформационные системы (PostGIS расширение) Аналитические платформы и хранилища данных Приложения со сложными запросами, рекурсивными CTE и оконными функциями Ключевые преимущества для бизнеса Надёжность — ACID-транзакции, MVCC (многоверсионное управление параллельным доступом) и Write-Ahead Logging гарантируют целостность данных даже при сбоях. Богатые типы данных — нативная поддержка JSON/JSONB, массивов, UUID, геоданных и пользовательских типов снижает необходимость в обходных решениях. Производительность сложных запросов — планировщик запросов PostgreSQL превосходит MySQL на операциях с JOIN, агрегациями и оконными функциями. Масштабируемость — горизонтальное масштабирование через Citus, репликация и партиционирование поддерживают базы данных петабайтного масштаба. Расширяемость — PostGIS, pgvector, TimescaleDB и сотни других расширений добавляют специализированные возможности без смены СУБД. Бесплатность — нет лицензионных отчислений даже для коммерческого использования, в отличие от Oracle или SQL Server. Стоимость внедрения PostgreSQL PostgreSQL бесплатен, стоимость складывается из разработки и инфраструктуры. Настройка и оптимизация базы данных для нового проекта — 50 000–200 000 ₽. Миграция с другой СУБД — 100 000–500 000 ₽ в зависимости от объёма данных. Облачный managed PostgreSQL (AWS RDS, Yandex Cloud) обходится от 3 000 ₽/мес для небольших проектов. Когда PostgreSQL не стоит выбирать Для простых сайтов-визиток с минимальными данными — MySQL или SQLite справятся с меньшей сложностью настройки. Если вся команда знает только MySQL и сроки критичны — разница в возможностях не оправдает время на переобучение для небольших проектов.

О PostgreSQL
// Заказать миграцию

Готовы перейти с MySQL на PostgreSQL?

Составим детальный план, проведём безопасную миграцию данных и запустим проект на новой платформе.