如何在PostgreSQL中为普通用户启用PL/R

如何在PostgreSQL中为普通用户启用PL/R,r,postgresql,R,Postgresql,我正在学习/测试PostgreSQL(9.5)的PL/R,并尝试使用SELECT*FROM plr_environ()验证安装。但这只适用于pg的超级用户,而不适用于我的普通pg用户 我所做的是: 1.我创建了扩展plr作为postgres进入模板数据库,然后使用createdb-T my_template my_user为我的用户名创建数据库 2.如果在模板数据库上使用psql-U postgres,我可以得到: postgres=# SELECT * FROM plr_environ();

我正在学习/测试PostgreSQL(9.5)的PL/R,并尝试使用
SELECT*FROM plr_environ()验证安装。但这只适用于pg的超级用户,而不适用于我的普通pg用户

我所做的是:

1.我创建了扩展plr
作为
postgres
进入模板数据库,然后使用
createdb-T my_template my_user
为我的用户名创建数据库

2.如果在模板数据库上使用
psql-U postgres
,我可以得到:

postgres=# SELECT * FROM  plr_environ();
        name        |            value             
--------------------+------------------------------
 PG_OOM_ADJUST_FILE | /proc/self/oom_score_adj
 PG_GRANDPARENT_PID | 499
 PGLOCALEDIR        | /usr/share/locale
 PGSYSCONFDIR       | /etc/postgresql-common
 LANG               | en_US.UTF-8
 PWD                | /var/lib/postgresql
 PGDATA             | /var/lib/postgresql/9.5/main
 LC_COLLATE         | en_US.UTF-8
 LC_CTYPE           | en_US.UTF-8
 LC_MESSAGES        | en_US.UTF-8
 LC_MONETARY        | C
 LC_NUMERIC         | C
 LC_TIME            | C
但是,如果在从模板创建的新数据库上执行此操作,则会出现以下错误:

=> SELECT * FROM  plr_environ();
ERROR:  permission denied for function plr_environ

有人能帮我解释一下我如何修复工作流,使
PL/R
能为普通用户工作吗?

我能找到的最接近的东西是。似乎只有超级用户才能执行PL/R函数。引用博客:

要执行plr功能,用户必须是超级用户, 因为现在这种语言被认为是不可靠的

解决方案是更改此条件的用户权限


因此,非超级用户目前似乎不可能使用PL/R函数。

我想,在这种情况下,您是超级用户,并且正在为其他用户进行设置,因此我将查看PGDATA/var/lib/postgresql/9.5/main中的权限,可能会说postgres:postgres,然后,您可能会问自己是否希望其他用户进入postgres的区域,或者是否应该将模板PGDATA修改为每个用户自己的文件位置,并将权限设置为user:user。所以这本身不是PL/R问题。@chris我只是数据库su。我对其他扩展(如postgis)使用了相同的工作流程,没有出现问题。我不知道plr有什么不同。在你尝试做点什么之前,一切都很好。Select确实在做一些类似于更改基础文件的事情。然而,扩展创建只是说明了在给定数据库中可能实现的功能。但无论如何,你是说PGDATA path指向一个每个人都可以做任何事情的文件。被拒绝的许可通常表明情况并非如此,postgres或root都没有这样的许可。用户模板上的ls-la是什么?