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

时间:2017-07-21 15:10:53

标签: postgresql-9.5

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

insert into file(new_version, new_content);

现在我可以找到一种方法来阅读所有内容并将其放到桌面上。 COPY命令允许我将文件连接为行序列。 我只看到联系线路的方式,但我不喜欢这种方法。

有一些好的解决方案吗?

感谢。

2 个答案:

答案 0 :(得分:3)

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

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;

答案 1 :(得分:0)

另一种解决方案可能是使用$ tag $ ... $ tag $语法。它是PostgreSQL的功能,称为“美元引用”,它允许您在不引用的情况下在标签之间插入任何文本。有关详细信息,请访问https://www.postgresql.org/docs/9.5/static/sql-syntax-lexical.html,4.1.2.4。美元引用的字符串常量