क्यों न केवल lo_from_bytea
का उपयोग करें
?
उदाहरण:
SELECT 'test'::text::bytea;
bytea
------------
\x74657374
(1 row)
SELECT lo_from_bytea(0, 'test'::text::bytea);
lo_from_bytea
---------------
274052
(1 row)
SELECT lo_get(274052);
lo_get
------------
\x74657374
(1 row)
इसलिए, वास्तव में डेटा को टेक्स्ट से OID में स्थानांतरित करने के लिए (आपके पास बेहतर बैकअप है), आप निम्न कार्य कर सकते हैं:
ALTER TABLE mytable ADD COLUMN value_lo OID;
UPDATE mytable SET value_lo = lo_from_bytea(0, value::bytea), value = NULL;
ALTER TABLE mytable DROP COLUMN value;
ALTER TABLE mytable RENAME COLUMN value_lo TO value;
... और अंत में, चूंकि PostgreSQL एक MVCC डेटाबेस है और तुरंत सभी डेटा को हटाता नहीं है, आपको चीजों को VACUUM FULL
या एक CLUSTER
।