Веб-разработчики, которые сделали переход с MySQL, без каких функций postgresql вы теперь не можете обойтись? - PullRequest
5 голосов
/ 04 июня 2009

Я размышляю над переключателем (в основном из-за более разрешительной лицензии) и часто слышу в интернете бормотание о том, насколько Postgres лучше, чем MySQL, но не так много деталей. Что вы делаете в Postgres, что делает вас более продуктивным или вы находите элегантным?

Это не должно быть необычно, например, некоторые из моих любимых вещей о MySQL включают

  • простое увеличение первичного ключа с помощью AUTOINCREMENT (необходимость написать генератор для каждой таблицы кажется более сложной задачей, чем это должно быть для такого распространенного требования),
  • операторы "LIMIT, OFFSET" (упрощает разбиение на страницы)
  • ON DUPLICATE KEY UPDATE (делает вставку / обновление таблиц "многие ко многим" быстрыми и безболезненными)

Ответы [ 5 ]

4 голосов
/ 04 июня 2009

PostgreSQL самые полезные функции (которых MySQL не хватает), на мой взгляд, являются:

  • generate_series и установить возвращаемые функции в целом
  • возможность использования коррелированных значений в LIMIT и OFFSET предложениях
  • Пользовательские агрегаты
  • DISTINCT ON пункт
  • Более продвинутые JOIN методы (MERGE JOIN и HASH JOIN)

С ними можно творить чудеса.

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

Недостатки:

  • Вы не можете использовать подсказки (я знаю, что это преднамеренно; я знаю, что их следует избегать; иди, проголосуй за меня)
  • Вы не можете использовать переменные сеанса без доступа к файлам конфигурации сервера (вам нужно установить custom_variable_classes)
  • DISTINCT и GROUP BY операции запаздывают.

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

Для базовых SQL они оба хороши.

3 голосов
/ 05 июня 2009
  • Транзакционный DDL - вы можете сделать "start transaction; delete table foo; rollback;" и foo все равно будет там.
0 голосов
/ 10 июня 2009

Добавление проверок в поля. Например:

CREATE TABLE "FILES" (
    ...
    md5checksum text NOT NULL,
    CONSTRAINT "FILES_md5checksum_check" CHECK ((md5checksum ~* '^[a-f0-9]{32}$'::text)),
    ...
);
Поле

md5checksum теперь всегда проверяется на то, что это шестнадцатеричная строка длиной 32 символа.

0 голосов
/ 05 июня 2009
  • Хранимые процедуры / UDF в Perl
  • Асинхронный доступ к базе данных в libpq
  • Схемы и базы данных, а не базы данных, изображающие из себя схемы
  • Джин и ГИСТ
0 голосов
/ 05 июня 2009

PostgreSQL через PostGIS предлагает очень богатую поддержку геопространственных операторов. Трудно представить какую-либо интеграцию карт Google (или аналогичную геопространственную работу) с любой другой БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...