2010-09-27 23 views
24

Tôi biết trong SQL chúng ta có thể nén các lĩnh vực văn bản như sau:chữ nén trong PostgreSQL

CREATE TABLE TableName (FieldName CHARACTER(255) WITH COMPRESSION); 

Tôi muốn biết làm thế nào để đạt được nén văn bản trong Postgres.

+0

Để lưu trữ chuỗi đã nén, xem thêm http://stackoverflow.com/q/2958073/287948 –

Trả lời

26

Nén được bật theo mặc định cho tất cả các loại chuỗi, bạn không phải yêu cầu cơ sở dữ liệu làm điều đó. Kiểm tra hướng dẫn sử dụng về TOAST

  • ĐỪNG ngăn ngừa nén hoặc bộ nhớ ngoài dòng; hơn nữa nó vô hiệu hóa việc sử dụng các tiêu đề một byte cho các loại varlena. Đây là chiến lược duy nhất có thể là cho các cột của loại dữ liệu không phải TOAST.
  • EXTENDED cho phép cả nén và bộ nhớ ngoài dòng. Đây là mặc định cho hầu hết các dữ liệu có thể là TOAST- . Nén sẽ được cố gắng trước tiên, sau đó lưu trữ ngoài dòng nếu hàng vẫn còn quá lớn.
  • EXTERNAL cho phép lưu trữ ngoài dòng nhưng không nén. Sử dụng EXTERNAL sẽ làm cho hoạt động substring trên cột văn bản và bytea rộng nhanh (ít hình phạt tăng không gian lưu trữ ) bởi vì các hoạt động này được tối ưu hóa để lấy chỉ cần bộ phận của giá trị out-of-line khi nó không bị nén.
  • MAIN cho phép nén nhưng không được nén bộ nhớ ngoài dòng. (Trên thực tế, out-of-line lưu trữ sẽ vẫn được thực hiện đối với các cột như vậy, nhưng chỉ như một phương sách cuối cùng khi không có cách nào khác để làm cho hàng nhỏ đủ để vừa trên một trang.)
+5

Từ tài liệu, có vẻ như nén TOAST chỉ hoạt động cho các giá trị lớn hơn 2kb. Ví dụ của OP sẽ không đạt ngưỡng 2k và do đó sẽ không bị nén. –

+0

Bạn có thể thực thi nén, phụ thuộc vào thông số lưu trữ: http://www.postgresql.org/docs/current/interactive/storage-toast.html –

+1

Bằng cách thay đổi TOAST_TUPLE_THRESHOLD? Tôi nghĩ rằng đòi hỏi phải biên dịch lại? –

Các vấn đề liên quan