Skip to main content

Posts

PostgreSQL'de FILTER İfadesi

Merhaba, FILTER ifadesinin kullanımını anlatmadan önce PostgreSQL'de Aggregate ifadesini ve Aggregate fonksiyonlarını biraz açıklayalım. Sorgularda istenilen bir alan için gruplama yaparak sonucunu toplama, sayma, en büyük, en küçük değerlerine ait sonuca ulaşmak istendiğinde aggregate fonksiyonlarını kullanmamız gerekir. PostgreSQL'de kullanılan Aggregate fonksiyonlarının bir kaçı aşağıdaki gibidir. SUM() - Değerleri toplar. COUNT() - Değerleri sayar. AVG() - Sütun değerinin ortalamasını bulur. MIN() - En küçük değeri bulur. MAX() - En büyük değeri bulur. FILTER ifadesi aggregate fonksiyonlarıyla birlikte kullanılır. Gruplanacak değer içinde filtreleme sağlar.  AGGREGATE_FUNCTION(hesaplamalar) FILTER (WHERE ifadesi) şeklinde kullanılır. COUNT(*) FILTER (WHERE ifadesi) SUM(*) FILTER (WHERE ifadesi) Örnek tablo oluşturalım. create table users as select (ARRAY['Ahmet','Turan','Kaya','Beren'])[floor(random()*5)+1]  as f_name, (ARRAY[&#

pg_upgrade ile PostgreSQL Sürüm Güncellemesi

Merhaba, PostgreSQL sunucusunun da gelen yeni özellikleri kullanabilmek ve geliştirmeleri sıkı takip ederken kendi sistemimize entegre etmemiz önemli. Şu an PostgreSQL'in en güncel versiyonu 10. PostgreSQL 11 beta test edilmeye çoktan başlandı. Dolayısıyla eğer PostgreSQL sunucunuzun versiyonu 9.6 ve altındaysa 10'a geçirmeyi planlıyorsanız bunu pg_upgrade aracını kullanarak yapabilrsiniz. Major geçişten kasıt 9.6'dan 10'a geçilmesi burada. Böyle bir değişiklik yapmadan önce konfigürasyon dosyalarının yedeğinin alınmasını tavsiye ediyoruz.  pg_upgrade komutunun kullanımı şöyledir. pg_upgrade -d <eski_data_dizini> -D <yeni_data_dizini> -b <eski_bin_dizini> -B <yeni_bin_dizini> [Diğer_Seçenekler] Diğer seçenekler aşağıdaki gibidir. Bunları kullanarak da ilerleyebilirsiniz. -b, --old-bindir=Eski bin dizini gösterir. -B, --new-bindir=Yeni bin dizinini gösterir. -c, --check=iki cluster arasında pg_upgrade komutunun başarılı çalışıp çal

PostgreSQL Foreign Data Wrappers

Hi all, I would like to mention about generating Foreign Data Wrappers(FDW) on PostgreSQL 9.6. FDW is used for remote access to tables from external data storage. If needed to use remote table in a query, you can use FDW tables. For instance you can get a table from remote database, but there is a condition. The condition is that user should have proper privileges on FDW table. There is two extension for FDW on PostgreSQL. First one is used for accessing PostgreSQL database to PostgreSQL database, called postgres_fdw . Second one is used for accessing PostgreSQL database to different databases (SQL Server, Sysbase) called tds_fdw .  Foreign Data Wrappers feature lets you to cross-query between remote database tables. Postgres_fdw and tds_fdw has different structure. Tds_fdw usign Tabular Data Stream application layer protocol to transfer data between database server and client. Generating Tds_fdw and Postgres_fdw is similar. I share an example for generating FDW between two Po

PostgreSQL ile Logical Replication Slot

Logical Replication Slot   Logical Decoding Replication Slot yazısına buradan ulaşabilirsiniz. Giriş bilgisi bu yazıda yer almaktadır.  Logical Replication, logical decoding kullanır. Logical decoding, veritabanı tabloları üzerinde commit edilmiş processlerin karşı tarafa row-by-row aktarılmasıdır. Oluşturulan her bir slot sadece bir veritabanı için kullanılabilir. Bir veritabanında birden fazla birbirinden bağımsız slot oluşturulabilir. Logical replication Slot'lar alıcı tarafla ilgili herhangi bilgiye sahip olmadıkları için yukarıda bahsettiğim disk size'ının dolması durumunun yaşanması kontrol edilmeyen bir sistemde kaçınılmaz olacaktır. Unlogged veya temp tables slot ile karşı tarafa aktarılmadığı unutulmamalıdır. Logical Replication kullanılmadan önce wal_level=logical olarak set edilmeli ve max_replication_slots değeri en az 1 olarak set edilmeli. Logical Replication Slot oluşturulması Physical Replication Slot ile benzerdir. Logical Replication Slot

PostgreSQL ile Physical Replication Slot ve Pg_Basebackup

Physical Replication Slot Physical Replicatio slot, disk bloklarındaki değişikliklerini karşı tarafa gönderir. Aktarılan WAL dosyalarını kontrol eder. Replication Slot yazısına buradan ulaşabilirsiniz. Physical slot oluşturmak için pg_create_physical_replication_slot() fonksiyonu kullanılır. Tam kullanımı şöyledir. Checkpoint sonrası güncel WAL dosyasının hangisi olduğu bilgisi bu fonksiyonu kullanarak oluşturduğumuz slot ile tutulmaz. Açıkcası bunu tercih etmemek için geçerli sebeplerim var ve açıklamasını aşağıda yaptım. select pg_create_physical_replication_slot('slot_name'); Aynı fonksiyona gelen ikinci parametre ile checkpoint sonrası güncel WAL dosyası bilgisi tutulur. Bunun önemi ve asıl farkı aşağıdaki örneklerin altında açıklanmıştır. select pg_create_physical_replication_slot('slot_name',true);     gunce=# select pg_create_physical_replication_slot('slot_first_standby'); pg_create_physical_replication_slot ---------------------------