POSTGRESQL NEDİR ?

  • PostgreSQL, tüm dünyada popüler olan açık kaynak kodlu, platform bağımsız gelişmiş bir nesne ilişkisel (ORDBMS) veritabanı yönetim sistemidir.
  • PostgreSQL, önde gelen ticari veritabanı ürünleri ile rekabet edecek kurumsal veritabanı özelliklerinin yanı sıra günümüz dijital dönüşüm projeleri ve teknolojileri ile uyumlu birçok yeni ve yenilikçi özelliğe sahiptir (Örneğin; dizi şeklindeki veri tipleri, paralel sorgular, JSON veri tipini desteklemesi ve üzerinde sorgu çalıştırabilmesi).
  • PostgreSQL veritabanı ve sistem yöneticileri, mimarlar ve geliştiriciler ve kurumlar için çekici gelen yenilikçi birçok özellik sunar.
  • PostgreSQL’in öğrenmesi, kurulumu, konfigürasyonu, yönetimi, izlemesi ve bakımı kolaydır. PostgreSQL ekosisteminde birçok yönetim, izleme açık kaynaklı ve ticari araç vardır.
  • PostgreSQL’in çok aktif ve güçlü geliştirici komünitesi vardır. Her yıl bir majör sürümü yayınlanır

TARIHÇE

AVANTAJLARI NEDİR?

  • Ekonomiktir, lisans ücreti yoktur, size üretici bağımsızlığı sağlar.
  • PostgreSQL’i istediğiniz kadar sunucuya kurabilir ve dağıtımını yapabilirsiniz.
  • Türkçe’ye yerelleştirilmiştir ve Türkçe desteği vardır.
  • Platform bağımsızdır. (http://buildfarm.postgresql.org/).
  • Yüksek güvenliklidir. Yüksek erişilebilirliklidir.
  • Genişleyebilir mimariye sahiptir. Her işlem ve veri büyüklüğüne göre ölçeklenebilir, esnektir, genişleyebilir veya daraltılabilir.
  • ACID tam uyumludur.
  • Öğrenmesi ve kurması kolaydır. Güncel, detaylı, herkese açık ve erişimi kolay yaygın dokümantasyonu vardır.
  • Yönetimi, yedeklemesi, bakımı ve izlemesi kolaydır.
  • Hata mesajları ve log sistemi açıktır, anlaşılırdır.
  • Planlı bakımlarda düşük kesinti süreleri sağlar.
  • Hata yapmaya engel olan güvenli bir yapısı vardır.
  • PostgreSQL’in çok gelişmiş bir sorgu planlayıcısı vardır.
  • Tüm modern programlama dilleri için sürücülere sahiptir.
  • Coğrafi veri yapılarını ve yeni NoSQL yapısal olmayan veri türlerini (JSON, JSONB, XML, vb.) destekler.
  • Kaynak kodu kullanılarak özelleşmiş açık veya kapalı kodlu çözümler geliştirilebilir.
  • Aktif bir topluluk tarafından desteklenmektedir.Tüm dünyadan geliştiricisi bulunan ve çekirdek geliştiricilerin yer aldığı topluluk soru ve sorunlara hızlı geri dönüşlerle çözüm sağlar. Hemen her yıl ticari ürünleri kıskandıran yenilikçi ve güncel özellikler içeren yeni sürümü yayınlanır.

POSTGRESQL BAZI ÖNEMLİ ÖZELLİKLERİ ?

Yük dengeleme ve yüksek erişilebilirlik için warm standby/hot standby/streaming ve logical (versiyon 10 ile birlikte) replikasyonu destekler.

PostgreSQL, yük dengeleme ve kümeleme yapıları ile veritabanı sunucuları arasındaki iş yüklerinin dengelenmesini sağlar. Sunucuların herhangi birinde aşırı yüklenme önlenirken, kaynak kullanımı optimize edilir, verimlilik en üst düzeye çıkar ve yanıt süreleri en aza iner.

PostgreSQL’de Multi-Master Replikasyonu ile birden çok sunucu master statüsüne sahip olabilirken, farklı lokasyonlarda dağıtık iş yükü yönetimini, yük dengelemeyi, Cluster Mimariyi destekler.

Natif Asenkron Çoğaltma (Native Asynchronous Replication), Tam / Artırımlı Yedekleme (Full/Incremental Backup) ve kurtarma modları, veri yeniden senkronizasyon mekanizmalarının kolaylığı gibi özellikler ile PostgreSQL, Disaster Recovery Center (DRC) hazırlığının tam özellik setini destekleyerek, daha fazla maliyet / araç eklemeden veri tabanınızın herhangi bir felaketten kurtarılmasını sağlar.

  • ACID (Atomicy, Consistency, Isolation, Durability)
  • MVCC (Multi Version Concurrency Control)
  • WAL (Write-Ahead Logging)
  • PITR (Point-in-Time Recovery), active / passive standbys
  • High Availability
  • Replication: Asynchronous/Synchronous, Physical/Logical, Cascaded
  • Procedural languages
  • Native Partitioning, Inheritance
  • Sophisticated query planner/cost based optimizer
  • Multi-platform
  • Advanced Indexing: GiST, SP-Gist, KNN Gist, GIN, BRIN, Bloom filters
  • Parallelization of read queries
  • Tablespace
  • Triggers
  • Functions
  • Views(Materialized/Updatable)
  • Transactions, Nested Transactions (via savepoints)
  • Constraint enforcement: check constraints, unique constraints, foreign keys, primary keys
  • Extension system: hstore, pg_stat_statements,pg_trgm…
  • Temporary tables
  • Unlogged tables
  • Foreign Data Wrappers (RDBMS, NoSQL, File): MongoDB, Hadoop, Redis , MySQL, Oracle, Delimited Files, vb
  • GIS, NoSQL, Graph

DİĞER VERİ TABANLARINI POSTGRESQL’E TAŞIMAK

PostgreSQL’in mimarisi, hem ilişkisel hem de ilişkisel olmayan modellerden herhangi bir mevcut veritabanı sisteminden geçişi destekler.

Veritabanı taşınmasını kolaylaştıran özelliklere sahiptir. Veri tabanlarının PostgreSQL’e bağlanmasını sağlayan Foreign Data Wrappers özelliği vardır. Foreign Data Wrappers eklentileri ile harici veri kaynaklarına bağlanarak üzerinde sorgu çalıştırılabilir, veri aktarılabilir/alınabilir (ETL). Genel, spesifik (Oracle, MySQL, PostgreSQL, MS SQL Server, DB2, Teradata), NoSQL (Cassandra, MongoDB, Redis, Neo4j), dosya (XML, CSV, düz metin), coğrafi bilgi sistemleri gibi farklı yapılarda harici veri kaynaklarına ve farklı veri tabanlarına erişebilirsiniz. Diğer veri tabanlarından PostgreSQL’e göç için geliştirilmiş açık kaynak kodlu ve ticari araçlar mevcuttur.

COĞRAFİ VERİ DESTEĞİ

PostgreSQL ile coğrafi verilerinizi yönetebilirsiniz. PostGIS eklentisi ile PostgreSQL mekansal veri yapılarını destekleyecek veritabanı haline gelir.

DEVELOPER LAR İÇİN

PostgreSQL geliştiriciler için de gelişmiş ve zengin özellikler sunar. PL/pgPSQL prosedürel diline sahiptir. PostgreSQL, yazılım geliştirme çerçevelerinden nesne ilişkisel eşleme (ORM) kütüphaneleri (Hibernate gibi) ile birlikte uyumlu çalışır. PostgreSQL’in çok zengin veri tipleri vardır. PostgreSQL, mevcut veritabanına uzantıları yüklemek için CREATE EXTENSION komutunu sunar.

PostgreSQL Veri Türleri

  • Basit: Integer, Numeric, Float, Char, String, Boolean
  • Kompleks: Date/Time, Array, Money (para birimi), Ağ Adresi Türleri (cidr, inet ve macaddr), tsvector (ts – text search, tam metin araması yapmasını sağlayan sıralanmış sözcük listesi), evrensel benzersiz tanımlayıcılar (UUID), enumerated, range, interval (izin verilen değerler kümesi, veri aralığı kısıtlaması ve denetim kısıtlamaları yapılabilen)
  • NoSQL, Doküman: JSON/JSONB, XML, Key-value (Hstore)
  • Geometrik: Point, Line, lseg, Box, Circle, Polygon, Path
  • Özel/Kompozit Veri Türleri: Yeni veri türlerini desteklemek için kolayca genişletilebilir.

-- Kompozit veri türü tanımlama örneği 
CREATE TYPE telefon_no AS ( alan_kodu varchar(3), no varchar(7) );

PostgreSQL’in Kurulumu, Yönetimi ve Bakımı Kolaydır

PostgreSQL’i sunuculara tek komutla kurulabilir.

PostgreSQL’i komut satırından psql etkileşimli terminali ve pgAdmin grafik arayüzlü aracı ile yönetebilirsiniz. Ayrıca çok zengin 3.parti PostgreSQL istemci uygulamaları (DBeaver, SQL Workbench/J, Tora, vb.) vardır.

Pgadmin4

Yedeklemesi ve Geri Yüklemesi Kolaydır

Point-in-Time Recovery (PITR) de dâhil olmak üzere çoklu yedekleme ve kurtarma modlarını gerçekleştirebilmektedir. PITR, veritabanı sistemine bir “Zaman Makinesi” sağlayarak, yazma önündeki günlüklerin kullanımıyla herhangi bir çökmeden belirli bir noktaya kadar kurtarılmasını sağlar. PostgreSQL’i mantıksal ve fiziksel olarak yedekleyebilirsiniz. Yedekleme için kurulumla birlikte pg_dump, pg_dumpall, pg_basebackup ve pg_restore araçları gelir.

Bir diğer popüler araç ise açık kaynak kodlu yazılım Barman (Backup and Recovery Manager)’dır. Barman ile PostgreSQL veritabanlarınızın yedekleme ve kurtarma yönetimini yapabilirsiniz.

PostgreSQL Upgrade

PostgreSQL’i sunucusunu yeni sürüme yükseltmek için pg_upgrade aracını kullanabilirsiniz.

  • Versiyonlar arasındaki farkların listelenmesi
  • Yeniliklerin incelenmesi
  • Yeni versiyonun mevcut sunucu yapısına etkisi ve faydalarının analiz edilmesi
  • Geçişin planlanması
  • Kaynak kullanım planlaması

Sistem İzleme (Monitoring)

PostgreSQL veritabanlarını çok kullanılan Zabbix, Grafana, Nagios, Cacti gibi sistem izleme araçları izleyebilirsiniz. Birçok açık kaynak kodlu alternatif izleme aracı bulunmaktadır

Sistem Analizi ve Performans Optimizasyonu

Sistem ve performansı analizi kolaydır. Sistem ve performans analizi için detaylı veriler ve bu verileri analiz etmek için açık kaynak kodlu araçlar mevcuttur. pg_stat_statements, pg_qualstats, pg_stat_kcache, pg_buffercache gibi eklentiler ile işleyişine ait detayları verileri gerçek zamanlı olarak analiz ve optimizasyon için amaçlı saklar. pg_badger ile sistem loglarının detaylı analizleri yapılabilir.

Powa ile PostgreSQL veritabanlarınızın performansını ve iş yükünü gerçek zamanlı izleyebilir, sorguları ve performanslarını görebilir, analizler yaparak, optimizasyon ve iyileştirme aksiyonları planlayabilirsiniz.

pgCluu, PostgreSQL veritabanı kümenizin durumunu ve performansını izleyebileceğiniz bir diğer açık kaynak kodlu araçtır.

PosatgreSQL Yönetim Araçları

  • pgAdmin
  • phpPgAdmin
  • dBeaver
  • OmniDB
  • PgDevOps
  • EDB Postgres Enterprise Manager (Ticari)
  • Navicat (Ticari)

Yedekleme Ve Veri Entegrasyonu

  • repmgr
  • pglogical
  • Bucardo
  • Slony
  • pgBarman,
  • pgBackRest
  • Pitrery
  • Omnipitr
  • Wal-e
  • pg_probackup –
  • EDB Backup and Recovery Tool (Ticari)

High Availibility (Yüksek Erişilebilirlik ve Yük Dengeleme)

  • Pgbouncer
  • Pgpool
  • PgHA
  • Repmgr
  • EDB Postgres Failover Manager (Ticari)

Migration

  • Ora2Pg
  • Pentaho
  • SQLINES
  • Foreign Data Wrappers
  • EDB Postgres Migration Toolkit (Ticari)
  • Talend (Ticari)
  • Ispirer MnMTK (Ticari)

psql Komut Listesi

  • Login
$ psql -d veritabani -U kullanici –W  (-h bağlanılacak sunucu, -U bağlantı kurulacak kullanıcı, -p port numarası) 

# -----------------------------------------------------------------------------
# pgsql temel komutlar
# -----------------------------------------------------------------------------
 \?                      Yardım
 \h                      SQL komutlarının listesi
 \h KOMUT                SQL komutu ile ilgili yardım
 \l                      Veritabanlarını listele
 \c VERITABANI           Veritabanina geçer
 \dt                     Tablo listesi
 \dtS                    Tablo listesi, sistem tablolari dahil
 \d NESNE                Tablo, view sequence, index için detay bilgi
 \dv                     View listesi
 \di                     Indeks listesi
 \dn                     Sema listesi
 \du                     Role/user listesi
 \dp                     Yetki (privileges) listesi
 \password KULLANICI     Kullanıcı parolasını değiştirir
 \q                      Çıkış

Veri Yükleme Yedekleme

$ psql -W -U kullanici  -H sunucuadi < dosya.sql  
$ pg_dump -W -U kullanici -h sunucuadi veritabani_adi > dosya.sql 
$ pg_dump --kullanici=kullanici-adi --file=yedek-dosya-adi veritabaniadi 
$ psql -U kullanici-adi veritabaniadi < yedek-dosya-adi 
$ pg_basebackup -U kullanici-adi -x -D /yedekleme-klasoru/

Kaynaklar :

Tübitak Bilgem YTE Tanıtım Kitapçığı https://yte.bilgem.tubitak.gov.tr/tr/haber/acik-kaynak-kodlu-veritabani-postgresql-tanitim-kitapcigi-hazirlandi