Skip to main content

Posts

Showing posts from August, 2018

PostgreSQL11 Yenilikleri 4 - Stored Procedure

Merhaba, PostgreSQL 10 ve öncesine kadar Stored Procedure'e en yakın veritabanı objesi olarak fonksiyon bulunuyordu. İkisi arasındaki en büyük fark fonksiyon bir sonuç döndürürken, Stored Procedure'ün buna ihtiyaç duymaması. PostgreSQL 11 ile gelen özelliklerden biri de yeni eklenen veritabanı objesi olan Stored Procedure'ler oldu. Stored Procedure CREATE OR REPLACE PROCEDURE ...   ile oluşturulur.  Fonksiyonlar SELECT ile çağırılırken, Stored Procedure 'ler PostgreSQL 11 ile gelen yeni bir ifade olan CALL komutu ile çalıştırılır. Stored Procedure , fonksiyondaki gibi input parametrelerinde IN, OUT ve INOUT kullanılabilir aynı fonksiyonlardaki gibi.  Bir Stored Procedure 'ü aşağıdaki gibi oluşturabilirsiniz. [pg11] # CREATE OR REPLACE PROCEDURE public.test_procedure(a integer, INOUT b integer)  LANGUAGE plpgsql AS $procedure$  BEGIN         SELECT a*b INTO b; END; $procedure$; CREATE PROCEDURE Stored procedure'ü CALL komutuyle çalıştırabilrsi

PostgreSQL 11 Yenilikleri 3 - Partition Yenilikleri

Merhaba, PostgreSQL 11’de partition’un nasıl yapıldığından bahsetmeden önce Partitioning nedir ve PostgreSQL 10 ve öncesinde nasıl yapıldığından bahsetmek isterim. Verilerin belirlenen kriterlerde farklı tablolara ayrıştırılmasına Partitioning denir. PostgreSQL’de partitioned tabloları bireysel tabloların oluşturduğu partition tablolarından meydana gelir. Bu tablolar tek bir tablo altında gruplandırılırlar. 10GB tablonuz olsun. Tüm tablodan veri çekmek yerine daha küçük boyuttaki partition tablolarından veri çekmek daha hızlı olacaktır. Eğer sorgunuzun yapısı partition yapınıza uygunsa arayacağı kriterin olduğu partition tablosuna gidecektir. Örneğin tarihlere göre aylık olarak tablonuzu böldüyseniz, sorgunuzda partition key değeriniz yoksa işe yaramayacaktır. Önemli noktalardan biri partition key’inin kullanılmasıdır. PostgreSQL 9.6 ve öncesinde partition yapısını kurmak için partitioned tabloya eklenecek verilerin partition tablolarına eklenmesi için trigger oluşturuyorduk. Tüm kr

PostgreSQL 10'da Partitioning

Merhaba, Partitioning aslında bir tablonun belirlenen kriterler için küçük parçalara ayrılmasıdır. Parçalarına ayrılan tabloya partitioned(master) tablo denir. Partitioned tabloları oluşturan küçük tablolara da partition(child) tabloları denir. Büyük tabloları daha küçük parçalara ayırmanın bir kaç sebebi var. Sorgu performansının arttırılmasını sağlar. Bir tablonun erişilmiş satırların çoğu aslında tek bir partitionda yada küçük parçalar halinde biren fazla partition tablolarında yer alır. Partition tabloları index sütunlarına yol göstermeye, index boyutunu küçültmeye ve yoğun şekilde kullanılan indexleri memory ile fit etmeye yarar. Bulk loads ve DELETE işlemleri için partition tablolarının partitioned tablolara eklenmesi ve çıkarılmasıyla başarım sağlanabilir. ALTER TABLE DETACH PARTITION yapmak yada partitioned tabloyla bağını DROP TABLE ile koparmak bulk operasyonlar için oldukça hızlıdır. DELETE komutundan dolayı VACUUM gereksinimi ortadan kalkacaktır. PostgreSQL 10 öncesinde ku

PostgreSQL'de TDS_FDW Kullanımı

Merhaba, Veritabanlarında oluşturduğunuz sorguları sadece kendi veritabanınızdaki tabloları kullanarak oluşturmak istemeyebilirsiniz. DWH'de kulanılan sorgular, finans sorguları vs. için bazen tek bir veritabanı yerine farklı cluster'lar üzerindeki veritabanları arasında da sorgu yazma ihtiyacı doğabilir ve bu ihtiyaç farklı sadece aynı veritabanı arasında değil, farklı sunucular üzerinde ki veritabanlarıyla da çalışma ihtiyacını doğurabilir. Bu ihtiyaç için PostgreSQL'de Foreign Data Wrappers(FDW) kullanılmaktadır. Bir kaç farklı çeşit FDW bulunmaktadır. En çok bilinenleri postgres_fdw ve tds_fdw dir. postgres_fdw, PostgreSQL-PostgreSQL veritabanları arasında erişimi sağlar. tds_fdw, PostgreSQL ile SQL Server veya SysBase veritabanları arasında erişimi sağlar. tds_fdw, Tabular Data Stream protokolünü kullanır. Bu protokol farklı sunucu ve istemci arasında data transferini sağlar. tds_fdw kurulumu için izlenmesi gereken sıra aşağıdaki gibidir.   CREATE EXTENSION tds_fdw;