How to alter owner of a function in postgres
我正在编写一个脚本来改变postgres的所有功能(更改每个函数的所有者)。 我能够使用postgres查询列出所有函数名称,但不能列出每个函数的参数。
如果我得到以下任何问题的解决方案,我的问题将得到解决:
例如,我可以写
ALTER FUNCTION schemaname.func(text)拥有'newowner'的所有者
如:
ALTER FUNCTION schemaname.func(*)拥有者'newowner'。
Is there any way to list down parameters' data type in each of the function.
是的,使用
以下将创建一个SQL脚本来更改
1 2 3 4 | select 'alter function '||nsp.nspname||'.'||p.proname||'('||pg_get_function_identity_arguments(p.oid)||') owner to newowner;' from pg_proc p join pg_namespace nsp ON p.pronamespace = nsp.oid where nsp.nspname = 'someschema'; |
您可以将其输出假脱机到文件中,然后运行该生成的脚本。
如果您的函数名称需要引用,则可能需要使用
您可以将所有内容包装到函数中,并使用动态SQL,以便在需要定期的情况下使生活更轻松。
我有同样的问题,但pg_get_function_identity_arguments(p.oid)对我不起作用。 所以我用oidvectortypes(p.proargtypes)替换了这个函数。
1 2 3 4 | select 'alter function '||nsp.nspname||'.'||p.proname||'('||oidvectortypes(p.proargtypes)||') owner to newowner;' from pg_proc p join pg_namespace nsp ON p.pronamespace = nsp.oid where nsp.nspname = 'someschema'; |