Name der aktuellen Funktion innerhalb der Funktion mit plpgsql

8

Gibt es trotzdem innerhalb einer plpgsql-Funktion, dass Sie den Namen der Funktion bekommen können? Oder auch die OID der Funktion?

Ich weiß, dass es in plpgsql einige "spezielle" Variablen (wie FOUND) gibt, aber es scheint keine Möglichkeit zu geben, dies zu erreichen. (Obwohl ich gelesen habe, wo es möglich zu sein scheint, wenn Ihre Funktion in C geschrieben ist). Es ist nicht kritisch, aber es würde etwas machen, was ich etwas netter / weniger zerbrechlich mache.

Ich benutze PostgreSQL v. 9.1.5

    
David S 26.09.2012, 22:47
quelle

3 Antworten

2

Bei Triggern verwenden Sie TG_NAME , um den Namen des Triggers (nicht den Trigger) zu erhalten Funktion) ausgelöst.

Sie haben auch current_query() , um die von der Anwendung ausgeführte Top-Level -Abfrage zu erhalten, die die Ursache für die Ausführung Ihrer Funktion ist. Es zeigt Ihnen keine Zwischenfunktionen.

Sonst nicht wirklich AFAIK und ich haben vor einer Weile nach dem gesucht, als ich einen "aktuellen Funktionsstapel" zum Debuggen drucken wollte. Andere wissen vielleicht mehr.

UPDATE : In Pg 9.4 und höher können Sie auch PG_CONTEXT zum Aufruf-Stack verwenden, aber nicht nur den aktuellen Funktionsnamen.

    
Craig Ringer 27.09.2012, 00:04
quelle
5

Ab Postgres 9.4 gibt die folgende Funktion ihren eigenen Namen zurück:

%Vor%     
dvasdekis 27.01.2017 08:03
quelle
5
  

Update: Möglichkeit, Call-Stack zu nehmen, ist in PostgreSQL 9.4

verfügbar

Nein, es gibt keine Möglichkeit, den Namen der aktuell ausgeführten Funktion in der plpgsql-Funktion zu erhalten.

Vor einigen Jahren habe ich Funktionen für den Zugriff auf Callstack geschrieben - es ist Teil von orafce. Sie können letzte Funktion von Stapel

erhalten     
Pavel Stehule 27.09.2012 11:20
quelle