ръководството за ALTER FUNCTION
това е ясно:
Моят удебелен акцент.
Също така се нуждаете от няколко основни привилегии, за да създавате функции. Съгласно документацията:
Простото решение би било да направите промени във функциите като суперпотребител . (Суперпотребител по подразбиране е postgres
, но всеки потребител може бъде направен суперпотребител.)
Ако наистина трябва да промените собствеността върху всички функции, това ще свърши работа:
SELECT string_agg('ALTER FUNCTION '
|| quote_ident(n.nspname) || '.'
|| quote_ident(p.proname) || '('
|| pg_catalog.pg_get_function_identity_arguments(p.oid)
|| ') OWNER TO foo;'
, E'\n') AS _sql
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE n.nspname = 'public';
-- AND p.relowner <> (SELECT oid FROM pg_roles WHERE rolname = 'foo')
-- AND p.proname ~~ 'f_%'
Ограничено до public
схема.
За повече подробности и обяснение вижте този по-пълен отговор на dba.SE
.
Също тясно свързано:
ИЗХВЪРЛЯНЕ НА ФУНКЦИЯ без да знаете броя/типа на параметрите?