คล้ายกับนี้คำตอบคำถามก่อนหน้านี้และถ้าคุณไม่ต้องการข้อ จำกัด ของpg_read_file()
(ในระยะสั้น: pg_read_file
ไม่สามารถอ่านไฟล์นอกไดเรกทอรีฐานข้อมูลและอ่านข้อความในการเข้ารหัสอักขระเซสชั่นปัจจุบัน)
ฟังก์ชั่นนี้ใช้ได้กับทุกเส้นทาง แต่ต้องสร้างเป็น superuser:
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;