我有一个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
无法从本地获取文件。
有没有办法实现这个目标?
答案 0 :(得分:1)
你无法使用PostgreSQL函数,因为该函数在数据库服务器上运行,而文件在客户端的文件系统上。
您必须使用客户端编程语言编写代码,并以这种方式读取和导入文件。
根据您使用的API,您可以将文件读入内存并使用INSERT
或UPDATE
,或者您可以使用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