이전 질문에 대한 이 답변과 비슷 하며 제한을pg_read_file()
원하지 않는 경우 (짧게 : pg_read_file
데이터베이스 디렉토리 외부의 파일을 읽을 수 없으며 현재 세션의 문자 인코딩으로 텍스트를 읽습니다).
이 기능은 모든 경로에서 작동하지만 수퍼 유저로 작성해야합니다.
create or replace function stack.bytea_import(p_path text, p_result out bytea)
language plpgsql as $$
declare
l_oid oid;
begin
select lo_import(p_path) into l_oid;
select lo_get(l_oid) INTO p_result;
perform lo_unlink(l_oid);
end;$$;
lo_get
9.4에 도입되었으므로 이전 버전의 경우 다음이 필요합니다.
create or replace function stack.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;$$;
그때:
select convert_from(stack.bytea_import('/tmp/test.xml'), 'utf8')::xml;