Эта тема родилась в недрах другой темы форума
http://phpforum.ru/index.php?showtopic=82194, я решил вынести ее отдельно. Потому что заданный вопрос, на самом деле, очень интересный.
Много чего.
1. В селекте есть такая удобная вещь, как WITH. Я могу в пределах одного запроса сделать какие-то подзапросы, которые можно будет многократно использовать внутри основного запроса, выбирать разные данные оттуда. Более того, этих подзапросов может быть несколько, они могут также ссылаться друг на друга, либо подзапрос ссылается рекурсивно сам на себя.
Вот пример использования селекта с WITH с рекурсией (сам на себя ссылается):
http://phpforum.ru/index.php?showtopic=318062. Триггеры. Да, они есть и в Мускуле. Но в Постгре с ними работать намного удобнее. Более полно управляешь тем, что происходит. В частности, внутри триггера можно отказаться от вставки/апдейта/удаления. В Мускуле - хренушки, нельзя там.
3. View. Есть и в Мускуле. Но в Мускуле они "недоделанные" какие-то.
В Постгре есть все возможности вьюшек, какие есть в Мускуле, плюс свои возможности. Например, я могу повесить триггер вставки на VIEW... Зачем, говоришь? Ну вот, допустим, я с помощью VIEW выбираю данные из 3-х таблиц, данные связаны по всяким айдишникам, я их джойню... И я могу просто "вставить" их во VIEW, самым обычным инсертом. Не заботясь ни о каких айдишниках. Потому что в триггере вставки я разложу все данные по нужным таблицам, проверю наличие данных, если потребуется, то создам их...
И это намного лучше, чем в ПХП всё это мудрить. Существенно то, что это и быстрее, и надежнее.
4. У всех команд обработки данных, INSERT, UPDATE, DELETE есть команда RETURNING, где я могу получить все (или только некоторые) поля, которые были обработаны. Таким образом, в отличие от Мускуля, я могу не гадать, что же там было сделано, а могу точно ЗНАТЬ, какие строки были затронуты, что именно в них сделано.
Пример:
DELETE FROM table1 WHERE <условие> RETURNING *
На выходе я получу в ПХП полные данные о строках, которые были удалены этой командой. Могу, допустим, вывести их айдишники :) Или показать юзеру, что именно было удалено. В Мускуле надо будет сначала сделать СЕЛЕКТ, чтобы получить эти данные (с тем же условием), а потом удалить - это 2 команды, а не одна, в отличие от Постгре.
5. Есть полноценный FULL JOIN. Коего нету в Мускуле
6. С партициями надо чуть больше поковыряться, чем в Мускуле, но зато потом я могу с ними работать намного более удобно и полноценно, чем в Мускуле. Например, я могу динамически - автоматически! - создать новую партицию, когда она понадобится. В Мускуле же надо заранее ее создать, иначе огребешь проблемы.
7. Как уже говорилось в "родительской" теме, в Постгре больше типов данных, плюс можно создавать свои типы данных. Рукодельные (комплексные) типы данных очень похожи на struct из языка Си. Эти типы, после создания, можно использовать везде, в частности в функциях.
Типы данных в Постгре:
http://www.postgresql.org/docs/9.2/static/datatype.html8. ...
И это далеко не всё!!! Этого достаточно, я надеюсь?
PS. Хоть раздел и "тематический", но в этой теме
можно и пофлудить - в разумных пределах, естестественно.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)