Tương tự như câu trả lời này cho câu hỏi trước đó và nếu bạn không muốn các hạn chếpg_read_file()
(nói ngắn gọn: pg_read_file
không thể đọc các tệp bên ngoài thư mục cơ sở dữ liệu và đọc văn bản trong mã hóa ký tự của phiên hiện tại).
Hàm này hoạt động cho bất kỳ đường dẫn nào, nhưng cần phải được tạo dưới dạng siêu người dùng:
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
đã được giới thiệu vào tháng 9 vì vậy đối với các phiên bản cũ hơn, bạn sẽ cần:
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;$$;
sau đó:
select convert_from(stack.bytea_import('/tmp/test.xml'), 'utf8')::xml;