Какую базу данных выбрать: MySQL vs PostgreSQL

Отличный вопрос для холивара. Но не будем. Опубликована статья Why favor PostgreSQL over MariaDB / MySQL, автор которой рассматривает обе СУБД с позиции бережного отношения к данным и приходит к выводу, что для серьезных проектов подходит PostgreSQL, а MySQL — вообще не вариант.

Пример превосходства PosgreSQL над MySQL

Например, создадим таблицу и для одного из полей зададим тип numeric(4, 2) — четыре разряда под хранение всего числа и два разряда после запятой. А потом попытаемся вставить число, которое не соответствует описанию. И что вы думаете? Нет проблем!

CREATE TABLE data (
id  integer NOT NULL,
data  numeric(4, 2)
);
 
INSERT INTO data VALUES (1, 1234.5678);
Query OK, 1 row affected, 1 warning (0.01 sec)
 
SELECT * FROM data;
+-+——-+
| id | data  |
+-+——-+
|  1 | 99.99 |
+-+——-+
 
1 row in set (0.00 sec)

В ручном режиме мы увидим (возможно) предупреждение (1 warning) попытаемся догадаться, о чем оно и восстановить прежнее значение. Но предупреждение легко пропустить. Если вы пишете приложение, имеющее дело с хранением финансовых данных, такие ошибки будут стоить очень дорого.

PostgreSQL бережет ваши данные и ведет себя более серьезно:

INSERT INTO DATA VALUES (1, 1234.5678);
ERROR:  NUMERIC FIELD overflow
DETAIL:  A FIELD WITH PRECISION 4, scale 2 must round TO an absolute VALUE less than 10^2.

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

А теперь немного мистики. Помните, мы описали, что поле id для MySQL не должно быть NULL? Пробуем:

UPDATE data SET id = NULL WHERE id = 1;
Query OK, 1 row affected, 1 warning (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 1
 
SELECT * FROM data;
+-+——+
| id | data |
+-+——+
|  0 | 99.99 |
+-+——+
 
1 row in set (0.00 sec)

Удивительно, но несмотря на явный запрет (NOT NULL), СУБД MySQL разрешила-таки обновить поле, причем установила его значение в 0, хотя о нуле мы вообще ничего не говорили. 0 и NULL — совершенно разные сущности. 0 — это число. NULL — это особый индикатор, говорящий нам о том, что мы не знаем, какое число содержится в этом поле. И совсем необязательно это 0. Таким образом, СУБД опять приписала от себя случайное значение в нашу базу. Если в вашем приложении будет такая же ошибка, то MySQL поможет этой ошибке долго оставаться необнаруженной. А что же PostgreSQL? Тут всё чётко:

UPDATE DATA SET id = NULL WHERE id = 1;
ERROR:  NULL VALUE IN COLUMN „id“ violates not-NULL CONSTRAINT

NULL в столбце id нарушает явно заданное ограничение, поэтому значение изменено не будет.

Остальные примеры можно найти в оригинальной статье.
Ваша оценка: Нет Средняя оценка: 4.9 (7 votes)

У постгреса своих приколов хватает, на самом деле, причем там их столько, что мускул на его фоне выигрывает (что мы и видим, в общем-то, по популярности). Не говоря уже о том, что сравнивать эти две СУБД не совсем корректно: MySQL — реляционная, Postgres — постреляционная.
P.S: капча ужасна, такую только роботам и разгадывать

Ваша оценка: Нет Средняя оценка: 5 (2 votes)
pomodor

А в чем приколы PostgreSQL? Работал довольно плотно, но ничего раздражающего не заметил. Впрочем, как и в MySQL. Описанное выше лечится установкой глобальной переменной, а в новой версии MySQL такой режим хотят сделать работающим по умолчанию. Что такое "постреляционная" я не знаю, но согласен, что они имеют разное предназначение. MySQL хороша для быстрого извлечения небольших порций текста. Что идеально подходит для небольших и средний сайтов и никто в здравом уме не станет запиливать, например, личный блог с использованием Postgres. А Postgres хорош там, где надо иметь возможность хранить гигабайты данных разного типа и гибко обрабатывать их.

Ваша оценка: Нет Средняя оценка: 5 (1 vote)

Вот же врунишка, у Постгреса нет никаких подводных камней. Все работает так, как и ожидается. Мускуль рядом с Постгресом и рядом не стоял. Про популярность насмешил — Мускуль популярен потому, что его использует тот же Вордпресс, на котором сидят 50% сайтов в сети.

Ваша оценка: Нет Средняя оценка: 5 (1 vote)
Отправить комментарий
КАПЧА
Вы человек? Подсказка: зарегистрируйтесь, чтобы этот вопрос больше никогда не возникал. Кстати, анонимные ссылки запрещены.
CAPTCHA на основе изображений
Enter the characters shown in the image.