sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-tekst/bytea-kolom migreren naar een groot object?

Waarom gebruik je niet gewoon lo_from_bytea ?

Voorbeeld:

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)

Dus om de gegevens daadwerkelijk te verplaatsen (u kunt beter een back-up hebben) van tekst naar OID's, kunt u het volgende doen:

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;

...en tot slot, aangezien PostgreSQL een MVCC-database is en niet onmiddellijk alle gegevens verwijdert, moet u de zaken opschonen met een VACUUM FULL of een CLUSTER .




  1. MySQL-terminologiebeperkingen versus verschil in externe sleutels?

  2. Verzamelingen van opeenvolgende datums ophalen

  3. Zijn drop-down geselecteerde velden kwetsbaar voor elke vorm van injectie?

  4. Syntaxisfout op MERGE-instructie