web-dev-qa-db-fra.com

Dans PostgreSQL, quelle est la différence entre une "procédure stockée" et d'autres types de fonctions?

Je comprends la distinction entre:

  • Fonctions scalaires
  • Set-Returning-Functions (SRF) s
  • Fonctions internes
  • Fonctions de fenêtre
  • Fonctions agrégées de toutes sortes
  • Fonctions implémentées par l'utilisateur (qui dans PostgreSQL peuvent être implémentées dans n'importe quel langage)
  • Etc.

Dans SQL Server, les "procédures stockées" sont autorisées via EXEC. Qu'est-ce que cela apporte sur toute autre fonction exécutée avec SELECT qui renvoie NULL?

Lorsque PostgreSQL obtient des procédures stockées, que m'apporteront-elles et quelle est la distinction formelle, le cas échéant, entre une fonction et une procédure stockée dans la spécification?

J'ai lu cette question mais elle semble antérieure à l'annonce de la mise en œuvre

6
Evan Carroll

Puisque Postgres fonctionne ( CREATE FUNCTION ) seulement exécuté dans un contexte de transaction (unique), plusieurs commandes importantes ne peuvent pas être exécutées à l'intérieur un corps fonctionnel. Comme CREATE DATABASE ou CREATE INDEX CONCURRENTLY ou VACUUM. Le manuel:

VACUUM ne peut pas être exécuté dans un bloc de transaction.

Les fonctions sont souvent appelées "procédures stockées", ce qui a toujours été un terme trompeur - probablement repris d'autres RDBMS. Avec l'arrivée de procédures SQL ( CREATE PROCEDURE ) dans Postgres 11, ce terme impropre doit être évité complètement.

Les procédures SQL peuvent commencer et terminer des transactions. Mais les commandes mentionnées ci-dessus ne sont pas autorisées du tout dans un bloc de transaction, donc elles ne peuvent pas non plus être incluses dans les procédures SQL.

Plusieurs ensembles de résultats sont prévus pour l'avenir, mais pas encore implémentés.

En relation:

11
Erwin Brandstetter

Les fonctions PostgreSQL ne peuvent ni démarrer ni terminer les transactions. Ils sont bloqués avec la transaction héritée de leur requête d'appel.

Lorsque PostgreSQL obtient des procédures stockées, il pourra ouvrir et fermer des transactions.

Voir également,

6
jjanes