2

我正在尝试在 Linux 上创建一个用 Perl 编写的 PostgreSQL 触发器,它应该执行基于外部库的代码。包含触发器的 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我都会在 Perl 代码中收到权限被拒绝错误,以便访问MyModule. 完全访问我的主目录postgres并没有帮助。

先感谢您!

4

1 回答 1

1

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

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

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

于 2018-04-17T11:56:19.480 回答