Postgresql pgcompact

Pg_compact , postgresql içerisinde bulunan vacuum full ve cluster gibi araçlar kullanılırken sistemde uzun süreli locklara neden olduğundan dolayı geliştirilen bir araçtır.

Pg_compact bir tabloda çalıştırıldığında işlem yapılan tabloda işlem sırasında gelecek olan insert,update ve delete gibi işlemler için bir tablo oluşturur.  Orijinal tabloda bir  trigger oluşturarak bu oluşturulan tabloya işlem sırasında gelen insert,update,delete işlemlerini yazar. Bu sayede pg_repack komutu çalıştırıldığında ilgili tabloda lock’ın önüne geçilmiş olur fakat bunla bitmez sadece eski tablodaki tüm sütunları ve dataları içeren yeni bir tablo oluşturulur ve eski tabloda ki indekslerde  oluşturulur.  Yeni tablo index ve dataları ile beraber oluşturulduktan sonra işlem sırasında gelen insert,update,delete  işlemlerinin tutulduğu tablo yeni tablo ile birleştirilerek işlem tamamlanır . Sistem tabloları ve viewleri de kullanılarak gerekli kontroller tamamlandıktan sonra   eski tablo silinerek yeni tablo rename yapılır ve işlem en az lock ile tamamlanmış olur.

Pg_compact işlemi belirli bir zamanda durdurabilir ve sonradan kaldığı yerden devam ettirebilir.

 

Yüklemek için github repository aşağıdaki gibi inderebiliriz.

 

git clone https://github.com/grayhemp/pgtoolkit.git

Yukarıdaki dosyayı hangi dizin içerisine indirdiyseniz . Benim önerim postgres kullanıcısının yetkili olduğu dizine indirmenizdir.

Git clone komutu vasıtasıyla pgtoolkit adında dosyamız oluşturuldu. Oluşan dosya içerisinde pgtoolkit isimli dosyadaki bin klasörünü içerisinde “pgcompact” çalıştırabilirsiniz.

Örnek olarak data dosyasının içerisine indirdiğimizi varsayalım

cd /var/lib/pgsql/13/data/pgtoolkit/bin

Bin dosyasına girdikten sonra aşağıdaki şekildekine benzer  çalıştırabilirsiniz.

.\pgcompact --all --reindex --verbosity info

Pg_compact dosyası ile ilgili daha fazla bilgi edinmek için aşağıdaki komutu kullanabilirsiniz.

pgcompact --man

Pg_compact, pg_repack e göre daha fazla parametre alarak bazı noktalarda biraz daha esnek hale gelmiştir.

 

Daha detaylı bilgi için aşağıdaki github linkini ziyaret edebilirsiniz.

 

https://github.com/grayhemp/pgtoolkit

 

Loading