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