PostgreSQL PL/PerlU 触发器问题

PostgreSQL PL/PerlU trigger issue

我正在尝试在 Linux 上创建一个 PostgreSQL 触发器,它是用 Perl 编写的,它应该执行基于外部库的代码。包含触发器的 SQL 脚本如下所示:

CREATE OR REPLACE FUNCTION notify_mytable_update() RETURNS trigger AS $$
  use lib "full_path_to_lib_dir";
  use MyModule;

  return;
$$ LANGUAGE plperlu
SECURITY DEFINER
SET search_path = myschema, public, pg_temp;

DROP TRIGGER IF EXISTS notify_mytable_update ON mytable;

CREATE TRIGGER notify_mytable_update AFTER UPDATE ON mytable
  FOR EACH ROW
  EXECUTE PROCEDURE notify_mytable_update();

这个问题是每当我尝试使用 psql 这个脚本时,我在访问 MyModule 的 Perl 代码中得到一个权限被拒绝的错误。授予 postgres 对我的主目录的完全访问权限没有帮助。

提前致谢!

不要忘记,要访问文件,您不仅需要对文件及其所在目录的权限,还需要对路径中所有目录的权限。

因此,如果您的模块是 /home/george/MyModule.pm,除了 /home/george 和文件本身之外,您还需要访问 //home

您必须将这些权限授予操作系统用户 运行 PostgreSQL 服务器进程,通常 postgres