Переход с MySQL на PostgreSQL

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

Кто-нибудь еще сделал такой ход? Наша база данных является источником жизненной силы приложения и в конечном итоге будет хранить ТБ данных, поэтому я очень хочу услышать об опыте повышения / снижения производительности, основных препятствиях при преобразовании SQL и хранимых процедур и т. д.

Обновлено: просто чтобы прояснить для тех, кто спросил, почему нам не нравится лицензирование MySQL. Мы разрабатываем коммерческий продукт, который (в настоящее время) зависит от MySQL как серверной части базы данных. В их лицензии указано, что мы должны платить им процент от нашей прейскурантной цены за установку, а не фиксированную плату. Для стартапа это не очень привлекательно.

Здесь есть несколько хороших технических статей по этой теме: wiki.postgresql.org/wiki/…

user13550 17.09.2008 00:39

Воспроизведение может быть проблемой у вас. MySQL поддерживает это из коробки.

l_39217_l 17.09.2008 21:45
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
26
2
16 311
3

Ответы 3

Стив, мне пришлось перенести мое старое приложение в другую сторону, то есть PgSQL-> MySQL. Надо сказать, тебе повезло :-) Распространенные ошибки:

  • SQL на самом деле довольно близок к языковому стандарту, поэтому вы можете страдать от диалекта MySQL, который вы уже знаете.
  • MySQL незаметно обрезает символы varchars, которые превышают максимальную длину, тогда как Pg жалуется - быстрое решение - использовать эти столбцы как текст вместо varchar и использовать триггеры для обрезания длинных строк.
  • двойные кавычки используются вместо обратных апострофов
  • логические поля сравниваются с использованием операторов IS и IS NOT, однако MySQL-совместимый INT (1) с = и все еще возможен
  • нет REPLACE, используйте комбинацию DELETE / INSERT
  • Pg довольно строго следит за соблюдением целостности внешних ключей, поэтому не забывайте использовать ON DELETE CASCADE для ссылок.
  • если вы используете PHP с PDO, не забудьте передать параметр методу lastInsertId () - это должно быть имя последовательности, которое обычно создается следующим образом: [tablename] _ [primarykeyname] _seq

Я надеюсь, что это хоть немного поможет. Удачи вам в игре с Postgres!

Я сделал аналогичное преобразование, но по другим причинам. Это было связано с тем, что нам нужна была улучшенная поддержка ACID и возможность предоставить пользователям Интернета те же данные, что и с помощью других инструментов БД (один идентификатор для обоих).

Вот что нас укусило:

  1. MySQL не применяет ограничений так же строго, как PostgreSQL.
  2. Существуют разные процедуры обработки дат. Их нужно будет преобразовать вручную.
  3. Любой код, который не ожидает ACID соблюдение может быть проблемой.

Тем не менее, как только он был установлен и протестирован, он стал намного лучше. При правильной блокировке по соображениям безопасности и интенсивном одновременном использовании PostgreSQL работает лучше, чем MySQL. В тех случаях, когда блокировка не требовалась (только для чтения), производительность была не такой хорошей, но она все равно была быстрее сетевой карты, так что это не было проблемой.

Подсказки:

  • Автоматические скрипты в contrib каталог - хорошая отправная точка для вашего преобразования, но вам понадобится тронуть немного обычно.
  • Я очень рекомендую вам использовать сериализуемую изоляцию уровень по умолчанию.
  • Инструмент pg_autodoc хорош для действительно видеть ваши структуры данных и помогите найти любые отношения с вами забыл определить и принуждать.

Мы перешли с MySQL3 на PostgreSQL 8.2, а затем на 8.3. PostgreSQL имеет основы SQL и многое другое, поэтому, если ваш MYSQL не использует причудливые вещи MySQL, все будет в порядке.

По моему опыту, наша база данных MySQL (версия 3) не имеет внешнего ключа ... PostgreSQL позволяет вам иметь их, поэтому нам пришлось это изменить ... и это было хорошо, и мы обнаружили некоторую ошибку.

Еще нам пришлось изменить коннектор кодирования (C#), который отличался от MySQL. MySQL был более стабильным, чем PostgreSQL. У нас по-прежнему мало проблем с PostgreSQL.

"Postgresql", "PostGreSql", "PostGresql" => "PostgreSQL" ;-)

Patryk Kordylewski 27.11.2008 20:26

Вздох. Девять голосов за комментарий, но никто не пошел и не внес правки. Будьте наделены полномочиями, справедливые пользователи StackOverflow!

mlissner 07.05.2012 02:15

Другие вопросы по теме