Использование функциональной нотации в запросах PostgreSQL вместо точечной нотации

Предполагая, что у нас есть две таблицы:

  1. таблица contacts с столбцами: id и name
  2. таблица contact_id со столбцами: id и contact_id (FK to contacts.id )

Следующие два запроса возвращают одни и те же данные:

  • точка: SELECT contacts.name, contacts.id, conversations.id FROM contacts INNER JOIN conversations ON contacts.id = conversations.contact_id;

а также

  • функциональная нотация: SELECT contacts.name, contacts.id, conversations.id FROM contacts INNER JOIN conversations ON id(contacts) = contact_id(conversations);

По чисто теоретической причине я хочу узнать больше о второй (более функциональной) версии. Что называется этим синтаксисом и где я могу узнать больше? Является ли этот синтаксис стандартом SQL или просто PostgreSQL? Это исполнитель? Почему он не используется более широко?

Он называется «функциональная нотация» – в отличие от стандартной «нотации атрибута».

Это расширение стандарта SQL, и производительность идентична.

Существуют тонкие различия в разрешении имен. Например: имена столбцов имеют приоритет над функциями, принимающими составной тип в точечной нотации (обозначение атрибута).

Обозначение атрибута (точечная нотация) работает только для функций, принимающих один параметр. Таким образом, это ограниченная альтернатива, и канонический способ – использовать функциональную нотацию для функций (таким образом, имя).

С другой стороны, нотация атрибутов просто короче (одна точка против двух паренов), более переносимая (соответствует стандарту) и обычно канонический способ столбцов таблицы.

Подробности можно найти в руководстве .

Этот ответ содержит более подробное объяснение:

  • Сохранять общий запрос в виде столбца?

Функциональная нотация ужасно устарела – это артефакт с эпохи NON SQL.

Не используйте его в производственных проектах. Это не влияет на производительность – различия решаются на уровнях анализатора и анализатора, но это не имеет никакого смысла в отношении стандарта SQL.