Конвертер SQL из MySQL в PostgreSQL онлайн
Переведите запросы с MySQL на PostgreSQL бесплатно и прямо в браузере. Ниже — готовый конвертер, примеры перевода и таблица ключевых отличий диалектов.
Конвертер SQL
Вставьте запрос, выберите диалекты и нажмите «Конвертировать». Запрос не покидает ваш браузер.
Облачный DBT и инструменты Big Data от SubQuery
Готовите аналитические пайплайны на dbt или работаете с большими данными? SubQuery помогает строить и запускать dbt-трансформации в облаке, не разворачивая собственную инфраструктуру.
- Облачный dbt без настройки серверов
- Работа с ClickHouse, PostgreSQL и другими источниками
- Мониторинг моделей и качества данных
Как переводить SQL с MySQL на PostgreSQL
MySQL и PostgreSQL — две самые популярные СУБД с открытым исходным кодом, и миграция между ними — одна из самых частых задач. Несмотря на внешнюю похожесть, диалекты различаются принципиально: в MySQL автоинкремент задаётся через AUTO_INCREMENT, а в PostgreSQL — через SERIAL или IDENTITY; UPSERT в MySQL пишется как INSERT ... ON DUPLICATE KEY UPDATE, а в PostgreSQL — как INSERT ... ON CONFLICT; логический тип в MySQL — это фактически TINYINT(1), тогда как в PostgreSQL есть настоящий BOOLEAN.
Конвертер из MySQL в PostgreSQL автоматически переводит AUTO_INCREMENT в SERIAL, ON DUPLICATE KEY UPDATE в ON CONFLICT DO UPDATE, обратные кавычки в двойные, функции дат (DATE_FORMAT → TO_CHAR) и многое другое. Дальше результат достаточно скопировать в вашу миграцию — останется только проверить типы данных колонок и поведение индексов.
Основные отличия MySQL и PostgreSQL
| Аспект | MySQL | PostgreSQL |
|---|---|---|
| Автоинкремент | AUTO_INCREMENT | SERIAL / IDENTITY |
| Ограничение LIMIT | LIMIT offset, count | LIMIT count OFFSET offset |
| Кавычки идентификаторов | Обратные кавычки `...` | Двойные кавычки "..." |
| Кавычки строк | Одинарные или двойные кавычки (по умолчанию строки) | Одинарные кавычки |
| UPSERT | INSERT ... ON DUPLICATE KEY UPDATE | INSERT ... ON CONFLICT DO UPDATE |
| Логический тип | BOOL как синоним TINYINT(1) | Настоящий тип BOOLEAN |
| Схема / каталог | База данных как схема (USE db) | Схемы (public и др.), search_path |
| Регулярные выражения | REGEXP / RLIKE | ~, ~*, SIMILAR TO |
| Функции даты и времени | NOW(), DATE_FORMAT() | NOW(), TO_CHAR(), date_trunc() |
Примеры конвертации
Выборка с сортировкой и лимитом
SELECT id, name, email FROM users WHERE status = 'active' ORDER BY created_at DESC LIMIT 10;SELECT
id,
name,
email
FROM users
WHERE
status = 'active'
ORDER BY
created_at DESC NULLS LAST
LIMIT 10Группировка и агрегация
SELECT department_id, COUNT(*) AS cnt, AVG(salary) AS avg_salary FROM employees GROUP BY department_id HAVING COUNT(*) > 5;SELECT
department_id,
COUNT(*) AS cnt,
AVG(salary) AS avg_salary
FROM employees
GROUP BY
department_id
HAVING
COUNT(*) > 5Множественная вставка
INSERT INTO departments (id, name) VALUES (1, 'Engineering'), (2, 'Sales');INSERT INTO departments (
id,
name
)
VALUES
(1, 'Engineering'),
(2, 'Sales')Обновление с отметкой времени
UPDATE users SET last_login = CURRENT_TIMESTAMP WHERE id = 42;UPDATE users SET last_login = CURRENT_TIMESTAMP
WHERE
id = 42Создание таблицы
CREATE TABLE orders (id INT PRIMARY KEY, total DECIMAL(10, 2) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);CREATE TABLE orders (
id INT PRIMARY KEY,
total DECIMAL(10, 2) NOT NULL,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
)Форматирование даты и условие IF
SELECT id, DATE_FORMAT(created_at, '%d.%m.%Y') AS d, IF(active, 'yes', 'no') AS act FROM users WHERE active = 1;SELECT
id,
TO_CHAR(CAST(created_at AS TIMESTAMP), 'DD.MM.YYYY') AS d,
CASE WHEN active THEN 'yes' ELSE 'no' END AS act
FROM users
WHERE
active = 1Частые вопросы
Как перевести SQL из MySQL в PostgreSQL?
Вставьте исходный запрос в поле редактора, убедитесь, что выбран исходный диалект MySQL, и нажмите «Конвертировать». Через мгновение вы получите версию запроса на PostgreSQL. Если нужно перевести сразу несколько операторов — просто вставьте их все, конвертер обработает каждый.
Какие конструкции поддерживает конвертер MySQL → PostgreSQL?
Поддерживаются SELECT, JOIN, подзапросы, GROUP BY и HAVING, INSERT, UPDATE, DELETE, MERGE/UPSERT, CREATE TABLE и DROP TABLE, работа с типами данных, функциями дат и строк. Перевод выполняется на основе общего синтаксического дерева, поэтому семантика запроса сохраняется.
Насколько точен перевод запросов из MySQL в PostgreSQL?
Конвертер использует библиотеку sqlglot, которая знает грамматику обоих диалектов, поэтому корректно переводит большинство конструкций. Однако при миграции стоит проверять результаты: нестандартные расширения, пользовательские функции и тонкие отличия в поведении типов лучше прогнать через тестовые выборки уже на целевой базе.
Отправляются ли мои SQL-запросы на сервер?
Нет. Конвертация выполняется полностью в вашем браузере: движок загружается один раз, и все запросы обрабатываются локально. Это удобно, если вы работаете с конфиденциальными схемами данных.