【问题标题】:How to alter owner of a function in postgres如何在 postgres 中更改函数的所有者
【发布时间】:2014-04-02 06:24:39
【问题描述】:

我正在编写一个脚本来更改 postgres 的所有函数(更改每个函数的所有者)。我可以使用 postgres 查询列出所有函数名称,但无法列出每个函数的参数。

如果我得到以下任何问题的解决方案,我的问题将得到解决:

  1. 有没有办法在每个函数中列出参数的数据类型。
  2. 我们有什么方法可以改变函数,而不是传递参数类型,我可以发送一些通配符。 例如我可以写 ALTER FUNCTION schemaname.func(text) OWNER TO 'newowner' 作为 : ALTER FUNCTION schemaname.func(*) OWNER TO 'newowner'。

【问题讨论】:

    标签: postgresql-9.2


    【解决方案1】:

    有没有办法在每个函数中列出参数的数据类型。

    是的,使用pg_get_function_identity_arguments()函数:

    以下将创建一个 SQL 脚本来更改 someschema 架构中的所有函数:

    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';
    

    您可以将其输出到一个文件中,然后运行该生成的脚本。

    如果您有需要引用的函数名称,您可能需要使用quote_ident 来连接函数名称。

    如果您经常需要,您可以将所有这些包装到一个函数中并使用动态 SQL 让生活更轻松。

    【讨论】:

    • 那个特定的语法对我不起作用(PostgreSQL 9.4.8,ERROR: syntax error at or near "'newowner'")。我不得不删除''newowner'' 周围的引用,即... owner to newowner;'
    【解决方案2】:

    我遇到了同样的问题,但 pg_get_function_identity_arguments(p.oid) 对我不起作用。所以我用 oidvectortypes(p.proargtypes) 替换了那个函数。

    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';
    

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 2014-03-02
      • 2021-11-06
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多