Официально PostgreSQL имеет только «функции». Триггерные функции иногда называют «триггерными процедурами», но это использование не имеет определенного значения. Внутренне функции иногда называют процедурами, например, в системном каталоге pg_proc
. Это пережиток PostQUEL. Любые функции, которые некоторые люди (возможно, имеющие опыт работы в разных системах баз данных) могут связывать с процедурами, например их актуальность для предотвращения SQL-инъекций или использования выходных параметров, также применяются к функциям, существующим в PostgreSQL.
Теперь, когда люди в сообществе PostgreSQL говорят о «хранимых процедурах» или «реальных хранимых процедурах», они часто имеют в виду гипотетическую особенность функционально-подобного объекта, который может запускать и останавливать транзакции в его теле, чего не могут делать текущие функции. делать. Использование термина «хранимая процедура» в этом контексте, по-видимому, аналогично другим продуктам баз данных. Посмотрите эту ветку списка рассылки для расплывчатой идеи.
На практике, однако, это различие между функцией и процедурой с точки зрения их возможностей управления транзакциями не является общепринятым, и, безусловно, многие программисты без смещения базы данных будут воспринимать процедуру как функцию без возвращаемого значения в стиле Паскаля. (Стандарт SQL, по-видимому, занимает промежуточное положение в том смысле, что процедура по умолчанию имеет другое поведение транзакции, чем функция, но это можно отрегулировать для каждого объекта.) Так что в любом случае, особенно при рассмотрении вопросов в Stack Exchange с очень смешанная аудитория, вы должны избегать слишком большого количества слов и использовать более четкие термины или определять ожидаемые свойства.