默认情况下将所有 STABLE 或 IMMUTABLE 函数的 EXECUTE 授予 postgres 角色

Grant EXECUTE on all STABLE or IMMUTABLE functions to a postgres role by default

我想创建一个只读的 postgres 角色,我希望该角色能够使用不修改数据库的函数,包括我将来可能创建的函数。由于它们不修改数据库(并满足其他要求),因此我一直将这些函数标记为 STABLE 或 IMMUTABLE(视情况而定)。

有没有办法将 STABLE 和 IMMUTABLE 函数的默认执行权限授予角色?类似于 alter default privileges in schema public grant select on tables to <role_name>;

我正在使用 postgresql 9.6。

你不能那样做。

您可以通过检查目录中函数的定义来编写一个事件触发器来完成此操作。

请注意,volatile 函数也可以是只读的,而 stable 函数可能有副作用。所以我不认为基于波动性来尝试这样做是不正确的。