PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Przenieść kolumnę tekstową/bajtową PostgreSQL do dużego obiektu?

Dlaczego nie po prostu użyć lo_from_bytea ?

Przykład:

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)

Tak więc, aby faktycznie przenieść (lepiej mieć kopię zapasową) dane z tekstu do OID, możesz wykonać następujące czynności:

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;

... i na koniec, ponieważ PostgreSQL jest bazą danych MVCC i nie usuwa od razu wszystkich danych, powinieneś wyczyścić wszystko za pomocą VACUUM FULL lub CLUSTER .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie PostgreSQL do zwrócenia wyników w postaci listy oddzielonej przecinkami

  2. Jak mogę wykonać próżnię za pomocą PostgreSQL?

  3. WSTAW liczbę rzeczywistą w kolumnie opartej na innych kolumnach OLD INSERT

  4. Najnowsze trendy PostgreSQL:najbardziej czasochłonne zadania i ważne wskaźniki do śledzenia

  5. okresowo odświeżaj zmaterializowany widok postgres