如何在PostgreSQL中为普通用户启用PL/R
我正在学习/测试PostgreSQL(9.5)的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();
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是什么?