0

我在将文档导入 postgres db 时遇到问题。我有 plpgsql 函数,更简单的版本可能如下所示:

create function add_file(flag integer, sth varchar) returns void as
begin
   if flag = 1 then 
      insert into tab_one values (my_file_oid, sth);
   else
      insert into tab_two values (my_file_oid, sth);
   end if;
end;

和 psql 命令:

\lo_import('path/to/file');

两个代码在一个文件中。我不能将 lo_import() 放入插入语句,因为我需要客户端 lo_import。有变量 LASTOID,但在 add_file 函数中不可用。并且它不会在每次调用 add_file() 时更新。
那么,在我们的示例中,如何通过 insert 语句将 oid 放入数据库,并在函数中使用参数?文件在客户端计算机中。

4

1 回答 1

1

psql\lo_import返回导入产生的 OID。您需要将其作为参数传递给函数,如下所示:

CREATE FUNCTION add_file(_flag integer, _sth varchar, _oid oid)
  RETURNS void LANGUAGE plpgsql AS
BEGIN
   IF _flag = 1 THEN
      INSERT INTO tab_one(file_oid, sth) VALUES (_oid, _sth);
   ELSE
      INSERT INTO tab_two(file_oid, sth) VALUES (_oid, _sth);
   END IF;
END;

顺便说一句:始终使用命令将列列表添加到表中INSERT(可能除了临时调用)。


在 plpgsql 函数中,您可以使用还提供的服务器端函数。可能看起来像这样:

INSERT INTO tab_one(file_oid, sth) VALUES (lo_import('/etc/motd'), _sth);

请注意,这在数据库服务器的文件系统中以所有者(通常是系统用户postgres)的权限运行。因此,使用仅限于超级用户。

于 2012-08-24T06:14:58.437 回答