it-swarm.com.de

Was ist in PostgreSQL der Unterschied zwischen einer "gespeicherten Prozedur" und anderen Arten von Funktionen?

Ich verstehe den Unterschied zwischen:

  • Skalarfunktionen
  • Set-Returning-Funktionen (SRF) s
  • Interne Funktionen
  • Fensterfunktionen
  • Aggregierte Funktionen aller Art
  • Benutzerimplementierte Funktionen (die in PostgreSQL in jeder Sprache implementiert werden können)
  • Usw.

In SQL Server sind "Gespeicherte Prozeduren" über EXEC zulässig. Was bietet das für eine andere Funktion, die mit SELECT ausgeführt wird und NULL zurückgibt?

Wenn PostgreSQL gespeicherte Prozeduren erhält, was bringen sie mir und was ist die formale Unterscheidung zwischen einer Funktion und einer gespeicherten Prozedur in der Spezifikation?

Ich habe diese Frage gelesen , aber sie scheint vor der Ankündigung der Implementierung zu liegen

6
Evan Carroll

Da Postgres Funktionen ( CREATE FUNCTION ) nur In einem (einzelnen) Transaktionskontext ausgeführt, können mehrere wichtige Befehle nicht ausgeführt werden ein Funktionskörper. Mögen CREATE DATABASE oder CREATE INDEX CONCURRENTLY oder VACUUM. Das Handbuch :

VACUUM kann nicht innerhalb eines Transaktionsblocks ausgeführt werden.

Funktionen werden oft als "gespeicherte Prozeduren" bezeichnet, was immer ein irreführender Begriff war - wahrscheinlich von anderen RDBMS übernommen. Mit dem Eintreffen von SQL-Prozeduren ( CREATE PROCEDURE ) in Postgres 11 sollte diese Fehlbezeichnung vollständig vermieden werden.

SQL-Prozeduren können Transaktionen beginnen und beenden. Aber Die oben genannten Befehle sind in keinem Transaktionsblock zulässig, sodass diese (noch) nicht in SQL-Prozeduren enthalten sein können.

Für die Zukunft sind mehrere Ergebnismengen geplant, aber noch nicht implementiert.

Verbunden:

11

PostgreSQL-Funktionen können keine Transaktionen starten oder beenden. Sie bleiben bei jeder Transaktion hängen, die sie von ihrer aufrufenden Abfrage geerbt haben.

Wenn PostgreSQL gespeicherte Prozeduren erhält, können sie Transaktionen öffnen und schließen.

Siehe auch,

6
jjanes