如何在功能中加载整个内容文件?

sle*_*esh 2 postgresql-9.5

我编写了将向该表添加文件的新版本的函数。函数的用户应为update_file(path_to_file)。我需要从文件加载所有内容,并将其存储到表中,如下所示:

insert into file(new_version, new_content);
Run Code Online (Sandbox Code Playgroud)

现在,我可以找到一种读取所有内容并将其放在桌子上的方法。该COPY命令允许我把文件作为CONCATENATE行的序列。我只看到联系方式,但我不喜欢这种方式。

有什么好的解决方案吗?

谢谢。

sle*_*esh 5

我找到了以下解决方案,希望对您有所帮助。

CREATE OR REPLACE FUNCTION read_file_utf8(path CHARACTER VARYING)
  RETURNS TEXT AS $$
DECLARE
  var_file_oid OID;
  var_record   RECORD;
  var_result   BYTEA := '';
BEGIN
  SELECT lo_import(path)
  INTO var_file_oid;
  FOR var_record IN (SELECT data
                     FROM pg_largeobject
                     WHERE loid = var_file_oid
                     ORDER BY pageno) LOOP
    var_result = var_result || var_record.data;
  END LOOP;
  PERFORM lo_unlink(var_file_oid);
  RETURN convert_from(var_result, 'utf8');
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)