Postgres hat eine dedizierte Funktion für diesen Zweck. Einführung in Postgres 8.4. The manual:
pg_get_function_identity_arguments(func_oid)
... erhalten Argumentliste eine Funktion (ohne Standardwerte) zu identifizieren ...
pg_get_function_identity_arguments
kehrt die Argumentliste notwendig, eine Funktion, in der Form zu identifizieren, es müssten zum Beispiel in ALTER FUNCTION
erscheinen. Dieses Formular enthält keine Standardwerte.
dass Verwendung (und format()
mit Postgres eingeführt 9.1), die folgende Abfrage generiert DDL-Anweisungen Funktionen fallen zu Ihrem Suchbegriff:
SELECT format('DROP %s %I.%I(%s)'
, CASE WHEN p.proisagg THEN 'AGGREGATE' ELSE 'FUNCTION' END
, n.nspname
, p.proname
, pg_catalog.pg_get_function_identity_arguments(p.oid)
) AS stmt
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE p.proname = 'dblink' -- function name
-- AND n.nspname = 'public' -- schema name (optional)
-- AND pg_catalog.pg_function_is_visible(p.oid) -- function visible to user
ORDER BY 1;
Returns:
stmt
---------------------------------------------------
DROP FUNCTION public.dblink(text);
DROP FUNCTION public.dblink(text, boolean);
DROP FUNCTION public.dblink(text, text);
DROP FUNCTION public.dblink(text, text, boolean);
vier gefunden Übereinstimmungen im Beispiel, da dblink overloaded functions verwendet.
Führen Sie DROP
Anweisungen selektiv aus!
Alternativ, können Sie die bequeme Umwandlung in den object identifier type regprocedure
verwenden, die eine komplette Funktionssignatur einschließlich Argumenttypen zurückgibt:
-- SET LOCAL search_path = ''; -- optional, to get all names schema-qualified
SELECT format('DROP %s %s;'
, CASE WHEN proisagg THEN 'AGGREGATE' ELSE 'FUNCTION' END
, oid::regprocedure
) AS stmt
FROM pg_catalog.pg_proc
WHERE proname = 'dblink' -- function name
ORDER BY 1;
Schauen Sie sich die Funktion über pgAdmin an. –
'\ df name' innerhalb [' psql'] (http: //www.postgresql.org/docs/aktuell/statisch/app-psql.html). –