如何将pdf插入postgresql(远程数据库)

时间:2017-04-07 14:14:23

标签: postgresql pdf remote-access insert-update

我有一个pdffile。

我可以使用以下函数和命令插入pdf文件,db在同一服务器中可用。

功能

create or replace function bytea_import(p_path text, p_result out bytea) 
                   language plpgsql as $$
declare
  l_oid oid;
  r record;
begin
  p_result := '';
  select lo_import(p_path) into l_oid;
  for r in ( select data 
             from pg_largeobject 
             where loid = l_oid 
             order by pageno ) loop
    p_result = p_result || r.data;
  end loop;
  perform lo_unlink(l_oid);
end;$$;

命令:

 update jicontentresource set  data = bytea_import('/root/Desktop/Avinash/Avinash.pdf')
 where id =245

当文件在本地服务器中时,db在另一个服务器(远程)中可用

如果我尝试为远程服务器做,请使用以下命令

update jicontentresource set  data = bytea_import('/root/Desktop/Avinash/Avinash.pdf') where id =245

无法从本地获取文件。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:1)

你无法使用PostgreSQL函数,因为该函数在数据库服务器上运行,而文件在客户端的文件系统上。

您必须使用客户端编程语言编写代码,并以这种方式读取和导入文件。

根据您使用的API,您可以将文件读入内存并使用INSERTUPDATE,或者您可以使用COPY ... FROM STDIN SQL命令。

答案 1 :(得分:0)

你可以分开本地和远程的东西:

create or replace function bytea_import(l_oid int, p_result out bytea) 
                   language plpgsql as $$
declare
  l_oid oid;
  r record;
begin
  p_result := '';
  for r in ( select data 
             from pg_largeobject 
             where loid = l_oid 
             order by pageno ) loop
    p_result = p_result || r.data;
  end loop;
  perform lo_unlink(l_oid);
end;$$;

然后在客户端运行:

t=# select lo_import('/tmp/build.start');
 lo_import
-----------
 447349949
(1 row)
 update jicontentresource set  data = bytea_import(447349949)
 where id =245