Миграция с MySQL на PostgreSQL: план и скрипт

hard data_engineering Общие

Условие задания

**Компания:** Авито

**Контекст:** Аналитическое хранилище переезжает с MySQL 8 на PostgreSQL 15. Нужно спланировать миграцию и написать скрипты конвертации.

**Проблемы совместимости:**
- Типы данных: TINYINT, UNSIGNED, ENUM, DATETIME vs TIMESTAMP
- Функции: IFNULL vs COALESCE, GROUP_CONCAT vs STRING_AGG
- Auto-increment: AUTO_INCREMENT vs SERIAL/IDENTITY
- Кавычки: backticks vs double quotes

**Задание:**
1. Составьте маппинг типов данных MySQL → PostgreSQL
2. Напишите скрипт конвертации DDL (хотя бы для 3-4 таблиц)
3. Составьте чек-лист миграции: от планирования до cutover
4. Напишите SQL для верификации: данные совпадают после миграции

Пример данных

Структура для ориентира — реальные значения из эталонного решения.

-- MySQL:
-- CREATE TABLE users (
--   id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
--   name VARCHAR(200) NOT NULL,
--   email VARCHAR(200) NOT NULL,
--   status ENUM('active','blocked','deleted') DEFAULT 'active',
--   is_premium TINYINT(1) DEFAULT 0,
--   created_at DATETIME DEFAULT CURRENT_TIMESTAMP
-- );

-- PostgreSQL:
CREATE TABLE users (
    id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    name VARCHAR(200) NOT NULL,
    email VARCHAR(200) NOT NULL,
    status VARCHAR(20) DEFAULT 'active'
        CHECK (status IN ('active', 'blocked', 'deleted')),
    is_premium BOOLEAN DEFAULT FALSE,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- MySQL:
-- SELECT GROUP_CONCAT(name SEPARATOR ', ') FROM users GROUP BY city;

-- PostgreSQL:
SELECT STRING_AGG(name, ', ') FROM users GROUP BY city;

-- MySQL: IFNULL(x, 0)
-- PostgreSQL: COALESCE(x, 0)

-- MySQL: DATE_FORMAT(dt, '%Y-%m')
-- PostgreSQL: TO_CHAR(dt, 'YYYY-MM')

-- MySQL: LIMIT 10 OFFSET 20
-- PostgreSQL: LIMIT 10 OFFSET 20  (совместимо)

Темы

миграция MySQL PostgreSQL совместимость план

Подсказки

Все тестовые задания →

Частые вопросы

Какой уровень знаний нужен для задачи "Миграция с MySQL на PostgreSQL: план и скрипт"?

Это задание для уровня hard. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.

На каких собеседованиях встречается такая задача?

Подобные задания в категории «data_engineering» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: миграция, MySQL, PostgreSQL, совместимость, план.

Сколько времени даётся на решение?

На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

Где ещё потренироваться по теме «data_engineering»?

На zasqlpython.ru есть другие задания в категории «data_engineering», продуктовые кейсы, справочник метрик, AI мок-собеседование с разбором ваших ответов.

← Все задания