POSTGRESQL Veritaban Sunucusu Devrim GNDZ devrimgunduz org TR
POSTGRESQL Veritabanı Sunucusu Devrim GÜNDÜZ devrim@gunduz. org TR. NET Sistem Destek Uzmanı http: //seminer. linux. org. tr http: //www. linux. org. tr/belgeler. php http: //www. gunduz. org/seminer/pg Bu sunu, herhangi bir izne gerek olmadan istenilen şekilde kullanılabilir. (Kopyalama hakkı en-gel-le-ne mez! : -) ) 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
LKD Seminerleri • Seminer programı, seminer notları ve ayrıntılı bilgiler için; http: //seminer. linux. org. tr adresini ziyaret edebilirsiniz. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
GİRİŞ • 1. 2. 3. 4. 5. Bu sunuda aşağıdaki konular anlatılacaktır: Postgre. SQL’ in tanıtımı Neden Postgre. SQL? Teknik açıdan Postgre. SQL mimarisi Postgre. SQL sınırlamaları 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
GİRİŞ • Bu sunuda aşağıdaki konular anlatılacaktır: 7. Postgre. SQL kurulumu 8. Postgre. SQL veritabanı araçları 9. Postgre. SQL veritabanının güvenliği 10. Veritabanı hakkında ek bilgiler 11. PHP Postgre. SQL Fonksiyonları 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL nedir? Postgre. SQL, veritabanları için relational modeli kullanan ve SQL standart sorgu dilini destekleyen bir veritabanı yönetim sistemidir. • Postgre. SQL aynı zamanda iyi performans veren, güvenli ve geniş özellikleri olan bir DBMS’tir. Hemen hemen tüm UNIX ya da Unix türevi (Linux, Free. BSD gibi) işletim sistemlerinde çalışır. Ayrıca NT çekirdekli tüm Windows sistemlerde de çalıştırılabilir. Tabii ki ücretsiz ve açık kodludur. Kaynak: http: //www. postgresql. org • 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Kimler kullanıyor? • • • Türkiye’deki belli başlı üniversiteler Maden Tetkik ve Arama Ens. , Şeker Fabrikaları www. begendim. com. info ve. org alan adları (www. afilias. com) http: //www. sciencetunnel. com Cisco BASF Red Hat Chrysler 3 Com USDA, FDA, ve University of California . . 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL’ in tarihi • • Postgre. SQL’in geçmişi 1977’de Kaliforniya’ daki Berkeley Üniversitesinde (UCB) yapılan çalışmalara dayanır. UCB’de 1977 -1985 yılları arasında Ingres adı verilen relational veritabanı geliştirildi. Ingres kodu Relational Technologies/Ingres Corporation tarafından satın alındı ve ilk ticari relational veritabanlarından biri oldu. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL’ in tarihi • Berkeley’deki ilişkisel veritabanı sunucusu üzerindeki çalışmalar 1986 – 1994 arasında devam etti ve bu veritabanı Postgres adını aldı. Bu kod ise Illustra tarafından satın alındı ve Informix olarak geliştirilmeye başlandı. • 1994’te SQL özellikleri Postgres’e eklendi ve bu veritabanı Postgres 95 adını aldı. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL’ in tarihi • • 1996 yılında Postgres tanınmaya başlandı ve kod geliştirmesi için e-posta listesi açılmasından sonra bir çok gönüllü Postgres’i geliştirmek için çalışmaya başladı. Bu aşamadan sonra Postgres son kez adını değiştirdi ve adındaki “ 95” ekinin yerine daha uygun olan SQL konmasına karar verildi. Bunun nedeni Postgres’in artık SQL standartlarını desteklemesiydi. Böylece Postgre. SQL doğdu. Şu andaki sürümü 7. 3. 1’tir ve Aralık 2003'te çıkarılmıştır. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Neden Postgre. SQL? • Postgre. SQL şirketiniz ve işiniz için diğer veritabanı sistemlerinden üstün olarak aşağıdaki özellikleri sunar: • Postgre. SQL ile, kimse sizi lisans anlaşmalarını kırmanız durumunda, bu yazılım için lisans maliyeti olmadığı için dava edemez. • Patentli veritabanı satıcılarından daha iyi destek. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Neden Postgre. SQL? • Bu, bazı ek avantajları da beraberinde getirir: • Geniş-ölçeklenebilir yayılma ile daha karlı iş modelleri • Herhangi bir aşamada lisansınıza itiraz edilme olasılığının olmaması • Ek lisanslama maliyetleri olmadan genel araştırmalar ve denemeler yapabilme esnekliliği. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Neden Postgre. SQL? • Postgre. SQL, güçlü destek imkanlarına ek olarak, çalışanlarınızın katkıda bulunabileceği profesyonellerden ve renkli kişiliklerden oluşan bir takıma sahiptir. • Personel giderlerinde çok ciddi tasarruf imkanı • Yazılımımız, diğer önde gelen patentli veritabanlarına göre daha az ayar ve bakım gerektirme gereksinimleri için tasarlanmış ve yaratılmıştır. Bununla beraber, özelliklerinden, kararlılığından ve başarımından hiçbirşey kaybetmemiştir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Neden Postgre. SQL? • Buna ek olarak, eğitim programlarımız diğer patentli veritabanı üreticilerine göre maliyet etkin ve pratik olarak gösterilmektedir. • Çoğu patentli veritabanının aksine, firmalar Postgre. SQL' in uzun yıllar boyunca yüksek aktiviteli işlerde hiç bir zaman göçmediğini belirtmektedirler. Bir kez bile değil. Postgre. SQL sadece çalışır. • Efsanevi güvenilirlik ve kararlılık 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Neden Postgre. SQL? • Kaynak kodu herhangi bir ücret ödenmeden alınabilir. Eğer personeliniz Postgre. SQL'i herhangi bir şekilde geliştirmek ya da özelleştirmek isterlerse bunu herhangi bir ek ücret ödemeden minimum çaba ile yapabilirler. • Bu, Postgre. SQL' in her gün dünyanın her bir tarafından gelen destekle büyümesini sağlamaktadır. • Çoklu platformda çalışma özelliği 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Neden Postgre. SQL? • • • Postgre. SQL hemen tüm Unix türevi (son kararlı sürüm ile birlikte 34) üzerinde çalışabilmektedir. Aynı zamanda, doğal Windows uyumluluğu Postgre. SQL 7. 4 sürümü ile birlikte gelecektir. Yüksek hacimli işlemler için tasarlanmıştır. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Neden Postgre. SQL? • Postgre. SQL' in yüksek hacimli ortamlarda gereksinimleri karşılayabilmesi için MVCC adı verdiğimiz çoklu satır veri saklama stratejisini kullanıyoruz. • Önde gelen patentli veritabanı üreticileri de çeşitli nedenlerle bu teknolojiyi kullanmaktadırlar. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Neden Postgre. SQL? • Grafik tabanlı veritabanı tasarım ve yönetim araçları • Veritabanını yönetmek için • pg. Admin • pg. Access • Veritabanı yaratmak için • Tora • Çok sayıda yüksek kalitede grafik arayüzlü araçları vardır. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Teknik açıdan Postgre. SQL • Bazı teknik özellikler açısından, Postgre. SQL şunları sunar: • • %100 ACID uyumlu ANSI SQL uyumlu Referential Integrity Replikasyon (ticari ve ticari olmayan çözümler) ana veritabanının (master) çok sayıda başka veritabanlarına (slave) çoklanmasını sağlar. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Teknik açıdan Postgre. SQL • • ODBC, JDBC, C, C++, PHP, Perl, TCL, ECPG, Python, and Ruby için doğal arabirimler. Rules Views Triggers Sequences Inheritance Outer-Joins 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Teknik açıdan Postgre. SQL • • Stored Procedures Kod geliştiriciler işin açık API Doğal SSL Desteği UNION, UNION ALL ve EXCEPT sorgularına destek Doğal Kerberos Yetkilendirmesi Fonksiyonel ve Partial Indexler Procedural Diller 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Teknik açıdan Postgre. SQL • MD 5, SHA 1, XML ve diğer işlevsel özelliklerin yüklenebilmesi. • Diğer SQL-uyumlu sistemlerle paylaşabilmek için taşınabilir SQL yaratan araçlar. • Özelleştirilmiş, kullanıcı-tanımlı veri tipleri için geliştirilebilir veri tipi sistemi ve hızla gelişen yeni veri tipleri. • Daha az SQL-uyumlu RDBMS'lerden geçişi kolaylaştıran cross-database uyumluluk fonksiyonları 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Neden Postgre. SQL? • Birden fazla işlemcide rahatlıkla çalışabiliyor. • Çok kullanıcılı sistemlerde daha hızlı erişim sağlar. • Son derece güvenli bir altyapıda çalışır (Linux çekirdeği) • ODBC desteği ile MS ürünleri ile veri aktarımı yapabilir. • Ticari bir veritabanı olmadığı için, hızdan ziyade güvenliğe önem veriyor. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Desteklenen Platformlar • • Linux (Kernel 2. 0. X ve üzeri) AIX 4. 3. 2 HP – UX 9. 0 x ve 10. 20 Free. BSD 4. X IRIX 6. 5. 6 f Mac. OS-X Darwin Net. BSD 1. 4, 1. 4 u • • 15 Ocak 2003 Malatya İnönü Üniversitesi QNX 4. 25 SCO Open. Server 5 SCO Unix Ware 7 Solaris 2. 5. 1 -2. 7 Sun OS 4. 1. 14 Win. NT/Cygwin BSDI 4. 0. 1 Be. OS 5. 0. 3 Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL’ in mimarisi • • Postgre. SQL’in gücü, onun mimarisinden gelir. Ticari veritabanı sistemleri ile ortak olarak Postgre. SQL sunucu-istemci ortamında kullanılabilir. Bu hem kullanıcılar hem de geliştiriciler açısında oldukça fazla yarar sağlar. Postgre. SQL kurulumunun kalbi veritabanı sunucu işlemidir (process). • Postmaster olarak adlandırılır. Tek bir sunucu üzerinde çalışabilir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL’ in mimarisi • Veritabanındaki bilgilere erişebilecek programlar sunucu tarafında çalışır. İstemci tarafındaki programlar, sunucu ile aynı makinede olsalar bile veriye direk olarak erişemezler. • İstemci – sunucu mimarisi, uygulamaların ayrı makinelerde çalışmasına izin verir. İstemcilerimizi sunucudan ayırmak için bir ağ kurabilir, ve istemci uygulamalarınızı geliştirmek için kullanıcılara uygun bir ortam kullanabilirsiniz. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL’ in mimarisi • • • İstemci-sunucu mimarisi iş gücünün bölünmesine yardımcı olur. Büyük miktarda veriyi tutabilecek ve erişilebilecek şekilde düzenlenmiş bir sunucu makinesi güvenli bir veri deposu olarak kullanılabilir. Gelişmiş grafiksel uygulamalar istemciler için geliştirilebilir. Web tabanlı uygulamalar da istemci tarafındaki işlemlerinizi görebilir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL’ in mimarisi 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL Sınırlamaları • • Tablolara eklenen veriler büyüyünce, veritabanlarını kontrol etmek zorlaşır ve veritabanlarının başarımı düşer. Burada Postgre. SQL’in bir farkı yoktur. En fazla büyüklük, disk alanı ve sanal bellekle sınırlıdır. Sınıra yaklaşıldığında, veritabanı yavaşlamaya başlar. Sanal belleği bile aşacak bir işlem yapıldığında, Postgre. SQL’in başarımı fiziksel açıdan çok kötü olacaktır (ya da bir işlem olmayacaktır!). Burada bahsedilmeyen diğer sınırlamalar işletim sistemi ya da ağın veri iletme hızına bağlıdır. Örneğin, ODBC ile yapılan sorguların sürücüye bağlı olan sınırları vardır. Hafıza ile ilgili sınırlamalar da vardır (çok büyük bir sorgunun sonucu gibi) 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL Sınırlamaları • • Veritabanı için max büyüklük: Bir tablo için max büyüklük: Bir row için max büyüklük: Bir field için max büyüklük Tablo içindeki max row sayısı: Tablo içindeki max column sayısı: Tablo içindeki max index sayısı: • • Sınırsız 64 TB (Tüm işletim sistemlerinde) Sürüm 7. 1 ve sonrasında sınırsız Sürüm 7. 1 ve sonrasında 1 GB • Sınırsız 1600 • Sınırsız • Burada bahsedilen sınırlamalar, fiziksel sınırların haricindeki sınırlardır. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL Veri Tipleri • • • Postgre. SQL, Users’ Guide ve psql’deki d. T komutu ile de görülebileceği gibi oldukça fazla veri tipini destekler. Sadece SQL standardı değil, kendine özel başka veri tipleri de kullanır. Serial, inet, circle, polygon. . . 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL Kurulumunun Anatomisi • • • Uygulamalar (applications), Yardımcı programlar (utilities) Veri dizinlerinden (data directories) Ana Postgre. SQL uygulamaları (postmaster ve postgres) istemcilerden veri erişimini sağlayan servislerin sunucu tarafındaki kodunu içerirler. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL Kurulumunun Anatomisi • Tipik bir Postgre. SQL kurulumu tüm bu bileşenleri bulundurur. • /usr/local/pgsql – Kaynak Kod /var/lib/pgsql - rpm • 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL Kurulumunun Anatomisi Ana Postgre. SQL dizininin alt dizinleri de aşağıdaki gibidir: • • Bin Data Doc Lib Man Share include 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Kurulum - I (Red Hat Linux - RPM) • Postgre. SQL tüm Red Hat sürümleri ile birlikte gelmektedir ve Red Hat üzerinde kolayca kurulmaktadır. • “SQL Database Server” • Eğer elinizde Red. Hat’ın eski sürümü ya da başka bir Linux sürümü varsa, http: //advocacy. Postgre. SQL. com/download/? lang=tr adresinden 7. 3. 1 için gereken rpm paketlerini bulabilirsiniz. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Kurulum - II (Red. Hat Linux - RPM) • • • 1. Adım : Dosyalar Postgresql Ana paket postgresql-libs Library dosyaları, v 7. 1. 0 ve sonrasını kurarken önemlidir. postgresql-devel Development için gereken dosya ve kitaplıklar. postgresql-jdbc Postgre. SQL için Java database connectivity postgresql-odbc Postgre. SQL için Open database connectivity postgresql-perl Perl için Postgre. SQL arayüzü postgresql-python Python için Postgre. SQL arayüzü postgresql-server Bir sunucuyu yaratmak ve çalıştırmak için gerekli programlar 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Kaynak Koddan Postgre. SQL Kurulumu (Linux) • Eğer Windows, Unix kullanıyor, ya da kullandığınız Linıx dağıtımında rpm kullanamıyorsanız, Postgre. SQL’ i kaynak kodundan kurabilirsiniz. • Postgre. SQL’in kaynak kodunu http: //www. postgresql. org ya da herhangi bir yansısından indirebilirsiniz. • Ülkemizde ftp. gazi. edu. tr adresi Postgre. SQL’in resmi yansısıdır. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Kaynak Koddan Postgre. SQL Kurulumu (Linux) • Kaynak kodu derlemek için , Linux ya da Unix sisteminizde development için gereken uygulamaların kurulmuş olması gerekir. Bunlar C derleyicisini, make uygulamasını ve veritabanı yaratmak için gereken diğer uygulamaları kapsar. Linux dağıtımları genellikle Free Software Foundation' ın development ortamı için GNU uygulamaları ile gelir. Bunlar GNU C derleyicisi (gcc) 'yi içerir (Linux için standart derleyicidir). GNU uygulamaları tüm UNIX platformları için indirilebilir, ve Postgre. SQL kurulumları için de önerilir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL’i başlatma • • Postgre. SQL’i RPM den kurduğunuzda kaynak koddan kuruluma göre çoğu işlemi yapmanıza gerek kalmaz. İlk çalıştırma esnasında veritabanının initialize edilmesi gerekmektedir. Bu sırada ana tablo olan template 1 yaratılır, yapılandırma dosyaları ve veri alanı oluşturulur. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
postgresql. conf • Veritabanı sunucusunun yapılandırma dosyasıdır. Erişim hariç tüm işlemler bu dosya aracılığı ile yapılır. tcpip_socket = false max_connections = 800 # 1 -1024 port = 6879 sort_mem = 512 shared_buffers = 1600 # min 16 • postgresql. conf içinde yapılan her değişiklikten sonra bnu değişikliklerin geçerli olması için Postgre. SQL’in yeniden başlatılması gerekir (Sunucunuzun değil!!!) 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
pg_hba. conf dosyasının düzenlenmesi • Varsayılan değer olarak, Postgre. SQL uzaktan erişime izin vermez. • Bu dosya veritabanının dosya alanında (örneğimizde /usr/local/pgsql/data) bulunur ve veritabanına bağlanmak için uzaktan erişecek istemcilerle ilgili izin ya da red bilgilerini içerir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
pg_hba. conf dosyasının düzenlenmesi • • host all 192. 168. 0. 0 255. 0. 0 trust Bu satır, IP adresi 192. 168 ile başlayan herhangi bir bilgisayarın (host) tüm veritabanlarına (all) şifresiz olarak (trust) bağlanma izni verir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Veritabanı güvenliği • • Güvenlik nedeni ile sunucu işlemlerinini kesinlikle root olarak yapmamalısınız. Tüm işlemler postgres kullanıcısı kullanılarak yapılmalıdır. Olası bir sorunda, system dışından birisi root erişimi kazanabilir. Bu nedenle, postmaster root olarak çalıştırılamayacaktır. Güvenlik açısından root a (ya da id’si 0 olan başka kullanıcı varsa onlara) postgres izninin verilmemesi gerekir. Varsayılan olarak root başlangıçta postgres kullanıcısı değildir ve postmaster i başlatamaz. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Güvenlik: Veritabanına şifre koyma • • Postgre. SQL veritabanı sunucuna varsayılan erişim şifresizdir. Yani sunucu üzerindeki herkes –U parametresini postgres değeri ile birlikte geçirirse veritabanına erişim hakkı kazanır. Güvenliğin 3 aşaması vardır: • Kullanıcılar için şifre tanımlama • Veritabanına erişim için şifre sorgulamasını zorunlu hale getirme. • Tablo erişimlerini kısıtlama 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Güvenlik: Veritabanına şifre koyma • • Tablo erişimlerini kısıtlama, standart SQL komutları ile yapılır (GRANT, REVOKE) Postgre. SQL’de kolon bazlı erişim kontrolü mümkündür. Bunun için, erişilecek kolon(lar) üzerinde view yaratılıp izinler bu view üzerine verilmelidir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Güvenlik: Veritabanına şifre koyma • • Kullanıcılar için şifre tanımlama pg_passwd komutu ile yapılmaktadır. Buradaki kullanıcıların sistemdeki gerçek kullanıcı olmalarına gerek yoktur. Sanal bir kullanıcı ile güvenliği arttırabilirsiniz. Tablonun / veritabanının tüm haklarını o kullanıcıya da verebilirsiniz. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Güvenlik: Veritabanına şifre koyma • • Postgre. SQL’in bu şifreyi kullanması için pg_hba. conf dosyasına host all 127. 0. 0. 1 255 password passwdf satırı eklenmelidir. Postgre. SQL restart edilirse, bash-2. 04$ psql pgornek -p 5455 -U lkduser Password: . . . pgornek=# q 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL Programlama Arayüzleri • • C PHP Java Python Delphi Perl Tcl Tk 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL araçları - psql • Oracle’daki SQL*PLUS gibi Postgre. SQL’de psql adında command line aracı vardır. Postgre. SQL veritabanları genellikle bu uygulama tarafından yaratılır ve yönetilir. psql : psql [seçenekler] [veritabanı_adı [kullanıcı_adı]] biçiminde çalışır. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL araçları - psql • [postgres@localhost postgres] psql pgornek • Varsayılan veritabanı, kullanıcı adı, sunucu makine adı ve dinlenilen port numarası sırasıyla PGDATABASE, PGUSER, PGHOST ve PGPORT çevre değişkenlerinin ayarlanması ile değiştirilebilir. • Bu varsayılan değerler yine sırasıyla psql’e – d, -U, -h ve –p seçeneklerini geçirerek değiştirilebilir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL araçları - psql • psql' e Postgre. SQL’in desteklediği herhangi bir SQL komutunu verebilirsiniz. Desteklenen SQL komutlarının listesini h iç komutu ile görebiliriz. Özel olarak istenen bir komut varsa h sql_komutu ile de yardımı alabiliriz. ? iç bize tüm iç komut listesini verecektir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL araçları - psql İki çeşit komut biçimi vardır: İç (internal) komutlar ve SQL komutları. Bunların tam listesini http: //www. gunduz. org/belgeler. php adresinde bulabilirsiniz. • 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL araçları - psql • psql de komutlar birden fazla satırda yazılabilir. Böyle zamanlarda psql promptu ‑> şekline dönüşecek ve daha fazla girişin beklendiği belirtilecektir: [postgres@localhost postgres] /usr/local/pgsql/bin/psql pgornek. . . pgornek=> SELECT * pgornek-> FROM musteri pgornek->; . . . [postgres@localhost postgres] 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Görsel Araçlar – Pg. Admin. II • • • Windows ortamında çalışır. ODBC gerektirir. Oldukça geniş bir kullanıcı kitlesi bulunmaktadır. Ücretsizdir http: //pgadmin. Postgre. SQL. org 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Görsel Araçlar – Pg. Admin. II 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Görsel Araçlar – Pg Explorer • • • Windows ortamında çalışır. ODBC gerektirir. http: //www. pgexplorer. com 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Görsel Araçlar – php. Pg. Admin • • • Web arayüzlü olduğu için, çalıştırıldığı ortamdan bağımsızdır. postgres kullanıcısı ile veritabanınızı yönetebileceğiniz gibi belirli bir kullanıcı ile belirli bir veritabanını da yönetebilirsiniz. Her türlü kayıt ekleme, silme, değiştirme; veritabanı/tablo yaratma vb işlemlerini SQL bilmeden yapabilirsiniz. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Görsel Araçlar – PHPPg. Admin • • Veritabanının içeriğini bir dosyaya boşaltabilir, daha sonra bu içeriği başka bir sunucuda da kullanabilirsiniz. Bunların dışında Postgre. SQL’in SQL komutlarını çalıştırabilirsiniz. Türkçe dil desteği 2. 4. 2 sürümü ile gelmiştir. http: //phppgadmin. sourceforge. net adresinden ücretsiz olarak indirilebilir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
ÖNEMLİ NOT : Postgre. SQL’i k-e-s-i-n-l-i-k-l-e “kill – 9” ile durdurmayınız!!! 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL Veritabanı yaratma 1. Bir Postgre. SQL sunucusunda, yeni bir veritabanı yaratmanın iki yolu vardır: createdb komutu ile 2. $ /usr/local/pgsql/bin/createdb pgornek CREATE DATABASE psql arabirimi ve SQL yardımıyla: $ /usr/local/pgsql/bin/psql –d template 1=> CREATE DATABASE pgornek; CREATE DATABASE 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL’de tablo yaratma Tablo yaratma, veri girme, güncelleme, silme gibi işlemler bildik SQL komutları ile yapılır. Bu komutlar daha önce anlatıldığı gibi psql yardımıyla postmaster a iletilebilir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Postgre. SQL’i durdurma Postgre. SQL sunucu işlemini düzgün olarak durdurmak önemlidir. Bu yazılmayı bekleyen verinin veritabanına işlenmesini ve shared memory’de kullandığı kaynakları boşaltmasına yarar. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Vacuum • Güncellenmiş ve silinmiş satırlardan boşalan disk alanını kurtarmak • Postgre. SQL query planner tarafından kullanılan veri istatistiklerini güncellemek • Transaction ID sınırlarından kaynaklanan çok eski verilerin kaybolmasının engellenmesi • 7. 2 sürümü ve sonrasındaki değişiklikler 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Ek Bilgiler psql, initdb, createuser, createdb uygulamaları hakkında detaylı bilgiyi man sayfalarından alabilirsiniz. İşlemlerinizi kolaylaştırmak açısından Postgre. SQL uygulamalarının yollarını kabuğunuza tanıtmanız uygun olacaktır. Bunun için, standart UNIX/Linux kabuğunuzun başlangıç dosyasına (. profile ya da. bashrc) aşağıdaki satırları ekleyiniz: PATH=$PATH: /usr/local/pgsql/bin MANPATH=$MANPATH: /usr/local/pgsql/man export PATH MANPATH 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Ek Bilgiler • • Veritabanında açılan her bağlantıyla ilgili bilgiler shared memory de tutulur. Dolayısıyla shared memory’nin büyük olması bağlantıları daha iyi yönetilmesi demektir. Ara bellek (buffer) : Tablolardan okunan satırlar önce ara belleğe gelir. sonra kullanıcıya aktarılır; tam tersi de olur. Eğer boş RAM iniz varsa ara bellek ve shared memory ye dağıtabilirsiniz. Tablolar çok fazla hareket görüyorsa ara bellek değeri yüksek tutulmalıdır. Disk I/O oranı düşer; bu da oldukça fazla hız artışı sağlar. Genel olarak başarımda dikkat edilmesi gereken 3 unsur bulunmaktadır: • 15 Ocak 2003 Malatya İnönü Üniversitesi CPU , hafıza (RAM) ve Hard Disk. Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL • • • PHP, günümüzde çok fazla kullanılan, sunucu tarafında programlama amacıyla tasarlanmış bir dildir. Özellikle web üzerinde geliştirilen yazılımlarda kullanılır. PHP, özellikle 4. 2 sürümü ile birlikte, oldukça fazla Postgre. SQL fonksiyonu getirmiştir. http: //tr. php. net/manual/en/ref. pgsql. php 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL • PHP, öntanımlı olarak Postgre. SQL desteği ile gelmez. Bu desteği kendinizin vermesi gerekir. • • Kaynak kod RPM 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL • Kaynak koddan derlemede, configure betiğine --with-pgsql=/var/lib/pgsql (eski rpm kurulumları) --with-pgsql=/usr/local/pgsql (eski kaynak koddan kurulumlar) --with-pgsql=/usr (Postgre. SQL'in yeni sürümleri ve yeni PHP sürümleri) parametresi geçirilmelidir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL • Kaynak koddan derlemede, sisteminize daha önceden Postgre. SQL kurulu olmalıdır. Bu şekilde, derleme için gerekli kitaplıklar bulunabilecektir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL • RPM kurulumunda, php-pgsql paketinin kurulması yeterlidir. • rpm -ivh php-pgsql-<surum_no>-<işlemci mimarisi>. rpm • Örnek : rpm -ivh php-pgsql-4. 2. 2 -1. i 686. rpm 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL • RPM kurulumlarında, postgresql-devel paketinin sisteminize daha önceden kurulmuş olması gerekir. • Bazı dağıtımlarda, php. ini dosyasını edit etmek gerekebilir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP Postgre. SQL Fonksiyonları • pg_connect : Postgre. SQL bağlantısı açar: • $conn = pg_connect (“dbname=deneme”) • • $conn = pg_connect (“host= localhost dbname=deneme port=5432”); • • “deneme” veritabanına bağlantı. # “deneme” veritabanına “localhost” üzerinden “ 5432”. portu kullanarak bağlantı. TCP-IP portu açılmış olmalıdır. $conn = pg_connect (“host= lkd dbname=deneme port=5437 user=postgres password=himm”); • 15 Ocak 2003 Malatya İnönü Üniversitesi lkd adlı sunucudaki “deneme” adlı veritabanına “ 5432”. port üzerinden “postgres” kullanıcısı ve “himm” şifresi ile bağlantı. Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP Postgre. SQL Fonksiyonları • pg_close : Postgre. SQL bağlantısı kapatır: • • • Kullanımı : bool pg_close (int connection) Örnek: if (!@pg_close($conn)) { echo ”Hata oluştu!!!”; exit; } • $conn bağlantısını kapatır. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP Postgre. SQL Fonksiyonları • pg_query : Sorguyu işletir: • • Kullanımı : int pg_query (int connection, string query) • Postgre. SQL veritabanına SQL sorgusu gönderir. • Örnek: • $result = pg_query ($conn, $sorgu); • Eğer sorguyu işletemezse elde edilecek hata mesajını pg_Error. Message() komutunu kullanarak görebilirsiniz. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP Postgre. SQL Fonksiyonları • pg_affected_rows : Sorgu sonucu etkilenen satır sayısını verir : • • Kullanımı : int pg_affected_rows (int result_id) • Örnek: • $sonuc = pg_query($conn, $sorgu); if(!pg_affected_rows($sonuc)) { # Sorgu sonucu etkilenen satır sayısı echo "HATA : Veritabanına kayıt girilemedi. <BR>"; echo "<a href =“_URL">Geri</a><BR>"; $sonuc = pg_query($conn, "abort"); # transaction iptali $sonuc = pg_query($conn, "rollback"); pg_close($conn); exit; } 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP Postgre. SQL Fonksiyonları • <? php • $db = pg_connect ('dbname=foo'); • $data = array('field 1'=>'AA', 'field 2'=>'BB'); • // This is safe, since $_POST is converted automatically • $res = pg_update($db, 'post_log', $_POST, $data); • if ($res) { • echo "Data is updated: $resn"; • } • else { • echo "User must have sent wrong inputsn"; • } • ? > 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP Postgre. SQL Fonksiyonları • • pg_fetch_array pg_lo_create pg_lo_import/export pg_ping pg_delete pg_insert pg_select pg_last_error 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL Formdan veri alma • Önce formu hazırlayalım: <FORM ACTION = insert. php METHOD=POST> OPER ADI : <input type=text name=oper_adi><BR> OGRENCİ ADI : <input type=text name=kisi_adi> <BR> OGRENCI NO : <input type=text name=id_no><BR> KİMLİK TÜRÜ : <input type=text name=kimlik_turu><BR> LAB : <input type=text name=lab><BR> <input type=submit value = Gönder> <input type=reset value= Temizle> </FORM> 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL --Veri Girme <? php // Veritabanına bağlantı if (!$conn = @pg_connect("host=localhost dbname=deneme port=5432 user=postgres password=sifrem")) { die (“Veri tabanına bağlantı kurulamadı”); 0 // Degerler $tarih = (date ("d-M-Y H: i: s")); $sorgu = "insert into kayip_kimlik (oper_adi, kisi_adi, id_no, kimlik_turu, tarih, lab) values ('$oper_adi', '$kisi_adi', '$id_no', '$kimlik_turu', '$tarih', '$lab')"; 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL --Veri Girme • $result = pg_query("begin"); # transaction başlangıcı $sonuc = pg_query ($conn, $sorgu); if(!$sonuc) { echo "HATA : Veri veritabanına girilemedi!!!<BR>"; echo "<a href ="form. html">Geri</a><BR>"; $sonuc = pg_query($conn, "abort"); # transaction iptali $sonuc = pg_query($conn, "rollback"); pg_close($conn); exit; } } 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL --Veri Girme if(!pg_affected_rows($sonuc)) { # Sorgu sonucu etkilenen satır sayısı echo "HATA : Veritabanına değer girilemedi!!!<BR>"; echo "<a href ="form. html">Geri</a><BR>"; $sonuc = pg_query($conn, "abort"); # transaction iptali $sonuc = pg_query($conn, "rollback"); pg_close($conn); exit; } $result = pg_query("commit"); # transaction'ın işletiliyor $result = pg_query("end"); # transaction tamamlandı echo "Ok. Kayıt Girildi. "; exit; ? > 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL • • İf (!sonuc. . ) Hata verirse SQL sorgusunun yazımında hata var demektir. İf (!pg_affected_rows($sonuc)) Hata verirse sorgudaki değerlerin en az birinde hata var demektir. 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL --Veri Sorgulama • <? PHP // Veritabanına bağlantı . . . $sorgu = "select * from kayip_kimlik order by oper_adi"; $sonuc = pg_query($conn, $sorgu); if (pg_num_rows($sonuc)=='0') {die "Veritabaninda kayit yok. . . "; } 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
PHP ve Postgre. SQL --Veri Sorgulama • for ($i = 0; $i < pg_numrows($sonuc); $i++) { $satir = pg_fetch_row($sonuc, $i); $oper_adi = Strip. Slashes(trim($satir[0])); $kisi_adi = Strip. Slashes(trim($satir[1])); $id_no = Strip. Slashes(trim($satir[2])); $kimlik_turu = Strip. Slashes(trim($satir[3])); $tarih = Strip. Slashes(trim($satir[4])); $lab = Strip. Slashes(trim($satir[5])); $k = $i+1; //veritabanindaki kayit no echo "KAYIT NO : $k<BR>"; echo "Oper Adı : $oper_adi<BR>"; echo "Ogrenci adi : $kisi_adi <BR>"; echo "Ogrenci no : $id_no <BR>"; echo "Kimlik Türü : $kimlik_turu <BR>"; echo "Tarih : $tarih <BR>"; echo "Lab : $lab <BR>"; echo "<HR>"; 15 Ocak 2003 Malatya İnönü Üniversitesi } Linux Kullanıcıları Derneği Düzenli Seminerleri
Kaynaklar • • • http: //www. Postgre. SQL. org http: //advocacy. Postgre. SQL. org http: //techdocs. Postgre. SQL. org http: //odbc. Postgre. SQL. org http: //www. Postgre. SQL. org/idocs http: //developer. Postgre. SQL. org 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
Kaynaklar • • http: //www. pgsql. com/ http: //foundries. sourceforge. net/databases http: //gborg. Postgre. SQL. org www. wrox. com - Beginning Databases with Postgre. SQL, 2001 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
E-Posta Listeleri linux-programlama@linux. org. tr 1. 2. 1. (üye olmak için, http: //liste. linux. org. tr web arayüzünü kullanabilirsiniz. ) pgsql-tr-genel@postgresql. org 1. • Veritabanları için tartışma listesi (Postgre. SQL Türkiye E-Posta Listesi. Postgre. SQL üzerinde her türlü konuşulabilmektedir. ) www. ca. Postgre. SQL. org adresinden ulaşabileceğiniz tüm e-posta listeleri 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
POSTGRESQL Veritabanı Sunucusu Devrim GÜNDÜZ devrim@gunduz. org TR. NET Sistem Destek Uzmanı http: //seminer. linux. org. tr http: //www. linux. org. tr/belgeler. php http: //www. gunduz. org/seminer/pg Bu sunu, herhangi bir izne gerek olmadan istenilen şekilde kullanılabilir. (Kopyalama hakkı en-gel-le-ne mez! : -) ) 15 Ocak 2003 Malatya İnönü Üniversitesi Linux Kullanıcıları Derneği Düzenli Seminerleri
- Slides: 87