sql >> Databasteknik >  >> RDS >> PostgreSQL

Migrera PostgreSQL text/byte kolumn till stort objekt?

Varför inte bara använda lo_from_bytea ?

Exempel:

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å för att faktiskt flytta (det är bäst att du har en säkerhetskopia) data från text till OID:er kan du göra följande:

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;

...och slutligen, eftersom PostgreSQL är en MVCC-databas och inte omedelbart tar bort all data, bör du rensa upp med antingen en VACUUM FULL eller ett CLUSTER .




  1. Välj fråga med villkoret

  2. Grunderna i SQL Server Transaction Log

  3. Motsvarar Oracles externa tabeller i SQL Server

  4. Kan du hjälpa till att ändra frågan eller annan fråga för att få det förväntade resultatet