PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Di chuyển cột văn bản / bytea PostgreSQL sang đối tượng lớn?

Tại sao không chỉ sử dụng lo_from_bytea ?

Ví dụ:

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)

Vì vậy, để thực sự di chuyển (tốt hơn là bạn nên có một bản sao lưu) dữ liệu từ văn bản sang OID, bạn có thể làm như sau:

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;

... và cuối cùng, vì PostgreSQL là cơ sở dữ liệu MVCC và không xóa tất cả dữ liệu ngay lập tức, bạn nên dọn dẹp mọi thứ bằng VACUUM FULL hoặc 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. Cách tạo bảng Chỉ khi nó không tồn tại trong PostgreSQL

  2. Dữ liệu CSV vào postgreSQL bằng Python

  3. Cách lấy dữ liệu từ Json sang nhiều cột PostgreSQL

  4. So sánh các mảng cho bằng nhau, bỏ qua thứ tự của các phần tử

  5. Kiểm tra xem bảng postgresql có tồn tại trong python không (và có thể là Psycopg2)