我正在将 Windows perl/postgresql 网络应用程序移植到 CentOS。
在 postgresql.conf
我有这些行:
custom_variable_classes = 'plperl' # list of custom variable class names
plperl.use_strict = on
plperl.on_plperlu_init = 'require "/path/to/my/app/dev/area/MyModule.pm";'
在 Windows 2003 中,这允许我将 use MyModule;
放入 PostgreSQL 的 plperlu 函数中,并且它们可以工作,前提是我已经转到包含 .pm 文件的路径并将 ACL 更改为在“安全”选项卡中授予用户 postgres
“读取”和“读取和执行”权限。
在 CentOS 6.4 上,我有点困惑。当我尝试定义一个调用 MyModule 的 plperlu 函数时,它给我 ERROR: Can't locate/path/to/my/app/dev/area/MyModule.pm in @INC
。
我很困惑,因为 MyModule.pm 归我所有:我,并且有 664 个权限。我尝试了 665,但仍然没有成功:sudo -u postgres ls -l/path/to/my/app/dev/area/MyModule.pm
报告 Permission denied
。就我认为我理解的 unix 权限而言,665 意味着“其他”具有读取和执行权限。
最佳答案
我刚刚写下这篇文章,然后意识到我最近找到了答案。
与我们的 Windows 设置不同,Linux 需要路径上所有目录的权限。所以我开始在路径上执行 ls -l,而且越来越短。它一直是 644,直到接近顶部,我有一个 700。我做了 chmod 705(也 chmod 701 工作,之后我切换到那个),然后宾果游戏,sudo -u postgres ls
可以看到它,我的 plperlu 函数定义也可以。
关于perl - 允许 unix 用户 'postgres' 访问 plperlu 的外部 .pm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19057948/