Конвертер SQL из MySQL в PostgreSQL онлайн

Переведите запросы с MySQL на PostgreSQL бесплатно и прямо в браузере. Ниже — готовый конвертер, примеры перевода и таблица ключевых отличий диалектов.

Конвертер SQL

Вставьте запрос, выберите диалекты и нажмите «Конвертировать». Запрос не покидает ваш браузер.

Примеры для MySQL → PostgreSQL
SubQuery Бесплатный конвертер

Облачный DBT и инструменты Big Data от SubQuery

Готовите аналитические пайплайны на dbt или работаете с большими данными? SubQuery помогает строить и запускать dbt-трансформации в облаке, не разворачивая собственную инфраструктуру.

  • Облачный dbt без настройки серверов
  • Работа с ClickHouse, PostgreSQL и другими источниками
  • Мониторинг моделей и качества данных
Попробовать SubQuery
Обратная конвертация: PostgreSQL → MySQL

Как переводить 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

АспектMySQLPostgreSQL
АвтоинкрементAUTO_INCREMENTSERIAL / IDENTITY
Ограничение LIMITLIMIT offset, countLIMIT count OFFSET offset
Кавычки идентификаторовОбратные кавычки `...`Двойные кавычки "..."
Кавычки строкОдинарные или двойные кавычки (по умолчанию строки)Одинарные кавычки
UPSERTINSERT ... ON DUPLICATE KEY UPDATEINSERT ... 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()

Примеры конвертации

Выборка с сортировкой и лимитом

MySQL: исходный запрос
SELECT id, name, email FROM users WHERE status = 'active' ORDER BY created_at DESC LIMIT 10;
PostgreSQL: результат
SELECT
  id,
  name,
  email
FROM users
WHERE
  status = 'active'
ORDER BY
  created_at DESC NULLS LAST
LIMIT 10

Группировка и агрегация

MySQL: исходный запрос
SELECT department_id, COUNT(*) AS cnt, AVG(salary) AS avg_salary FROM employees GROUP BY department_id HAVING COUNT(*) > 5;
PostgreSQL: результат
SELECT
  department_id,
  COUNT(*) AS cnt,
  AVG(salary) AS avg_salary
FROM employees
GROUP BY
  department_id
HAVING
  COUNT(*) > 5

Множественная вставка

MySQL: исходный запрос
INSERT INTO departments (id, name) VALUES (1, 'Engineering'), (2, 'Sales');
PostgreSQL: результат
INSERT INTO departments (
  id,
  name
)
VALUES
  (1, 'Engineering'),
  (2, 'Sales')

Обновление с отметкой времени

MySQL: исходный запрос
UPDATE users SET last_login = CURRENT_TIMESTAMP WHERE id = 42;
PostgreSQL: результат
UPDATE users SET last_login = CURRENT_TIMESTAMP
WHERE
  id = 42

Создание таблицы

MySQL: исходный запрос
CREATE TABLE orders (id INT PRIMARY KEY, total DECIMAL(10, 2) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
PostgreSQL: результат
CREATE TABLE orders (
  id INT PRIMARY KEY,
  total DECIMAL(10, 2) NOT NULL,
  created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
)

Форматирование даты и условие IF

MySQL: исходный запрос
SELECT id, DATE_FORMAT(created_at, '%d.%m.%Y') AS d, IF(active, 'yes', 'no') AS act FROM users WHERE active = 1;
PostgreSQL: результат
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-запросы на сервер?

Нет. Конвертация выполняется полностью в вашем браузере: движок загружается один раз, и все запросы обрабатываются локально. Это удобно, если вы работаете с конфиденциальными схемами данных.

Связанные конвертации