Сколько из вас перешло из MySQL в Postgresql? Стоило ли?

Я думаю о переходе от MySQL к разработке Postgres for Rails, и я просто хочу услышать, что другие разработчики, которые сделали ход, должны сказать об этом.

Я ищу личный опыт, а не перестрелку Mysql v Postgres, просто плюсы и минусы, к которым вы сами пришли. Вещи, которые люди, возможно, не обязательно думают.

Не стесняйтесь объяснять, почему вы перенесли в первую очередь.

Ответ 1

Я сделал переключатель и, честно говоря, не мог быть счастливее. В то время как у Postgres не хватает некоторых вещей MySQL (вставляйте Ignore, Replace, Upsert и загружайте Data Infile для меня в основном), функции, которые он имеет, имеют больше, чем составляют. Его хранимые процедуры являются гораздо более мощными, и гораздо проще писать сложные функции и агрегаты в Postgres.

По производительности, если сравнивать с InnoDB (что справедливо из-за MVCC), то он чувствует себя как минимум быстрым, возможно, быстрее - мы не смогли выполнить некоторые реальные измерения здесь из-за некоторых ограничений, но, безусловно, не было проблемы с производительностью. Сложные запросы с несколькими объединениями, безусловно, быстрее, МНОГО быстрее.

Я считаю, что вы скорее получите правильный ответ на свой вопрос в сообществе Postgres. У всех и их бабушки есть 50 различных способов сделать что-то в MySQL. В Postgres попадайте в список рассылки, и вы, вероятно, получите очень хорошую помощь.

Любая из синтаксических и подобных различий немного тривиальна.

В целом, Postgres чувствует себя намного более "взрослым" для меня. Я использовал MySQL в течение многих лет, и теперь я стараюсь избегать этого.

Ответ 2

О, дорогая, это может закончиться слезами.

Говоря только из личного опыта, мы перешли из MySQL исключительно потому, что в нашей производственной системе (Heroku) работает PostgreSQL. У нас были запрограммированные для MySQL запросы, которые ломались на PostgreSQL. Поэтому я думаю, что моральный настрой этой истории заключается в том, чтобы работать над одной и той же СУБД над всем, иначе вы можете столкнуться с проблемами.

Иногда нам также нужно вставлять записи Über-quick-like. Для этого мы используем встроенную функцию COPY PostgreSQL, используемую аналогично этому в нашем приложении:

query = "COPY users(email) FROM STDIN WITH CSV"
values = users.map! do |user|
  # Be wary of the types of the objects here, they matter.
  # For instance if you set the id to a string it will error.

  %Q{#{user["email"]}}
end.join("\n")

raw_connection.exec(query)
raw_connection.put_copy_data(values)
raw_connection.put_copy_end

Вставляет ~ 500 000 записей в базу данных всего за две минуты. Примерно в то же время, если мы добавим больше полей.

Еще одна пара приятных вещей PostgreSQL имеет более MySQL:

  • Полнотекстовый поиск
  • Географическое расследование (PostGIS)
  • LIKE синтаксис подобен этому email ~ 'hotmail|gmail', NOT LIKE как email !~ 'hotmail|gmail'. | указывает a или.

В заключение: PostgreSQL похож на кирпичи и минометы, где MySQL - это Lego. Пойдите с тем, что "чувствует" право на вас. Это только мое личное мнение.

Ответ 3

Мы перешли на PostgreSQL по нескольким причинам в начале 2007 года (или это было годом раньше?). Основные причины:

  • Поддержка SQL - PostgreSQL намного лучше подходит для сложных SQL-запросов, например с большим количеством объединений и агрегатов.
  • Хранимые процедуры MySQL не выглядели очень зрелыми.
  • Изменения в лицензии MySQL - двойная лицензия, с открытым исходным кодом и коммерческая, раскол, который заставлял меня задуматься о будущем. С лицензией PG BSD вы можете делать все, что хотите.
  • Неверное поведение - когда MySQL подсчитывал строки, иногда он просто возвращал приблизительное значение, а не фактические подсчитанные строки.
  • Ограничения вели себя нечетно, вставляя усеченные/адаптированные значения. См. http://use.perl.org/~Smylers/journal/34246
  • Административный интерфейс PgAdminIII чувствовал себя более стабильным и зрелым, чем MySQL-копия
  • PostgreSQL является очень надежным и аварийным в случае сбоя

//Джон

Ответ 4

Не сделал сам переключатель, но несколько раз укусил MySQL отсутствием изменений схемы транзакций, которые, по-видимому, поддерживает Postgre.

Это позволит решить эти неприятные проблемы, возникающие при переходе с вашей среды разработчиков с помощью sqlite на ваш сервер MySQL, и осознать, что ваши миграции запутались, и они были оставлены наполовину! (Нет, я не делал этого на производственном сервере, но это делало беспорядок нашего общего сервера тестирования!)