首页 > 解决方案 > 在没有 pg_read_file 的情况下使用 PostgreSQL 读取二进制文件

问题描述

我需要一个清晰的 PostgreSQL 9.4 来解决以下问题:

编辑:

该文件位于集群路径之外,因此正常功能会引发:
SQL 错误:错误:不允许绝对路径

标签: postgresqlplpgsqlpostgresql-9.3postgresql-9.4postgresql-9.5

解决方案


这是该工作的一个简单功能get_file_contents(filename text) returns bytea

create or replace function get_file_contents(filename text) returns bytea as
$fn$
 declare 
    lo_oid oid;
    retval bytea;
 begin
    lo_oid := lo_import(filename);
    retval := lo_get(lo_oid);
    perform lo_unlink(lo_oid);
    return retval;
 end;
$fn$ language plpgsql;
  • 琐碎的用法
-- Read the great work of Sun Tzu
select get_file_contents('/media/data/ForeignData/The Art Of War.pdf');

-- Insert into a table, update a table
insert into mytable (mycolumn[,<others>]) values (get_file_contents(myfilename)[,<others>]);
update mytable set mycolumn = get_file_contents(myfilename) where <whatever there>;

推荐阅读