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

Làm cách nào để pg_column_size nhỏ hơn octet_length?

Tôi muốn nói pg_column_size đang báo cáo kích thước nén của TOAST giá trị ed, trong khi octet_length đang báo cáo các kích thước không được nén. Tôi chưa xác minh điều này bằng cách kiểm tra nguồn hoặc định nghĩa hàm, nhưng nó sẽ có ý nghĩa, đặc biệt là vì các chuỗi số sẽ nén khá tốt. Bạn đang sử dụng EXTENDED bộ nhớ để các giá trị đủ điều kiện cho TOAST nén. Xem TOAST tài liệu .

Đối với việc tính toán kích thước DB dự kiến, đó là một câu hỏi hoàn toàn mới. Như bạn có thể thấy từ bản trình diễn sau, nó phụ thuộc vào những thứ như mức độ nén các chuỗi của bạn.

Đây là phần trình bày cách octet_length có thể lớn hơn pg_column_size , chứng minh nơi TOAST bắt đầu. Đầu tiên, hãy lấy kết quả trên đầu ra truy vấn mà không có TOAST phát huy tác dụng:

regress=> SELECT octet_length(repeat('1234567890',(2^n)::integer)), pg_column_size(repeat('1234567890',(2^n)::integer)) FROM generate_series(0,12) n;
 octet_length | pg_column_size 
--------------+----------------
           10 |             14
           20 |             24
           40 |             44
           80 |             84
          160 |            164
          320 |            324
          640 |            644
         1280 |           1284
         2560 |           2564
         5120 |           5124
        10240 |          10244
        20480 |          20484
        40960 |          40964
(13 rows)

Bây giờ, hãy lưu trữ cùng một kết quả truy vấn đó vào một bảng và lấy kích thước của các hàng được lưu trữ:

regress=> CREATE TABLE blah AS SELECT repeat('1234567890',(2^n)::integer) AS data FROM generate_series(0,12) n;
SELECT 13

regress=> SELECT octet_length(data), pg_column_size(data) FROM blah;
 octet_length | pg_column_size 
--------------+----------------
           10 |             11
           20 |             21
           40 |             41
           80 |             81
          160 |            164
          320 |            324
          640 |            644
         1280 |           1284
         2560 |             51
         5120 |             79
        10240 |            138
        20480 |            254
        40960 |            488
(13 rows)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. local postgres db tiếp tục đưa ra lỗi giá trị khóa trùng lặp vi phạm ràng buộc duy nhất

  2. Rails 4 custom 404 gây ra lỗi kết nối postgresql trên Heroku

  3. Tạo một bản sao bất biến của concat_ws

  4. SqlAlchemy:lấy id của bản ghi cuối cùng được chèn

  5. Tổng thời lượng của các khoảng thời gian chồng chéo với mức độ ưu tiên bằng cách loại trừ chính khoảng thời gian chồng chéo