PostgreSQL Extensions Nedir?

PostgreSQL kolayca genişletilebilir olacak şekilde tasarlanmıştır. PostgreSQL'e eklemelerin daha kolay paketlenmesini sağlamak için PostgreSQL 9.1'de uzantılar uygulandı. Uzantılar, kullanıcı tarafından görülebilen işlevleri paketleyebilir veya veritabanının belirli işlemleri nasıl yaptığını değiştirmek için PostgreSQL'deki kancaları kullanabilir. 

 Bu nedenle, veritabanına yüklenen uzantılar, aynı yerleşik özellikler gibi işlev görebilir. contrib/ Kaynak koduyla birlikte gönderilen dizin, birkaç uzantı içerir . Diğer uzantılar, PostGIS gibi bağımsız olarak geliştirilir . PostgreSQL çoğaltma çözümleri bile harici olarak geliştirilebilir. Örneğin Slony -I, çekirdek projeden bağımsız olarak geliştirilen popüler bir birincil/yedek çoğaltma çözümüdür.

PostgreSQL extensions'lar sayesinde bir çok işinizi kolayca halledebilirsiniz. Örnek olarak makina yeniden başlattığı zaman cache'te tutulan verilerini kaybedersiniz ve ilk başta ram yerine diskten okumak zorunda kalırsınız. Bu yüzden yavaşlıklar oluşabilir. Extensions'lar sayesinde makina açıldığında istediğiniz tabloları tekrar okutup cache alabilirsiniz. PostgreSQL ilk yüklenildiğinde bazı extensions'lar içinde gelmektedir.

Temel olarak extensions'ların kullanılması için ilk olarak kurulması ve veritabanında aktifleştirilmesi gerekmektedir. Extensions'lar her veritabanına extension ayrı ayrı yüklenilmesi gerekmektedir.

Dikkat

Bir uzantıyı süper kullanıcı olarak yüklemek, uzantının yazarının uzantı yükleme komut dosyasını güvenli bir şekilde yazdığına güvenmeyi gerektirir. Kötü niyetli bir kullanıcının, dikkatsizce yazılmış bir uzantı komut dosyasının daha sonra yürütülmesini tehlikeye atacak ve bu kullanıcının süper kullanıcı ayrıcalıkları elde etmesine izin verecek truva atı nesneleri oluşturması çok zor değildir. Ancak truva atı nesneleri yalnızca search_path komut dosyası yürütme sırasında, yani uzantının yükleme hedef şemasında veya bağlı olduğu bazı uzantıların şemasındadır. Bu nedenle, komut dosyaları dikkatlice incelenmemiş uzantılarla uğraşırken iyi bir kural, bunları yalnızca CREATE ayrıcalığının güvenilmeyen kullanıcılara verilmediği ve verilmeyeceği şemalara yüklemektir. Aynı şekilde, bağımlı oldukları herhangi bir uzantı için.

PostgreSQL ile sağlanan uzantıların , diğer uzantılara bağlı birkaçı dışında, bu tür yükleme zamanı saldırılarına karşı güvenli olduğuna inanılmaktadır. Bu uzantıların belgelerinde belirtildiği gibi, bunlar güvenli şemalara kurulmalı veya bağımlı oldukları uzantılarla aynı şemalara veya her ikisine birden kurulmalıdır.

PostgreSQL Extensions Kullanımı

Postgresql giriş yaptıktan sonra, yüklü uzantıları listelemek için hem \dx hem de yüklü ve kullanılabilir uzantıları listelemek için \dx+ vardır.

\dx 

Şimdi bir extension kuralım. Örnek olarak postgis uzantısını veritabanına eklemeye çalışıyorum. Uzantı lokal sunucu üzerinde postgresql içinde olmadığı için hata aldığımızı görüyoruz.

create extension postgis; 

Şimdi uzantıyı ilk olarak sunucumuza indirelim.

PostgreSQL versiyonunuza göre komut satırında ilgili alanı değiştirmeyi unutmayınız.

sudo apt install postgis postgresql-14-postgis-3 -y 

Bir sonraki aşamada ise hangi veritabanında kullanılacak ise bu extension'u oluşturmamız gerekmektedir. Artık kullanılabilir.

create extension postgis; 

Extension'lar yüklenildekten sonra kolayca veritabanından kaldırılabilir.

drop extension postgis; 

Bazı extension'lar bağımlılıklara ihtiyaç duyabilir. Bu extension bağlı olduğu, önceden yüklenmemiş tüm extensions'ları otomatik olarak yükler. Bağımlılıkları da aynı şekilde otomatik olarak, yinelemeli olarak kurulur. Madde, SCHEMA verilmişse, bu şekilde yüklenen tüm uzantılar için geçerlidir. Bildirimin diğer seçenekleri, otomatik olarak yüklenen uzantılara uygulanmaz; özellikle, varsayılan sürümleri her zaman seçilidir. Önceden bu durumlarda psql'den çıkıp ihtiyaç duyulan extension'lar kurulurdu. Ancak CASCADE komutu ile tek seferde bu ihtiyaç hemen giderilebilir.

Şimdi geocoder uzantısını eklemeye çalışıyorum. Ancak uzantıyı yüklemek için bağımlılıkları karşılamamız gerekmektedir.

create extension postgis_tiger_geocoder; 

Tam bu kısımda cascade bizim tüm ihtiyaçlarımızı kolay bir şekilde karşılıyor.

create extension postgis_tiger_geocoder CASCADE; 

Eğer yukarıdaki gibi bağımlılığı olan bir extension kaldırılmak isterseniz aynı şekilde CASCADE kullanılmalıdır..

drop extension postgis_tiger_geocoder CASCADE;
Blog'a Dön