पिछले प्रश्न के इस उत्तर के समान है , और यदि आप नहीं चाहते हैं कि प्रतिबंध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;