sql >> Databáze >  >> RDS >> PostgreSQL

Migrovat textový/bajtový sloupec PostgreSQL na velký objekt?

Proč prostě nepoužít lo_from_bytea ?

Příklad:

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)

Chcete-li tedy skutečně přesunout (raději mít zálohu) data z textu do OID, můžete provést následující:

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;

...a konečně, protože PostgreSQL je databáze MVCC a neodstraní okamžitě všechna data, měli byste věci vyčistit buď pomocí VACUUM FULL nebo CLUSTER .




  1. odstranit všechny číselné znaky ze sloupce mysql

  2. ~~ Operátor v Postgres

  3. Migrace z DB2 na PostgreSQL – co byste měli vědět

  4. Jak uniknout řetězci při porovnávání vzoru v PostgreSQL