Oficialmente, o PostgreSQL possui apenas "funções". Às vezes, as funções de gatilho são chamadas de "procedimentos de gatilho", mas esse uso não tem significado distinto. Internamente, as funções às vezes são chamadas de procedimentos, como no catálogo do sistema pg_proc
. Isso é uma remanescente do PostQUEL. Quaisquer recursos que algumas pessoas (possivelmente com experiência em diferentes sistemas de banco de dados) possam associar a procedimentos, como sua relevância para impedir injeções de SQL ou o uso de parâmetros de saída, também se aplicam às funções como existem no PostgreSQL.
Agora, quando as pessoas da comunidade PostgreSQL falam sobre "procedimentos armazenados" ou "procedimentos armazenados reais", no entanto, geralmente significam um recurso hipotético de um objeto semelhante a uma função que pode iniciar e interromper transações em seu corpo, algo que as funções atuais não podem Faz. O uso do termo "procedimento armazenado" neste contexto parece ser por analogia com outros produtos de banco de dados. Veja esta lista de discussão para uma vaga idéia.
Na prática, no entanto, essa distinção de função versus procedimento em termos de suas capacidades de controle de transações não é universalmente aceita, e certamente muitos programadores sem viés de banco de dados terão uma interpretação semelhante a Pascal de um procedimento como uma função sem valor de retorno. (O padrão SQL parece ter um meio termo, pois um procedimento por padrão tem um comportamento de transação diferente de uma função, mas isso pode ser ajustado por objeto.) Portanto, em qualquer caso, e especialmente ao examinar as perguntas no Stack Exchange com Para um público muito misto, evite assumir demais e use termos mais claros ou defina as propriedades que espera.