Funktionen nach text durchsuchen

Hallo,

gibt es eine Möglichkeite alle Funktionen in einem Schema nach bestimmten enthaltenem Text zu durchsuchen ?

Also Problem ist folgendes. Ich musste Namen von Feldern in einigen Tabelle ändern bzw. ergänzen. Dazu muss ich allerdings wissen in welchen Funktionen Joins auf diese Tabellen verwendet werden um diese auch umstellen zu können.
Werden die funktionen auch in einer Tabelle abgelegt die ich dann nach dem Stichwort, also z.B. dem Namen meiner gesuchten Tabelle, durchsuchen kann???

danke, hafi

Ja, Tabelle pg_catalog.pg_proc, Spalte prosrc.

In der Mailingliste [GENERAL] zeigte Kenneth Tanzer am 28 Mar 2008 sogar eine nette Funktion, sich den Code einer speziellen Funktion anzeigen zu lassen, ich kipp das mal hier rein:

CREATE FUNCTION function_source( char ) RETURNS text AS $$
DECLARE
   funcname ALIAS FOR $1;
   source TEXT;

BEGIN

   SELECT INTO source replace(p.prosrc,E'\x09',' ')
   FROM pg_catalog.pg_proc p
       LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
       LEFT JOIN pg_catalog.pg_language l ON l.oid = p.prolang
       JOIN pg_catalog.pg_roles r ON r.oid = p.proowner
   WHERE p.prorettype <> 'pg_catalog.cstring': :p g_catalog.regtype
       AND (p.proargtypes[0] IS NULL
       OR   p.proargtypes[0] <> 'pg_catalog.cstring': :p g_catalog.regtype)
       AND NOT p.proisagg
       AND p.proname ~ ( '^(' || funcname || ')$' )
       AND pg_catalog.pg_function_is_visible(p.oid) ;
   RETURN source;
END;$$ language 'plpgsql';

Damit sollte Dir geholfen sein.


Andreas

Ansonsten: Datenbank komplett dumpen und mit deinem bevorzugten Editor den Dump öffnen. Dann kannst du die Suchfunktion verwenden und auch gleich die Änderungen vornehmen :wink:

Oh mann…

Kann es sein, daß Aufwand und Nutzen hier doch etwas in Schieflage geraten, zumal eine Änderung im Dump ja nicht wirklich Wirkung hat… oder was das Dein Beitrag zum 1. April?

Andreas

Huch? Er muss, wenn er die Funktion ändert, diese auch wieder einspielen. Also hat er den Source der Funktion gleich zur Hand.
Viel praktischer geht es doch wohl nicht, oder?