Как то так сложилось, что большинство хостингов предоставляют связку LAMP для web, поэтому вопрос выбора базы данных для личного проекта передо мной не стоял. MySQL популярен, надёжен, удобен и ещё куча разных положительных эпитетов. Однако, с недавних пор, по роду работы, мне периодически случается работать с Postgre. И вот какие наблюдения я для себя сделал.
Postgre DML будет побогаче чем у MySQL. Это плюс. Например,
INSERT INTO table (id, name) VALUES (DEFAULT, 'qweqwe') RETURNING id;
Вставка записи сразу же возвращает ID записи. В MySQL для этого требуется вызов LAST_INSERT_ID().
Еще пример: конструкция WITH в Postgre позволяет выполнять рекурсивные запросы. То есть ветку дерева можно вытащить одним запросом. В MySQL5 такого нет, к сожалению.
Вынесенные за пределы определения таблиц последовательности в PG сильно гибче чем AUTOINCREMENT в MySQL. Они могут быть цикличные, могут быть, эм… как сказать то… непоследовательные, в смысле с шагом. Они, что самое интересное, могут быть завязаны более чем на одну таблицу. Например, если мы хотим разнести функциональные и нефункциональные требования по разным таблицам (поскольку набор полей для них разный), но хотим для них общее пространство идентификаторов, то в Postgre это решается очень даже элегантно. В MySQL придется городить, я даже пока плохо представляю что.
Обратная сторона медали тоже присутствует, куда ж без неё.
Бесплатных, функциональных и удобных программ для администрирования MySQL пруд пруди. Может и для Postgre есть, но я не видел. Штатный PGAdmin, мягко скажем, корявка та ещё. Регистрозависимый синтаксис для имён таблиц в Postgre – это потенциальный источник багов. Кром того, таблицы, именованные в camelcase стиле требуют обрамления в кавычки, что требует их экранирования в коде, что требует недюжинного терпения. Да и в глазах рябит от подсветки синтаксиса каждой “заэскейпленой” кавычки.
Ничего не буду говорить про производительность, статей полно, Гугля в помощь. Отличия же в возможностях все таки склоняют мой выбор на будущее в сторону Postgre. Такие дела.
2 комментария:
Синтаксис имен таблиц не считаю недостатком, тем более по сравнению с MySQL, у которого он в UNIX-системах - регистрозависимый, а в Windows - регистронезависимый.
Статей по сравнению в интернете полно, но хороших крайне мало. В большей части тестов авторы даже не заботятся о том, чтобы конфигурации баз соответствовали примерно одинаковому расходу ресурсов системы. А тестов, результаты которых были бы качественно и детально проанализированы и сделан грамотный вывод - единицы.
Регистрозависимость имён таблиц - совершенно неудобная и вредная штука. Ошибиться при вводе с регистром на раз два, плюс кавычки вокруг. Плюс SQL из кода в PGAdmin не вставишь, надо слэши убирать, обратно - не легче. Ни разу не видел необходимости именовать таблицы в базе так, что бы отличался только регистр. Более того, проектировщику такой базы я бы посоветовал пересадить себе руки на место.
Отправить комментарий