2016-03-29 7 views
3

size 2 PostgreSQL fonksiyonları, 'called_function' ve 'caller_function', ikincisi birincinin çağırıyor olduğunu varsayalım. Tam: 'caller_function' diğer bazı işlevini çağırırsaPostgreSQL işlevleri arasında bağımlılık bulmak mümkün mü? Ben</strong></p> <p>PostgreSQL <strong>9.2.10 kullanıyorum

CREATE FUNCTION called_function() RETURNS varchar AS 
$BODY$ 
BEGIN 
    RETURN 'something'; 
END; 

CREATE FUNCTION caller_function() RETURNS varchar AS 
$BODY$ 
BEGIN 
    RETURN called_function(); 
END; 

Şimdi, SQL kullanarak ve tek fonksiyon adını bilerek, bunu öğrenmek istiyorum. Ya da 'called_function' başka bir işlev tarafından çağrılırsa. Mümkün mü?

Ben işlevin OID (en çok '123' olduğunu varsayalım) almaya çalıştı ve sonra pg_depend tabloya baktı:

SELECT * FROM pg_catalog.pg_depend dep WHERE dep.objid = 123 OR dep.objsubid = 123 OR dep.refobjid = 123 OR dep.refobjsubid = 123 OR dep.refobjsubid = 123; 

Ama sadece pg_language ve pg_namespace bağımlılık bulur. Daha fazla bir şey yok. örneğin masa pg_proc de

+1

Mümkün olduğunu sanmıyorum. Üstelik postgres, C de dahil olmak üzere farklı dilleri destekler ve bunlara bağımlılıkları bulmak o kadar kolay değildir. Plpgsql ve sql işlevleri için bir geçici çözüm düşünebilirim: pg_proc tablosunda arama yapabilirsiniz, örneğin: 'oid'i seçin, pg_proc'dan proname, prosrc'nin null olmadığı ve '% %' gibi prosrc'yi seçmediğini seçin. Ama bu çok güvenilir bir yol değil. –

cevap

0

Görünüş:

select nspname,proname,prosrc from pg_proc join pg_namespace nsp on (pronamespace=nsp.oid) where prosrc like '%called_function%' 
+0

ugh! Cevabım hayır, Postgress fonksiyon bağımlılıklarını takip etmiyor, bu yüzden var olmayan başka bir şeye bağlı bir fonksiyon yaratabilirsiniz ... çünkü çalışma zamanı boyunca patlar. #üzgün – ekkis