sql >> Database teknologi >  >> RDS >> PostgreSQL

Migrere PostgreSQL-tekst/bytea-kolonne til et stort objekt?

Hvorfor ikke bare bruge lo_from_bytea ?

Eksempel:

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)

Så for rent faktisk at flytte (du må hellere have en sikkerhedskopi) dataene fra tekst til OID'er, kan du gøre følgende:

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;

...og endelig, da PostgreSQL er en MVCC-database og ikke straks sletter alle data, bør du rydde op med enten en VACUUM FULL eller en CLUSTER .




  1. SELECT + INSERT + Query Cache =MySQL lås op

  2. Sådan fungerer REGEXP_SUBSTR()-funktionen i MySQL

  3. org.apache.openjpa.persistence.ArgumentException mens du kører hovedklassen

  4. php/mysql postnummer nærhedssøgning