PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana pg_column_size bisa lebih kecil dari octet_length?

Saya akan mengatakan pg_column_size melaporkan ukuran terkompresi TOAST nilai ed, sedangkan octet_length melaporkan ukuran yang tidak terkompresi. Saya belum memverifikasi ini dengan memeriksa sumber fungsi atau definisi, tetapi itu masuk akal, terutama karena deretan angka akan terkompresi dengan cukup baik. Anda menggunakan EXTENDED penyimpanan sehingga nilainya memenuhi syarat untuk TOAST kompresi. Lihat TOAST dokumentasi .

Adapun menghitung ukuran DB yang diharapkan, itu pertanyaan baru. Seperti yang Anda lihat dari demo berikut, itu tergantung pada hal-hal seperti seberapa kompresibel string Anda.

Berikut adalah demonstrasi yang menunjukkan bagaimana octet_length bisa lebih besar dari pg_column_size , mendemonstrasikan di mana TOAST dimulai. Pertama, dapatkan hasil pada output kueri di mana tidak ada TOAST ikut bermain:

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)

Sekarang mari simpan output kueri yang sama ke dalam tabel dan dapatkan ukuran baris yang disimpan:

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. Lewati parameter WHERE ke Tampilan PostgreSQL?

  2. psql ERROR:tidak dapat membuka file address.csv untuk membaca:Tidak ada file atau direktori seperti itu

  3. Menggabungkan pernyataan INSERT dalam CTE yang memodifikasi data dengan ekspresi CASE

  4. Buat kolom tipe presisi ganda[] dengan liquibase

  5. Bagaimana cara mengetahui kapan tabel Postgres dikelompokkan dan indeks apa yang digunakan