在 Postgres 中创建函数时必须是函数的所有者

sal*_*ent 3 sql postgresql

我正在尝试调试一个实例,在该实例中我尝试创建一个具有特殊角色的函数"myrole"并且操作失败

错误:必须是函数 refresh_view 的所有者

其他函数可以成功创建——只有这个函数失败了。

SET ROLE to "myrole";

CREATE OR REPLACE FUNCTION refresh_view(schema_name text, table_name text)
RETURNS void
SECURITY DEFINER
AS $$
DECLARE sql text;
BEGIN
sql := 'REFRESH MATERIALIZED VIEW ' || quote_ident(schema_name) || '.' || quote_ident(table_name) || ' with data';
EXECUTE sql;
RETURN;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

Lau*_*lbe 6

该函数已经存在并且由不同的角色拥有。

只有所有者或超级用户可以DROPALTER对象,CREATE OR REPLACE FUNCTION如果该功能已经存在,同样适用。