mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			898 lines
		
	
	
		
			47 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			898 lines
		
	
	
		
			47 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| PostgreSQL için Sıkça Sorulan Sorular (SSS)
 | ||
| 
 | ||
| Son güncelleme : 15 Kasım 2004 Pazartesi - 14:47:20
 | ||
| 
 | ||
| Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
 | ||
| 
 | ||
| Çevirenler : Devrim Gündüz (devrim@tdmsoft.com)
 | ||
| Nicolai Tufar (ntufar@tdmsoft.com)
 | ||
| Volkan YAZICI (volkany@phreaker.net)
 | ||
| 
 | ||
| Bu belgenin en güncel hali, http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html ve 
 | ||
| http://www.gunduz.org/seminer/pg/FAQ_turkish.html adreslerinde görülebilir.
 | ||
| 
 | ||
| Platforma özel sorularınız, http://www.PostgreSQL.org/docs/index.html adresinde yanıtlanır.
 | ||
| Genel Sorular
 | ||
| 1.1) PostgreSQL nedir? Nasıl okunur?
 | ||
| 1.2) PostgreSQL'in hakları nedir?
 | ||
| 1.3) PostgreSQL, hangi Unix platformlarında çalışır?
 | ||
| 1.4) Hangi Unix olmayan uyarlamaları bulunmaktadır?
 | ||
| 1.5) PostgreSQL'i nereden indirebilirim?
 | ||
| 1.6) Desteği nereden alabilirim?
 | ||
| 1.7) En son sürümü nedir?
 | ||
| 1.8) Hangi belgelere ulaşabilirim?
 | ||
| 1.9) Bilinen hatalar ya da eksik özelliklere nereden ulasabilirim?
 | ||
| 1.10) Nasıl SQL öğrenebilirim?
 | ||
| 1.11) PostgreSQL 2000 yılına uyumlu mudur?
 | ||
| 1.12) Geliştirme takımına nasıl katılabilirim??
 | ||
| 1.13) Bir hata raporunu nasıl gönderebilirim?
 | ||
| 1.14) PostgreSQL, diğer VTYS(DBMS) lerle nasıl karşılaştırılabilir?
 | ||
| 1.15) PostgreSQL'e maddi açıdan nasıl destek olabilirim?
 | ||
| Kullanıcı/istemci Soruları
 | ||
| 2.1) PostgreSQL için ODBC sürücüleri var mı?
 | ||
| 2.2) PostgreSQL'i web sayfalarında kullanabilmek için hangi araçlar bulunmaktadır?
 | ||
| 2.3) PostgreSQL'in grafik kullanıcı arabirimi var mıdır?
 | ||
| 2.4) PostgreSQL ile iletişimi kurabilmek için hangi dilleri kullanabilirim?
 | ||
| Yönetimsel Sorular
 | ||
| 3.1) PostgreSQL'i /usr/local/pgsql dizininden başka dizinlere nasıl kurabilirim?
 | ||
| 3.2) Postmaster'ı başlattığımda Bad System Call ya da core dumped mesajı alıyorum. Neden?
 | ||
| 3.3) Postmaster'ı başlattığımda, IpcMemoryCreate hatası alıyorum. Neden?
 | ||
| 3.4) Postmaster'ı, başlattığımda, IpcSemaphoreCreate hatası alıyorum. Neden?
 | ||
| 3.5) Diğer bilgisayarların benim PostgreSQL veritabanı sunucuma bağlantılarını nasıl kontrol edebilirim?
 | ||
| 3.6) Veritabanı motorunu daha iyi başarım icin nasıl ayarlayabilirim?
 | ||
| 3.7) Hangi hata ayıklama özellikleri bulunmaktadır?
 | ||
| 3.8) Bağlanmaya çalışırken, neden "Sorry, too many clients" hatasını alıyorum. Neden?
 | ||
| 3.9) pgsql_tmpdizinin içindeki dosyalar nelerdir?
 | ||
| 3.10) PostgreSQL sürümlerini yükseltmek için neden bir dump/reload işlemi gerçekleştirmek zorundayım?
 | ||
| 3.11) Nasıl bir donanım kullanmalıyım?br>
 | ||
| İşletimsel Sorular
 | ||
| 4.1) Binary cursor ve normal cursor arasındaki fark nedır?
 | ||
| 4.2) Sorgunun sadece ilk birkaç satırını nasıl SELECT edebilirim?
 | ||
| 4.3) psql'in içinde gördügüm tabloların ya da diğer şeylerin listesini nasıl alabilirim?
 | ||
| 4.4) Bir tablodan bir kolonu nasıl kaldırabilirim?
 | ||
| 4.5) Bir satır, tablo ve veritabanı için en fazla büyüklük nedir?
 | ||
| 4.6) Tipik bir metin dosyasındaki veriyi saklamak için ne kadar disk alanı gereklidir?
 | ||
| 4.7) Veritabanında hangi tablo ya da index'lerin tanımlandığını nasıl görebilirim?
 | ||
| 4.8) Sorgularım cok yavaş, ya da index'lerimi kullanmıyorlar. Neden?
 | ||
| 4.9) Query-optimizer'ın sorgularımı nasıl değerlendirdiğini, işleme soktuğunu nasıl görebilirim?
 | ||
| 4.10) R-tree index nedir?
 | ||
| 4.11) Genetic Query Optimizer nedir?
 | ||
| 4.12) Düzenli ifade (Regular Expression) aramalarını ve büyük/küçük harfe duyarsız aramaları nasıl yapabilirim? Bu 
 | ||
| büyük/küçük harfe duyarlı aramalar için index'i nasıl kullanabilirim?
 | ||
| 4.13) Bir sorguda, bir alanın NULL olduğunu nasıl ortaya çıkarabilirim?
 | ||
| 4.14) Çesitli karakter tipleri arasındaki farklar nelerdir?
 | ||
| 4.15.1) Nasıl serial/otomatik artan (auto-incrementing) bir alan yaratabilirim?
 | ||
| 4.15.2) Serial girişinin değerini nasıl alabilirim?
 | ||
| 4.15.3) currval() ve nextval() diğer kullanıcılara sorun yaratmaz mı?
 | ||
| 4.15.4) Neden sequence sayıların transaction işleminin iptalinden sonra yeniden kullanılıyor? Neden sequence/SERIAL 
 | ||
| kolonumdaki sayılarda atlamalar oluyor?
 | ||
| 4.16) OID nedir? TID nedir?
 | ||
| 4.17) PostgreSQL' de kullanılan bazı terimlerin anlamları nelerdir?
 | ||
| 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasını alıyorum?
 | ||
| 4.19) Hangi PostgreSQL sürümünü çalıstırdığımı nasıl görebilirim?
 | ||
| 4.20) Neden large-object işlemlerim, "invalid large obj descriptor" hatasını veriyor?
 | ||
| 4.21) Şu andaki zamanı öntanımlı değer olarak kabul eden kolonu nasıl yaratırım?
 | ||
| 4.22) Neden IN kullanan subquery'lerim çok yavaş?
 | ||
| 4.23) Outer join işlemini nasıl yapabilirim?
 | ||
| 4.24) Aynı anda birden fazla veritabanında nasıl işlem yapabilirim?
 | ||
| 4.25) Bir fonksiyondan nasıl çoklu satır ya da kolon döndürebilirim?
 | ||
| 4.26) Neden Pl/PgSQL fonksiyonları içinden güvenli bir şekilde tablo yaratma/kaldırma işlemlerini yapamıyoruz?
 | ||
| 4.27) Hangi şifreleme seçenekleri bulunmaktadır?
 | ||
| PostgreSQL Özelliklerini Genişletmek
 | ||
| 5.1) Kullanıcı-tanımlı bir fonksiyon yazdım. psql'de çalıştırdığım zaman neden core dump ediyor?
 | ||
| 5.2) PostgreSQL'e nasıl yeni veri tipleri/fonksiyonlar ekleyebilirim?
 | ||
| 5.3) Bir tuple döndürmek için bir C fonksiyonunu nasıl yazarım?
 | ||
| 5.4) Bir kaynak dosyasında değişiklik yaptım. Yeniden derlememe rağmen değişiklik geçerli olmuyor. Neden?
 | ||
| Genel Sorular
 | ||
| 1.1) PostgreSQL nedir? Nasıl okunur?
 | ||
| 
 | ||
| PostgreSQL, Post-Gres-Q-L. olarak okunur
 | ||
| 
 | ||
| PostgreSQL, yeni-nesil VTYS araştırma prototipi olan POSTGRES veritabanı yönetim sisteminin geliştirilmesidir. 
 | ||
| POSTGRES'in zengin veri tiplerini ve güçlü veri modelini tutarken, SQL'in geliştirilmiş alt kümesi olan PostQuel dilini 
 | ||
| kullanır. PostgreSQL ücretsizdir ve kaynak kodu açık dağıtılır.
 | ||
| 
 | ||
| PostgreSQL, PostgreSQL geliştirme listesine üye olan bir Internet geliştirici takımı tarafından geliştirilir. Şu andaki 
 | ||
| koordinatör, Marc G. Fournier (scrappy@PostgreSQL.org). (Bu takıma nasıl katılacagınızı öğrenmek için 1.6 numaralı 
 | ||
| maddeyi okuyunuz.) Bu takım, tüm PostgreSQL gelişiminden sorumludur.
 | ||
| 
 | ||
| PostgreSQL 1.01 sürümünün yazarları Andrew Yu ve Jolly Chen idi. Bunların dışında bir kaç kisi de uyarlama, hata 
 | ||
| ayıklama ve kodun geliştirilmesi için çalısmıştı. PostgreSQL'in türediği orijinal Postgres kodu, lisans, lisansüstü ve 
 | ||
| akademisyenler tarafından, Professor Michael Stonebraker (University of California, Berkeley) koordinatörlügünde 
 | ||
| yazılmıştır.
 | ||
| 
 | ||
| Berkley'deki yazılımın adı Postgres idi. SQL uyumluluğu 1995'te eklenince, adı Postgres 95 oldu. 1996 yılının 
 | ||
| sonlarında adı PostgreSQL olarak değiştirildi.
 | ||
| 1.2) PostgreSQL'in hakları nedir?
 | ||
| 
 | ||
| PostgreSQL Data Base Management System
 | ||
| 
 | ||
| Portions copyright (c) 1996-2002, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the 
 | ||
| University of California
 | ||
| 
 | ||
| Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and 
 | ||
| without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the 
 | ||
| following two paragraphs appear in all copies.
 | ||
| 
 | ||
| IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR 
 | ||
| CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF 
 | ||
| THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | ||
| 
 | ||
| THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
 | ||
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" 
 | ||
| BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR 
 | ||
| MODIFICATIONS.
 | ||
| 
 | ||
| Üstteki metin klasik açık-kod lisansı olan BSD lisansıdır. Kaynak kodun nasıl kullanılabileceğine dair sınırlamaları 
 | ||
| yoktur. Bu lisansı seviyoruz. Değiştirme niyetimiz bulunmamaktadır.
 | ||
| 1.3) PostgreSQL, hangi Unix platforlarında çalışır?
 | ||
| 
 | ||
| Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i çalıştıracaktır. Ayrıntılı bilgi için kurulum belgelerine 
 | ||
| bakabilirsiniz.
 | ||
| 1.4) Hangi Unix olmayan uyarlamaları bulunmaktadır?
 | ||
| 
 | ||
| PostgreSQL 8.0 sürümü ile , PostgreSQL artık Win2000, WinXP ve Win2003 gibi Microsoft Windows NT tabanlı işletim 
 | ||
| sistemlerinde doğal olarak çalışmaya başlamıştır. Paketlenmiş bir  kurulum programı, http://pgfoundry.org/projects/pginstaller
 | ||
| adresinden indirilebilir.
 | ||
| 
 | ||
| Ayrıca, http://forge.novell.com adresinde Novell Netware 6 portu bulunmaktadır.
 | ||
| 1.5) PostgreSQL'i nereden indirebilirim?
 | ||
| 
 | ||
| PostgreSQL için ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub adresidir. Yansılar için, ana web sayfamıza 
 | ||
| bakabilirsiniz.
 | ||
| 1.6) Nereden destek alabilirim?
 | ||
| 
 | ||
| Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL konusundaki tartışmalara açıktır. Üye olmak için, 
 | ||
| aşağıdaki satırları e-postanızın body kısmına (konu kısmına değil) yazıp, pgsql-general-request@PostgreSQL.org adresine 
 | ||
| gönderin:
 | ||
| 
 | ||
| subscribe
 | ||
| end
 | ||
| 
 | ||
| Aynı zamanda, bir digest listesi bulunmaktadır. Bu listeye üye olmak için, pgsql-general-digest-request@PostgreSQL.org 
 | ||
| adresine, body kısmında
 | ||
| 
 | ||
| subscribe
 | ||
| end
 | ||
| 
 | ||
| yazan bir e-posta atmanız yeterli olacaktır.
 | ||
| 
 | ||
| Digest postalar, ana liste 30k civarında e-postaya ulaştığında üyelere gönderilmektedir.
 | ||
| 
 | ||
| Bug'lar için bir e-posta listesi bulunmaktadır. Bu listeye üye olmak için, pgsql-bugs-request@PostgreSQL.org adresine, 
 | ||
| body kısmında
 | ||
| 
 | ||
| subscribe
 | ||
| end
 | ||
| 
 | ||
| yazan bir e-posta atmanız yeterli olacaktır.
 | ||
| 
 | ||
| Aynı zamanda, geliştiriciler için tartışma listesi bulunmaktadır. Bu listeye üye olmak için, 
 | ||
| pgsql-hackers-request@PostgreSQL.org adresine, body kısmında
 | ||
| 
 | ||
| subscribe
 | ||
| end
 | ||
| 
 | ||
| yazan bir e-posta atmanız yeterli olacaktır.
 | ||
| 
 | ||
| Bunun dışındaki e-posta listelerine ve PostgreSQL hakkında bilgiye, PostgreSQL WWW ana sayfasından ulasabilirsiniz: 
 | ||
| http://www.PostgreSQL.org
 | ||
| 
 | ||
| Aynı zamanda, EFNet üzerinde, #PostgreSQL adlı bir IRC kanalı bulunmaktadır. Bunun için, irc -c '#PostgreSQL' "$USER" 
 | ||
| irc.phoenix.net Unix komutunu kullanabilirsiniz.
 | ||
| 
 | ||
| Ticari destek veren firmaların listesine
 | ||
| 
 | ||
| http://www.postgresql.org/users-lounge/commercial-support.html
 | ||
| 
 | ||
| adresinden ulaşbilirsiniz.
 | ||
| 1.7) En son sürüm nedir?
 | ||
| 
 | ||
| PostgreSQL'in son sürümü 7.4.6'dır.
 | ||
| 
 | ||
| Her 6-8 ayda ana sürüm çıkarılması planlanmaktadır.
 | ||
| 1.8) Hangi belgelere ulaşabilirim?
 | ||
| 
 | ||
| Dağıtımın içinde, kitapçıklar, kitapçık sayfaları ve bazı küçük örnekler verilmektedir. /doc dizinine bakınız. Ayrıca, 
 | ||
| bu el kitapçıklarını online olarak http://www.PostgreSQL.org/docs/ adresinden inceleyebilirsiniz.
 | ||
| 
 | ||
| http://www.PostgreSQL.org/docs/awbook.html ve http://www.commandprompt.com/ppbook adreslerinde PostgreSQL kitapları 
 | ||
| bulunmaktadır. PostgreSQL kitablarının listesine, http://www.ca.PostgreSQL.org/books/ adresinden ulaşaiblirsiniz. 
 | ||
| Ayrıca, PostgreSQL konusundaki teknik makalelere de http://techdocs.PostgreSQL.org/ adresinden ulaşabilirsiniz.
 | ||
| 
 | ||
| psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar, aggregate'ler, vb. ile ilgili güzel komutları vardır.
 | ||
| 
 | ||
| Web sitemiz daha fazla belgeyi içermektedir.
 | ||
| 1.9) Bilinen hatalar ya da eksik özelliklere nereden ulaşabilirim?
 | ||
| 
 | ||
| PostgreSQL SQL-92 uyumluluğu içindedir, standartlardan fazla da özellikleri bulunmaktadır. Bilinen hatalar, eksik 
 | ||
| özellikler ve gelecek ile ilgili planlar için TODO listesine bakınız.
 | ||
| 1.10) Nasıl SQL öğrenebilirim?
 | ||
| 
 | ||
| http:/www.PostgreSQL.org/docs/awbook.html adresindeki kitap SQL ögretecektir. http://www.commandprompt.com/ppbook 
 | ||
| adresinde de bir baska PostgreSQL kitabı bulunmaktadır.
 | ||
| 
 | ||
| http://www.intermedia.net/support/sql/sqltut.shtm, 
 | ||
| http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM http://sqlcourse.com ve http://sqlcourse2.com 
 | ||
| adreslerinde de güzel belgeler bulunmaktadır.
 | ||
| 
 | ||
| Bir başkası da, http://members.tripod.com/er4ebus/sql/index.htm adresinde bulunan "Teach Yourself SQL in 21 Days, 
 | ||
| Second Edition" kitabıdır.
 | ||
| 
 | ||
| Bazı kullanıcılarımız da şu kitabı önermektedirler: "The Practical SQL Handbook, Bowman, Judith S., et 
 | ||
| al.,Addison-Wesley". Bazıları ise "The Complete Reference SQL, Groff et al., McGraw-Hill" kitabını önermektedirler.
 | ||
| 1.11) PostgreSQL 2000 yılına uyumlu mudur?
 | ||
| 
 | ||
| Evet.
 | ||
| 1.12) Geliştirme takımına nasıl katılabilirim?
 | ||
| 
 | ||
| Öncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da dağıtımın içindeki PostgreSQL Developer belgesini 
 | ||
| okuyun. Ardından, pgsql-hackers ve pgsql-patches listelerine üye olun. Üçüncü olarak da, pgsql-pacthes listesine yüksek 
 | ||
| kalitede yamalar gönderin.
 | ||
| 
 | ||
| PostgreSQL CVS arşivine erişim izni olan, 10 kadar geliştirici bulunmaktadır. Hepsi defalarca, diğer kişilerin 
 | ||
| yaptığından çok daha yüksek-kaliteli yamalar göndermişlerdir. Ayrıca biz de bu geliştiricilerin ekledikleri yamaların 
 | ||
| yüksek kalitede olduğuna güveniyoruz.
 | ||
| 1.13) Bir hata raporunu nasıl gönderebilirim?
 | ||
| 
 | ||
| PostgreSQL BugTool sayfasına gidiniz. O sayfada bir bug bildirmek için neleri yapmanız gerektiği anlatılmıştır.
 | ||
| 
 | ||
| Ayrıca, ftp://ftp.PostgreSQL.org/pub ftp adresimizde, yeni bir PostgreSQL sürümü ya da yaması olup olmadığıni kontrol 
 | ||
| ediniz.
 | ||
| 1.14) PostgreSQL, diger DBMS'lerle nasıl karşılastırılabilir?
 | ||
| 
 | ||
| Bir yazılımın gücünü ölçmek için çeşitli yollar vardır: Yazılımın özellikleri, başarımı, güvenilirliği, desteği ve 
 | ||
| ücreti.
 | ||
| 
 | ||
| Özellikler:
 | ||
| 
 | ||
| PostgreSQL mevcut büyük ticari veritabanlarının, transaction, subselect, trigger, view, foreign key referential 
 | ||
| integrity ve sophisticated locking gibi (user-defined types), rules, inheritance ve lock cakışmalarını düşürmek için 
 | ||
| multi-version uyumluluk özellikleri bulunmaktadır.
 | ||
| 
 | ||
| Performans (Başarım):
 | ||
| 
 | ||
| PostgreSQL, diğer ticari ve açık kaynak kodlu veritabanlarıyla yakın başarımı sağlar. Bazı açılardan daha hızlıdır, 
 | ||
| diğer açılardan da yavaştır. MySQL ya da daha zayıf veritabanları ile karşılaştırıldığında, INSERT/UPDATE işlemlerinde, 
 | ||
| transaction bazlı çalıstığımız için daha yavaşız. MySQL, yukarıdaki "özellikler" kısmında belirtilenlerden hiç birine 
 | ||
| sahip değildir. Biz, başarımımızı her sürümde arttırsak da, esneklik ve gelişmiş özellikler için yapılanmış durumdayız. 
 | ||
| PostgreSQL'i MySQL ile karşılaştıran şu web sitesine bakabilirsiniz: http://openacs.org/why-not-mysql.html
 | ||
| 
 | ||
| Güvenilirlik:
 | ||
| 
 | ||
| DBMS'lerin güvenilir olması gerketiği, yoksa değerleri olmayacağını düşünüyoruz. Çok iyi test edilmiş, dengeli çalısan 
 | ||
| minimum sayıda hata içeren kod sunmaya çalışıyoruz. Her bir sürüm en az 1 aylık beta testlerinden geçirilmektedir. 
 | ||
| Sürüm geçmişine bakarsanız, üretime hazır, dengeli ve kararlı kodlar sunduğumuzu görebilirsiniz. Bu alanda, diğer 
 | ||
| veritabanı yazılımlarına üstünlüğümüz olduğuna inanmaktayız.
 | ||
| 
 | ||
| Destek:
 | ||
| 
 | ||
| E-posta listemiz, oluşan herhangi bir sorunu çözebilecek büyük sayıda kullanıcı ve geliştirici grubunu içerir. 
 | ||
| Sorununuz için, en az bir ticari veritabanı kadar rahat çözüm bulabilirsiniz. Gelistiricilere, kullanıcı grubuna, 
 | ||
| belgelere ve kaynak koda direk olarak erişebilme, PostgreSQL desteğini, diğer DBMS'lere göre daha önemli kılar. 
 | ||
| Gereksinimi olanlara, ticari destek verilebilir. (Destek için 1.6 bölümüne bakınız.)
 | ||
| 
 | ||
| Fiyat:
 | ||
| 
 | ||
| Ticari ve ticari olmayan tüm kullanımlarınız için PostgreSQL ücretsizdir. Kodumuzu, yukarıda belirtilen BSD-stili 
 | ||
| lisanstaki sınırlamalar hariç, ürününüzün içine ekleyebilirsiniz.
 | ||
| 1.15) PostgreSQL'e maddi açıdan nasıl destek olabilirim?
 | ||
| 
 | ||
| PostgreSQL, 1996 yılından beri 1. sınıf altyapıya sahiptir. Bunun için, yıllar boyu çalışıp bu altyapıyı oluşturup 
 | ||
| yöneten Marc Fournier'e teşekkürler.
 | ||
| 
 | ||
| Bir açık kaynak kodlu proje için, kaliteli altyapı çok önemlidir. Bu altyapı, projenin kesilmesini önler ve projenin 
 | ||
| ilerlemesini hızlandırır.
 | ||
| 
 | ||
| Tabii ki bu altyapı ucuz değildir. İşlerin yürümesi için çeşitli yılık ve anlık harcamalarımız olmaktadır. Eğer siz ya 
 | ||
| da şirketinizin bu çabamıza bağışta bulunabilecek parası varsa, lütfen http://store.pgsql.com adresine gidiniz 
 | ||
| ve bağışta, hibede bulununuz.
 | ||
| 
 | ||
| Web sayfasının 'PostgreSQL Inc.' den bahsetmesine rağmen, "katkıda bulunanlar" (contributors) maddesi sadece PostgreSQL 
 | ||
| projesini desteklemek içindir ve belirli bir şirketin para kaynağı değildir. isterseniz, bağlantı adresine bir çek 
 | ||
| gönderebilirsiniz.
 | ||
| Kullanıcı/İstemci Soruları
 | ||
| 2.1) PostgreSQL icin ODBC sürücüleri var mı?
 | ||
| 
 | ||
| iki tane ODBC sürücüsü bulunmaktadır: PsqlODBC ve OpenLink ODBC.
 | ||
| 
 | ||
| PsqlODBC'i http://gborg.postgresql.org/project/psqlodbc/projdisplay.php adresinden indirebilirsiniz.
 | ||
| 
 | ||
| OpenLink ODBC http://www.openlinksw.com adresinden alınabilir.Bu sürücü, kendi standart ODBC istemci yazılımı ile 
 | ||
| çalıstığından, destekledikleri her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC bulunmalidir.
 | ||
| 
 | ||
| Ücretsiz sürümü olmakla beraber, ticari kalitede destek almak isteyenlere satmak isteyeceklerdir. Sorularınızı lütfen 
 | ||
| postgres95@openlink.co.uk adresine gönderiniz.
 | ||
| 2.2) PostgreSQL'i web sayfalarında kullanabilmek için hangi araçlar bulunmaktadır?
 | ||
| 
 | ||
| http://www.webreview.com/ adresinde, arka planda veritabanı çalıstıran Web sayfaları için giriş seviyesinde bilgi 
 | ||
| bulunmaktadır.
 | ||
| 
 | ||
| Web ile bütünleşme için, PHP () mükemmel bir arabirim sunar.
 | ||
| 
 | ||
| Karmaşık sorunlar için, çoğu kisi Perl arabirimini ve CGI.pm ya da mod_perl kullanır.
 | ||
| 2.3) PostgreSQL'in grafik kullanıcı arabirimi var mıdır?
 | ||
| 
 | ||
| Çeşitli grafik arabirimlerimiz bulunmaktadır. Bunların arasında, PgAccess (http://www.pgaccess.org/), PgAdmin II 
 | ||
| (http://www.pgadmin.org/, sadece Win32 için), RHDB Admin (http://sources.redhat.com/rhdb/) ve Rekall 
 | ||
| (http://www.thekompany.com/products/rekall/) bulunmaktadır. Ayrıca, PostgreSQL için web tabanlı bir arabirim olan 
 | ||
| PHPPgAdmin (http://phppgadmin.sourceforge.net/) bulunmaktadır.
 | ||
| 
 | ||
| Daha ayrıntılı liste için http://techdocs.postgresql.org/guides/GUITools adresine bakabilirsiniz.
 | ||
| 2.4) PostgreSQL ile iletişimi kurabilmek için hangi dilleri kullanabilirim?
 | ||
| 
 | ||
|     * C (libpq)
 | ||
|     * Embedded C (ecpg)
 | ||
|     * Java (jdbc)
 | ||
|     * Python (PyGreSQL)
 | ||
|     * TCL (libpgtcl)
 | ||
| 
 | ||
| Diğerleri için, http://gborg.postgresql.org adresindeki Drivers/Interfaces bölümüne bakabilirsiniz.
 | ||
| Yönetimsel Sorular
 | ||
| 3.1) PostgreSQL'i, /usr/local/pgsql dizininden başka dizinlere nasıl kurabilirim?
 | ||
| 
 | ||
| configure betiğini çalıstırırken, --prefix seçeneğini veriniz.
 | ||
| 3.2) postmaster'i baslattıgımda, a Bad System Call ya da core dumped mesajı alıyorum. Neden?
 | ||
| 
 | ||
| Bunun birçok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey, çekirdeginize System V uzantılarının kurulu olup 
 | ||
| olmadıgını kontrol etmek olabilir. PostgreSQL shared memory ve semaphores için çekirdek destegine gereksinim duyar.
 | ||
| 3.3) postmaster'i başlattığımda, ıpcMemoryCreate hatası alıyorum. Neden?
 | ||
| 
 | ||
| Ya çekirdeğinizde shared memory desteğiniz düzgünce yapılandırılmamıştır, ya da çekirdeğinizdeki mevcut shared memory 
 | ||
| miktarını büyütmeniz gerekecektir. Gereksinim duyacağınız miktar, mimarinize ve postmaster için ayarladıgınız tampon 
 | ||
| ile backend işlemi sayısına bağlıdır. Tüm sistemler için, tamponlar ve işlemlerde öntanımlı sayılarla, ~ 1MB kadar yere 
 | ||
| gereksinmeniz olacaktır. PostgreSQL 7.3.2 Sistem Yöneticileri Rehberi'ne, shared memory ve semaphorelar hakkındaki 
 | ||
| ayrıntılı bilgi için bakabilirsiniz.
 | ||
| 3.4) postmaster'ı başlattığımda, ıpcSemaphoreCreate hatası alıyorum. Neden?
 | ||
| 
 | ||
| Eğer hata, "ıpcSemaphoreCreate: semget failed (No space left on device)" ise, çekirdeğiniz yeterli semaphore ile 
 | ||
| yapılandırılmamış demektir. Postgres, her bir potansiyel backend için bir semaphore gereksinimi duyar. Geçici bir 
 | ||
| çözüm, postmasterı backend işlemleri için daha az miktarda sınırla başlatmak olabilir. -N'i varsayılan değer olan 
 | ||
| 32'den küçük bir değerle başlatınız. Daha kalıcı bir çözüm, çekirdeğinizin SEMMNS ve SEMMNI parametrelerini yükseltmek 
 | ||
| olacaktır.
 | ||
| 
 | ||
| Çalışmayan semaphore'lar ağır veritabanı işlemlerinde çökme yaratabilirler.
 | ||
| 
 | ||
| Eğer hata mesajınız başka bir şey ise, çekirdeğinizde semaphore desteğini yapılandırmamış olabilirsiniz. Shared memory 
 | ||
| ve semaphore'lar hakkındaki daha ayrıntılı bilgi için PostgreSQL 7.3.2 Sistem Yöneticileri Rehberi'ne bakabilirsiniz.
 | ||
| 3.5) Diger bilgisayarların benim PostgreSQL veritabanı sunucuma bağlantılarını nasıl kontrol edebilirim?
 | ||
| 
 | ||
| Ön tanımlı olarak, PostgreSQL sadece yerel makineden Unix domain sockets kullanarak bağlanılmasına izin verir. Diger 
 | ||
| makineler, postmaster'a -i etiketini geçirmezseniz ve $PGDATA/pg_hba.conf dosyasını düzenleyerek host-based 
 | ||
| authentication'a olanak vermezseniz, bağlantı yapamayacaklardır.
 | ||
| 3.6) Veritabani motorunu daha iyi başarım için nasıl ayarlayabilirim?
 | ||
| 
 | ||
| Index'ler sorguları hızlandırabilir. EXPLAIN komutu, PostgreSQL'in sorgunuzu nasıl yorumladığını ve hangi index'leri 
 | ||
| kullandığını görmenize izin verir.
 | ||
| 
 | ||
| Eğer cok fazla INSERT işlemi yapıyorsanız, bunları büyük bir toplu işlem dosyasıkullanıp COPY komutu ile veritabanına 
 | ||
| girmeyi deneyiniz. Bu, tekil INSERT'lerden daha hızlıdır. İkinci olarak, BEGIN WORK/COMMIT transaction bloğu içinde 
 | ||
| olmayan ifadeler kendi transaction'larındaymış gibi düşünülür. Çoklu ifadeleri tek bir transaction bloğu içinde 
 | ||
| yapabilirsiniz. Bu, transaction overhead'ini düşürecektir. Tek bir transaction bloğu içinde birden çok ifadeyi 
 | ||
| çalıştırmayı deneyebilirsiniz. Bu da aynı şekilde, transaction overhead'ini düşürür.
 | ||
| 
 | ||
| Çeşitli ayarlama seçenekleri mevcuttur. fsync() işlemini, postmaster'ı -o -F seçeneği ile başlatarak devre dışı 
 | ||
| bırakabilirsiniz. Bu işlem, fsync()'lerin her transactiondan sonra diski flush etmesini engelleyecektir.
 | ||
| 
 | ||
| Aynı zamanda, postmaster'i -B seçeneği ile başlatıp, backend işlemleri tarafından kullanılan shared memory buffers 
 | ||
| sayılarını arttırabilirsiniz. Eğer bu parametreyi çok yüksek tutarsanız, çekirdeğinizin shared memory bölgesindeki 
 | ||
| limiti aşma olasılığınız yüzünden postmaster başlayamayabilir. Her bir tampon (buffer) 8K'dır. Öntanımlı sayı ise 64 
 | ||
| tampondur.
 | ||
| 
 | ||
| Aynı şekilde, backend'in -S seçeneğini geçici sıralamalar için backend süreçleri tarafından kullanılacak hafızayı 
 | ||
| arttırmak amacıyla kullanabilirsiniz. -S seçeneği kilobayt cinsinden değer alır ve ön tanımlı değeri 512'dir (512 K)
 | ||
| 
 | ||
| Tablolardaki veriyi bir index'e eşlemek amacıyla gruplama için CLUSTER komutunu kullanabilirsiniz. Ayrıntılı bilgi için 
 | ||
| CLUSTER komutunun yardım sayfasına bakabilirsiniz.
 | ||
| 3.7) Hangi hata ayıklama özellikleri bulunmaktadır?
 | ||
| 
 | ||
| PostgreSQL, hata ayıklama amacıyla kullanılabilecek durum bilgisi rapor eden çeşitli özeliklere sahiptir.
 | ||
| 
 | ||
| Öncelikle, configure betiğini --enable-cassert seçeneğiyle çalıştırırsanız, bir çok assert() backend calışmasını 
 | ||
| gözlemler ve beklenmeyen bir durumda programı durdurur.
 | ||
| 
 | ||
| Postmaster ve postgres çeşitli hata ayıklama seçeneklerine sahiptir. Öncelikle, postmaster'ı başlattığınızda, standart 
 | ||
| çıktıyı ve hataları bir log dosyasına yönlendirdiğinize emin olun:
 | ||
| 
 | ||
| cd /usr/local/pgsql
 | ||
| ./bin/postmaster >server.log 2>&1 &
 | ||
| 
 | ||
| Bu işlem PostgreSQL ana dizinine server.log dosyası yerleştirecektir. Bu dosya sunucunun yaşadığı sorunlar ya da 
 | ||
| hatalar hakkında yararlı bilgiler içerir. -d seçeneği, hata ayıklama seviyesini belirten bir rakam ile kullanılır. 
 | ||
| Yüksek hata ayıklama seviyelerinin büyük log dosyaları oluşturacağını unutmayınız.
 | ||
| 
 | ||
| Eğer postmaster çalışmıyorsa, postgres backend'ini komut satırından çalıştırabilir ve SQL ifadenizi direk olarak 
 | ||
| yazabilirsiniz. Bu sadece hata ayıklama amacıyla önerilir. Burada, noktalı virgülün değil de yeni bir satırın sorguyu 
 | ||
| sonlandırdığını unutmayınız. Eğer hata ayıklama sembolleri ile derlediyseniz, ne olduğunu görmek için bir hata 
 | ||
| ayıklayıcı kullanabilirsiniz. backend postmaster'dan başlatılmadığından, eşdeğer bir ortamda çalışmamaktadır ve 
 | ||
| locking/backend etkileşim sorunları artabilir.
 | ||
| 
 | ||
| Eğer postmaster çalışıyorsa, bir pencerede psql'i çalıştırın ve psql tarafından kullanılan postgres sürecinin süreç 
 | ||
| numarasını (PID) bulun. Postgres süreci ile ilişkilendirmek için bir hata ayıklarıcı kullanın. Sorguları psql aracılığı 
 | ||
| ile çalıştırabilirsiniz. Eğer postgres başlangıcında hata ayıklamak istiyorsanız, PGOPTIONS="-W n" seçeneğini 
 | ||
| ayarlayabilir ve psql'i başlatabilirsiniz. Bu işlem, başlangıcın n saniye kadar gecikmesini sağlayacaktır; böylece hata 
 | ||
| ayıklayıcıyı sürece ilişkilendirdikten sonra başlangıç sürecinin devam etmesini sağlayabilirsiniz.
 | ||
| 
 | ||
| postgres programı hata ayıklama ve başarım ölçümleri için -s, -A ve -t seçeneklerine sahiptir.
 | ||
| 3.8) Bağlanmaya çalışırken, neden "Sorry, too many clients" hatasını alıyorum?
 | ||
| 
 | ||
| Postmaster'ın eşzamanlı olarak başlatabileceği backend süreçleri sınırlarını arttırmanız gerekmektedir.
 | ||
| 
 | ||
| Ön tanımlı değer 32 süreçtir. Bunu, postmaster'ı uygun -N değeri ile ya da postgresql.conf dosyasını düzenleyerek 
 | ||
| yeniden başlatmakla arttırabilirsiniz.
 | ||
| 
 | ||
| Eğer -N değerini 32'den büyük yapacaksanız, aynı zamanda -B değerini de değiştirmeniz gerektiğini unutmayın. -B, -N'nin 
 | ||
| en az 2 katı kadar olmalıdır; daha iyi başarım için bu sayıyı daha da arttırmalısınız. Yüksek sayıdaki backend 
 | ||
| süreçleri için, çeşitli çekirdek yapılandırma parametrelerini arttırmanız gerekecektir. Yapılması gerekenler, SHMMAX, 
 | ||
| SEMMNS, SEMMNI, NPROC, MAXUPRC ve açılabilecek dosyaların maksimum sayısı olan NFILE ve NINODE değerlerini 
 | ||
| karıştırmaktır. Bunun nedeni, PostgreSQL'in izin verilen backend süreçlerinin sayısı üzerinde bir sınırı olmasıdır. 
 | ||
| Böylelikle sistem kaynaklarının dışına çıkılmayacaktır.
 | ||
| 
 | ||
| PostgreSQL'in 6.5 sürümüne kadar, en fazla backend sayısı 64 idi ve bunu değiştirmek için include/storage/sinvaladt.h 
 | ||
| dosyası içindeki MaxBAckendid sabitini değiştirdek sonra yazılımı yeniden derlemek gerekiyordu.
 | ||
| 3.9) pgsql_tmp dizinin içindeki dosyalar nelerdir?
 | ||
| 
 | ||
| Sorgu çalıstırıcı (query executer) tarafından yaratılan geçici dosyalardır. Örnegin, bir sıralama ORDER BY ile 
 | ||
| yapılacaksa ve sıralama backend'in -s parametresinin izin verdiğinden daha fazla alana gereksinim duyuyorsa, ekstra 
 | ||
| veriyi tutmak için geçici dosyalar yaratılır.
 | ||
| 
 | ||
| Geçici dosyalar, eğer sıralama sırasında backend göçmezse otomatik olarak silinecektir. Eğer çalışan durumda bir 
 | ||
| backend'iniz yoksa, pg_tempNNN.NN dosyalarını silmeniz güvenlidir.
 | ||
| 3.10) PostgreSQL sürümlerini yükseltmek için neden bir dump/reload işlemi gerçekleştirmek zorundayım?
 | ||
| 
 | ||
| PostgreSQL takımı ara sürümlerde sadece küçük değişiklikler yapmaktadır; bu yüzden 7.2 sürümünden 7.2.1'e yükseltmek 
 | ||
| dump/restore işlemi gerekmemektedir. Ancak, esas sürümlerde (örnek: 7.2'den 7.3'e) çoğunlukla sistem tablolarının ve 
 | ||
| veri dosyalarının iç yapısı değiştirilir. Bu değişiklikler çoğunlukla karmaşıktır; dolayısıyla veri dosyalarının geriye 
 | ||
| dönük uyumluluğu işlemlerini yapmıyoruz. Dump işlemi, veriyi genel biçimde alacağından yeniden yükleme esnasında veri, 
 | ||
| yeni iç biçime uygun şekilde yerleştirilecektir.
 | ||
| 
 | ||
| Disk biçiminin değişmediği sürümlerde, pg_upgrade betiği güncellemenin bir dump/restore gerektirmeden yapılmasını 
 | ||
| sağlayacaktır. pg_upgrade betiğinin o sürüm için bulunup bulunmadığını sürüm notları içinde bulabilirsiniz.
 | ||
| 3.11) Nasıl bir donanım kullanmalıyım?
 | ||
| 
 | ||
| PC donanımı tamamen uyumlu olduğu için, insanlar tüm PC donanımlarının aynı kalitede olduğunu düşünürler. Oysa böyle 
 | ||
| değildir. ECC RAM, SCSI ve kaliteli anakartlar daha ucuz donanımlara göre daha çok güvenilirlerdir ve başarımları daha 
 | ||
| yüksektir. PostgreSQL hemen hemen tüm donanımda çalışabilmektedir, ancak güvenilirlik ve başarım önemli ise donanım 
 | ||
| seçeneklerini çok iyi araştırmak gereklidir. E-posta listelerimi donanımlarla ilgili sorular ve de ticaret için 
 | ||
| kullanılabilir.
 | ||
| İşletimsel Sorular
 | ||
| 4.1) Binary cursor ve normal cursor arasındaki fark nedir?
 | ||
| 
 | ||
| DECLARE yardım sayfasına bakınız.
 | ||
| 4.2) Sorgunun sadece ilk birkaç satırını nasıl SELECT edebilirim?
 | ||
| 
 | ||
| FETCH yardım sayfasına bakınız, ya da SELECT ... LIMIT ... kullanınız.
 | ||
| 
 | ||
| İlk birkaç satırı almak isteseniz bile, tüm sorgu değerlendirilmek durumunda kalınabilir. ORDER BY içeren bir sorgu 
 | ||
| düşünün. Eğer ORDER BY işe eşleşen bir index varsa, PostgreSQL istenen ilk birkaç satırı işleyebilir, ya da tüm sorgu 
 | ||
| istenen satırlar üretilene kadar işlenebilir.
 | ||
| 4.3) psql'in içinde gördügüm tabloların ya da diğer şeylerin listesini nasıl alabilirim?
 | ||
| 
 | ||
| pgsql/src/bin/psql/describe.c içindeki psql kaynak kodunu okuyabilirsiniz. Bu kod, psql'in \ ile başlayan komutlarının 
 | ||
| çıktısını olusturan SQL komutlarını içerir. Aynı zamanda, psql'i -E seçeneği ile başlatıp, verdiğiniz komutları 
 | ||
| çalıştırmak için yaptığı sorguların çıktılarını görebilirsiniz.
 | ||
| 4.4) Bir tablodan bir kolonu nasıl kaldırabilirim?
 | ||
| 
 | ||
| Bu özellik (ALTER TABLE DROP COLUMN) 7.3 sürümü ile gelmiştir. Eski sürümlerde aşağıdakileri uygulamalısınız:
 | ||
| 
 | ||
| BEGIN;
 | ||
| LOCK TABLE old_table;
 | ||
| SELECT ...  -- select all columns but the one you want to remove
 | ||
| INTO TABLE new_table
 | ||
| FROM old_table;
 | ||
| DROP TABLE old_table;
 | ||
| ALTER TABLE new_table RENAME TO old_table;
 | ||
| COMMIT;		
 | ||
| 		
 | ||
| 
 | ||
| 4.5) Bir satır, tablo ve veritabanı için en fazla büyüklük nedir?
 | ||
| 
 | ||
| Sınırlar:
 | ||
| 
 | ||
| Veritabanı için en fazla büyüklük nedir?
 | ||
| Sınırsız (32 TB'lık veritabanı bulunmaktadır)
 | ||
| 
 | ||
| Bir tablo için en fazla büyüklük nedir?
 | ||
| 32 TB
 | ||
| 
 | ||
| Bir satır için en fazla büyüklük nedir?
 | ||
| 1.6 TB
 | ||
| 
 | ||
| Bir alan için en fazla büyüklük nedir?
 | ||
| 1 GB
 | ||
| 
 | ||
| Tabloda en fazla satır sayısı kaçtır?
 | ||
| Sınırsız
 | ||
| 
 | ||
| Bir tabloda olabilecek en fazla kolon sayısı kaçtır?
 | ||
| Kolon tiplerine bağlı olarak 250-1600
 | ||
| 
 | ||
| Bir tabloda olabilecek en fazla index sayısı kaçtır?
 | ||
| Sınırsız
 | ||
| 
 | ||
| Tabii ki bunlar aslında sınırsız degildir. Burada belirtilen sınırlar, fiziksel sınırların haricindeki sınırlardır. Boş 
 | ||
| disk alanı, hafıza/takas alanı na bağlı sınırlamalar vardır. Başarım, sınır değerlere yaklaştıkça, ya da değerler çok 
 | ||
| büyük olduğunda düşebilir.
 | ||
| 
 | ||
| Bir tablo için büyüklük sınırı olan 32 TB, işletim sisteminin büyük dosya desteği olup olmamasından bağımsızdır. Büyük 
 | ||
| tablolar, 1 GB'lik dosyalarda saklandığı için, dosya sistemi sınırlarınin bir önemi yoktur.
 | ||
| 
 | ||
| Tablo ve kolon sayısı büyüklükleri, ön tanımlı blok büyüklüğü 32k ya çıkarılarak arttırılabilir.
 | ||
| 4.6) Tipik bir metin dosyasındaki veriyi saklamak için ne kadar disk alanı gereklidir?
 | ||
| 
 | ||
| Bir PostgreSQL veritabanı, veriyi "flat" metin dosyasında saklamak için gereken alanın 5 kat fazla disk alanına 
 | ||
| gereksinim duyabilir.
 | ||
| 
 | ||
| Her satırında bir tamsayı ve metin (text) içeren, 100.000 satırlık bir dosya düşünün. Her satırın ortalama 20 byte 
 | ||
| olduğunu farzedelim. Metin dosyası 2.8 MB olacaktır. Bu veriyi tutan PostgreSQL veritabanı yaklaşık 6.4 MB yer 
 | ||
| kaplayacaktır.
 | ||
| 
 | ||
|   36 byte: Her bir satır başlığı (yaklaşık)
 | ||
| + 24 byte: Bir tamsayı (int) alanı ve bir metin (text) alanı 
 | ||
| +  4 byte: Sayfada tuple a pointer
 | ||
| ----------------------------------------
 | ||
|   64 byte -> kayıt başına
 | ||
| 
 | ||
| PostgreSQL'de veri sayfası (data page) büyüklüğü 8192 byte (8k)dır, dolayısıyla:
 | ||
| 
 | ||
| 8192 byte -> page başına
 | ||
| -------------------------  =  Her bir veritabanı page'ı başına 128 satır (yaklaşık)
 | ||
|   Satır başına 64 byte
 | ||
|   
 | ||
| 100000 veri satırı
 | ||
| --------------------  =  782 veritabanı sayfası
 | ||
|      128 satır
 | ||
| 
 | ||
| 782 veritabanı sayfası * sayfa başına 8192 byte = 6,406,144 bytes (6.4 MB)
 | ||
| 
 | ||
| Index'ler çok fazla yere gereksinim duymazlar, ama index'lenmiş veriyi tutacaklarından büyük olabilirler.
 | ||
| 
 | ||
| NULL değerler bitmapler içinde tutulur; dolayısıyla çok az yer kaplarlar.
 | ||
| 4.7) Veritabanında hangi tablo ya da index'lerin tanımlandığını nasıl görebilirim?
 | ||
| 
 | ||
| psql, bu tür bilgileri göstermek için, \ ile başlayan bir çok komut sunmaktadır. \? komutu ile bu komutları 
 | ||
| görebilirsiniz. Ayrıca, bunları açıklayan ve pg_ ile başlayan çok sayıda sistem tablosu bulunmaktadır. Aynı zamanda, 
 | ||
| psql -l ile tüm veritabanlarını listeyelebirsiniz.
 | ||
| 
 | ||
| Ayrıca, pgsql/src/tutorial/syscat.source kodunu inceleyebilirsiniz. Bu dosya, veritabanı sistem dosyalarından bilgiyi 
 | ||
| almak için gereksinim duyulan bir çok SELECT'leri gösterir.
 | ||
| 4.8) Sorgularım cok yavaş, ya da index'lerimi kullanmıyorlar. Neden?
 | ||
| 
 | ||
| Indexler her sorgu tarafından otomatik olarak kullanılmazlar. Indexler eğer bir tablonun büyüklüğü minimum bir 
 | ||
| büyüklükten fazla ise ve sorgu tablodaki satırların sadece küçük bir yüzdesini seçiyorsa kullanılır. Bunun nedeni, 
 | ||
| index erişiminin neden olduğu raslansal disk erişimi nin diskin ya da tablonun sıralı okunmasından daha yavas 
 | ||
| olabilmesidir.
 | ||
| 
 | ||
| Bir index'in kullanılıp kullanılmayacağını belirlemek için, PostgreSQL tablo hakkındaki istatistiklere gereksinmesi 
 | ||
| vardır. Bu istatistikler, VACUUM ANALYZE kullanılarak toplanırlar. Optimizer, istatistikleri kullanarak, tabloda kaç 
 | ||
| satır olduğunu ve bilir ve indexin kullanılıp kullanılmayacağına daha iyi karar verir. Istatistikler, aynı zamanda en 
 | ||
| uygun join sırasını ve yöntemini belirlemekte çok önemlidir. İstatistik toplanması, tablo içerikleri değiştikçe 
 | ||
| periyodik olarak yapılmalıdır.
 | ||
| 
 | ||
| Indexler normalde ORDER BY sorguları ya da join işlemlerini gerçekleştirmek için kullanılmazlar. Açık bir sıralamayı 
 | ||
| takip eden sıralı bir arama (sequential scan), büyük bir tabloda index araması yapmaktan genelde daha hızlıdır.
 | ||
| Ancak, ORDER BY ile birleşmiş LIMIT genellikle bir index kullanacaktır; çünkü tablonun sadece belirli bir miktarı 
 | ||
| döndürülecektir. Aslında, MAX() ve MIN() fonksiyonlarının index kullanmamalarından dolayı, bu gibi değerleri ORDER BY 
 | ||
| ve LIMIT kullanarak da almak olasıdır:
 | ||
| 
 | ||
|     SELECT col
 | ||
|     FROM tab
 | ||
|     ORDER BY col [ DESC ]
 | ||
|     LIMIT 1;
 | ||
| 
 | ||
| Eğer optimizer'ın sıralı arama yapmasının yanlış olduğuna inanıyorsanız, SET enable_seqscan TO 'off' kullanın ve index 
 | ||
| kullanan aramaların hala daha hızlı olup olmadığını görün.
 | ||
| 
 | ||
| LIKE ya da ~ gibi operatörler kullanıyorsanız, index'ler sadece aşağıdaki koşullarda kullanılabilir:
 | ||
| 
 | ||
|     * Arama dizininin başı, dizinin başı ile bağlanmalıdır. Yani,
 | ||
|           o LIKE sorguları % ile başlamamalıdır.
 | ||
|           o Düzenli ifade sorguları ^ işe başlamamalıdır.
 | ||
|     * Arama metni bir karakter sınıfı ile başlayamaz. Örnek: [a-e]
 | ||
|     * ILIKE ve ~* gibi büyük/küçük harfe duyarsız aramalar index'lerden yararlanmazlar. Onun yerine, bölüm 4.12'de 
 | ||
| anlatılan fonksiyonel index'leri kullanabilirsiniz.
 | ||
|     * initdb sırasında öntanımlı C locale'i kullanılmalıdır.
 | ||
| 
 | ||
| 4.9) query-optimizer'ın sorgularımı nasıl değerlendirdiğini, işleme soktuğunu nasıl görebilirim?
 | ||
| 
 | ||
| EXPLAIN yardım sayfasına bakınız.
 | ||
| 4.10) R-tree index nedir?
 | ||
| 
 | ||
| R-tree index, uzaysal (spatial) verileri indexlemek için kullanılır. Bir hash index, dizi aramalarında (range search) 
 | ||
| kullanılamaz. B-tree index dizi aramalarında sadece tek boyutlu çalışmaktadır. R-tree, çok boyutlu veriyi destekler. 
 | ||
| Örneğin, eğer bir R-tree index point veri tipi üzerinde inşa edililebilirse, sistem "select all points within a 
 | ||
| bounding rectangle" gibi sorgulara daha verimli yanıtlar verecektir.
 | ||
| 
 | ||
| Orijinal R-tree tasarımını açıklayan belge:
 | ||
| 
 | ||
| Guttman, A. "R-trees: A Dynamic Index Structure for Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf 
 | ||
| on Mgmt of Data, 45-57.
 | ||
| 
 | ||
| Bu belgeyi, Stonebraker'ın "Readings in Database Systems" kitabında bulabilirsiniz.
 | ||
| 
 | ||
| Gömülü R-tree indexleri poligon ve boxları kullanabilir. Teorik olarak, R-tree indexlerin özelliklerini genişletmek bir 
 | ||
| miktar çaba gerektirir ve bunun nasıl yapılacağına dair bir belgemiz henüz bulunmamaktadır.
 | ||
| 4.11) Genetic Query Optimizer nedir?
 | ||
| 
 | ||
| GEQO modülü, Genetic Algorithm(GA) kullanılarak tablolar birleştirildiğinde sorgu optimizasyonunu hızlandırır.
 | ||
| 4.12) Düzenli ifade (Regular Expression) aramalarını ve büyük/küçük harfe duyarsız aramaları nasıl yapabilirim? Bu 
 | ||
| büyük(küçük harfe duyarlı aramalar için index'i nasıl kullanabilirim?
 | ||
| 
 | ||
| ~ operatörü düzenli ifade eşleşmesi ve ~* büyük/küçük harfe duyarsız düzenli ifade eşleşmesi yapar. Büyük/küçük harfe 
 | ||
| duyarlı olan LIKE'ın büyük/küçük harfe duyarsız olan biçimi ILIKE'tır ve PostgreSQL 7.1 sürümü ile birlikte gelmiştir.
 | ||
| 
 | ||
| Büyük-küçük harfe duyarsız eşitlik karşılaştırmaları aşağıdaki gibi ifade edilir:
 | ||
| 
 | ||
| SELECT *
 | ||
| FROM tab
 | ||
| WHERE lower(col) = 'abc'
 | ||
| 		
 | ||
| 
 | ||
| Bu standart bir index yaratmayacaktır. Ancak eğer fonksiyonel bir index yaratırsanız; o kullanılacaktır:
 | ||
| 
 | ||
| CREATE INDEX tabindex on tab (lower(col));
 | ||
| 
 | ||
| 4.13) Bir sorguda, bir alanin "NULL" olduğunu nasıl ortaya çıkarabilirim?
 | ||
| 
 | ||
| Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz.
 | ||
| 4.14) Çesitli karakter tipleri arasındaki farklar nelerdir?
 | ||
| 
 | ||
| Veri Tipi	    İç Adı              Not
 | ||
| --------------------------------------------------
 | ||
| VARCHAR(n)      varchar         boyut en büyük uzunluğu verir; sadece verilen kadar veri tutulur.
 | ||
| CHAR(n)         bpchar          belirtilen uzunluğa kadar sonuna  boşluk eklenir.
 | ||
| TEXT            text            uzunlukta herhangi bir üst sınır yoktur. 
 | ||
| BYTEA           bytea           variable-length byte array (null-byte safe)
 | ||
| "char"          char            bir karakter 
 | ||
| 		
 | ||
| 
 | ||
| İç adları (internal name) sistem kataloglarını ve bazı hata mesajlarını incelerken göreceksiniz.
 | ||
| 
 | ||
| İlk dört veri tipi "varlena" tipidir (yani, diskteki ilk 4 bayt uzunluktur; devamı da veridir.) Dolayısıyla, kullanılan 
 | ||
| gerçek alan, belirtilen alandan biraz daha büyüktür. Ancak, bu veri tipleri, sıkıştırılmaya tabi tutulabilir; 
 | ||
| dolayısıyla disk alanı beklenilenden küçük olabilir. VARCHAR(n) büyüklüğü artabilen ama en büyük uzunluğu sınırlı olan 
 | ||
| verileri saklamak için en uygun yöntemdir. TEXT, 1 GB büyüklüğe kadar olan verileri tutmak için kullanılır.
 | ||
| 
 | ||
| CHAR(n), aynı uzunluktaki dizilerin saklanması için kullanımır. CHAR(n) belirtilen uzunluğa kadar boşluk ile doldurur; 
 | ||
| ancak VARCHAR(n) sadece verilen karakterleri saklar. BYTEA binary veri saklamak içindir; ayrıca "NULL" bayt içeren 
 | ||
| değerleri de saklar. Burada anlatılan üç veri tipi de benzer başarım karakteristiklere sahiptir.
 | ||
| 4.15.1) Nasıl serial/otomatik artan (auto-incrementing) bir alan yaratabilirim?
 | ||
| 
 | ||
| PostgreSQL'de SERIAL veri tipi vardır. Bu veri tipi bir sequence ve kolon üzerinde bir index yaratır.
 | ||
| 
 | ||
| Örnek, aşağıdaki sorgu:
 | ||
| 
 | ||
| CREATE TABLE person (
 | ||
|     id   SERIAL,
 | ||
|     name TEXT
 | ||
| );		
 | ||
| 		
 | ||
| 
 | ||
| buna çevrilir:
 | ||
| 
 | ||
| CREATE SEQUENCE person_id_seq;
 | ||
| CREATE TABLE person (
 | ||
|     id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
 | ||
|     name TEXT
 | ||
| );
 | ||
| CREATE UNIQUE INDEX person_id_key ON person ( id );		
 | ||
| 		
 | ||
| 
 | ||
| Sequenceler hakkında daha fazla bilgi için create_sequence yardım sayfasına bakabilirsiniz. Her satırın OID alanını 
 | ||
| tekil bir sayı olarak alabilirsiniz. Ancak, veritabanınızın dump'ını alıp yeniden yüklerseniz, OID değerlerini 
 | ||
| koruyabilmek için pg_dump'ın -o parametresini ya da "COPY WITH OIDS" seçeneğini kullanmanız gerekecektir.
 | ||
| 4.15.2) SERIAL girişinin degerini nasıl alabilirim?
 | ||
| 
 | ||
| Bir yaklaşım, sequence nesnesindeki SERIAL değerini, veriyi girmeden önce nextval() ile alıp, aldığınız değeri 
 | ||
| kendinizin girmesidir. 4.15.1'deki örnek tabloyu kullanarak bir örnek verelim:
 | ||
| 
 | ||
| new_id = execute("SELECT nextval('person_id_seq')");
 | ||
| 
 | ||
|     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
 | ||
| 
 | ||
| Diğer sorgular için new_id'de yeni değerin saklanması gerekir. Otomatik olarak yaratılan SEQUENE nesnesinin adı, __seq 
 | ||
| şeklinde olacaktır (< > işaretleri olmadan).
 | ||
| 
 | ||
| Alternatif olarak, atanmış SERIAL değerini, değer girildikten sonra currval() fonksiyonu ile alabilirsiniz:
 | ||
| 
 | ||
| 		execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
 | ||
| 		new_id = execute("SELECT currval('person_id_seq')");	
 | ||
| 		
 | ||
| 
 | ||
| Son olarak, ön tanımlı değeri bulmak için INSERT ifadesinden dönen OID değerini kullanabilirsiniz; ancak bu en az 
 | ||
| taşınabilir çözüm olacaktır. Perl'de, Edmund Mergl'in DBD:Pg mödülü ile birlikte DBI kullanarak, OID değeri 
 | ||
| $sth->execute() çalıştırıldıktan sonra $sth->(pg_oid_status) ile alınabilir.
 | ||
| 4.15.3) currval() ve nextval() diğer kullanıcılara sorun yaratmaz mı?
 | ||
| 
 | ||
| Hayır. curval(), tüm kullanıcılar değil, backend tarafından atanan geçerli değeri döndürür.
 | ||
| 4.15.4) Neden sequence sayıları transaction işleminin iptalinden sonra yeniden kullanılıyor? Neden sequence/SERIAL 
 | ||
| kolonumdaki sayılarda atlamalar oluyor?
 | ||
| 
 | ||
| Uyumluluğu arttırmak için, sequence değerleri çalışan transaction'lara gerektiği şekilde aktarılır ve transaction 
 | ||
| bitene kadar o değer kilitlenmez. Bu, iptal edilen transaction işlemleri nedeniyle boşluklara neden olur.
 | ||
| 4.16) OID nedir? TID nedir?
 | ||
| 
 | ||
| OIDler, tekil satır numaralarına PostgreSQL'in yanıtıdır. PostgreSQL'de yaratılan her sayı, tekil bir OID alır. initdb 
 | ||
| işlemi sırasında yaratılan tüm OID'ler 16384'ten küçüktür (backend/access/transam.h). Kullanıcılar tarafından yaratılan 
 | ||
| tüm OID'ler bu sayıya eşit ya da bu sayıdan büyüktür. Varsayılan durumda, tüm bu OIDler sadece bir tablo ya da 
 | ||
| veritabanında değil, tüm PostgreSQL kurulumunda tekildir.
 | ||
| 
 | ||
| PostgreSQL OIDleri, tablolar arasında satırları ilişkilendirmek için kendi iç tablolarında kullanır. Bu OIDler belirli 
 | ||
| kullanıcı satırlarını belirtmek için kullanabilir ve join işlemlerinde kullanılır. OID değerlerini saklamak için OID 
 | ||
| kolon tipini kullanmanız önerinir. Daha hızlı bir erişim için, OID alanında bir index yaratabilirsiniz.
 | ||
| 
 | ||
| OID'ler yeni satırlara, tüm veritabanları tarafında kullanılan ortak bir alandan atanırlar. Eğer OID'i başka bir değere 
 | ||
| eşitlemek isterseniz ya da tablonun bir kopyasını orijinal OIDler ile çıkarmak isterseniz, bu mümkündür:
 | ||
| 
 | ||
| 			CREATE TABLE new_table(old_oid oid, mycol int);
 | ||
| 			SELECT old_oid, mycol INTO new FROM old;
 | ||
| 			COPY new TO '/tmp/pgtable';
 | ||
| 			DELETE FROM new;
 | ||
| 			COPY new WITH OIDS FROM '/tmp/pgtable';		
 | ||
| 		
 | ||
| 
 | ||
| OIDler 4-bit tamsayı olarak saklanırlar ve 4 milyarda overflow olacaktır. Kimse bu sayıya ulaştığına dair bir bilgi 
 | ||
| iletmedi ve bu sınırı kimse bu sınıra ulaşmadan kaldıracağız.
 | ||
| 
 | ||
| TIDler, belirli fiziksel satırlar block ve offset değerleri ile belirtmekte kullanılır. TIDler, satırlar değiştiğinde 
 | ||
| ya da yeniden yüklendiğinde değişirler. Index girdileri tarafından fiziksel satırları göstermek için kullanılırlar.
 | ||
| 
 | ||
| 4.17) PostgreSQL'de kullanılan bazı terimlerin anlamları nelerdir?
 | ||
| 
 | ||
| Kaynak kodun bir kısmı ve eski belgeler, daha geniş kullanım alanı olan terimleri kullanırlar. Bunların bazıları:
 | ||
| 
 | ||
|     * table, relation, class
 | ||
|     * row, record, tuple
 | ||
|     * column, field, attribute
 | ||
|     * retrieve, select
 | ||
|     * replace, update
 | ||
|     * append, insert
 | ||
|     * OID, serial value
 | ||
|     * portal, cursor
 | ||
|     * range variable, table name, table alias
 | ||
| 
 | ||
| Genel veritabanı terimleri, http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html 
 | ||
| adresinde bulunabilir.
 | ||
| 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasını alıyorum?
 | ||
| 
 | ||
| Sisteminizde sanal belleğinizi tüketmiş olabilirsiniz, ya da çekirdeğiniz belli kaynaklar icin düşük bir sınıra sahip 
 | ||
| olabilir. postmaster'ı başlatmadan önce aşağıdakileri deneyebilirsiniz:
 | ||
| 
 | ||
| ulimit -d 262144
 | ||
| limit datasize 256m		
 | ||
| 		
 | ||
| 
 | ||
| Kabuğunuza bağlı olarak, bunlardan sadece biri olumlu sonuç verecektir, ama bu işlem veri segment sınırınızı 
 | ||
| arttıracak, ve belki de sorgunuzun tamamlanmasını sağlayacaktır. Bu komut, varolan işleme (current process) ve komut 
 | ||
| çalıştırıldıktan sonraki tüm alt işlemlere uygulanır. Eğer SQL istemcinizle, backend'in çok fazla veri döndürmesi 
 | ||
| nedeniyle bir sorun yaşıyorsanız, bunu istemciyi başlatmadan önce deneyiniz.
 | ||
| 4.19) Hangi PostgreSQL sürümünü çalıştırdığımı nasıl görebilirim?
 | ||
| 
 | ||
| psql arabiriminde, select version(); yazınız.
 | ||
| 4.20) Neden large-object işlemlerim, "invalid large obj descriptor" hatasını veriyor?
 | ||
| 
 | ||
| Large object işlemlerinizin uçlarına, yani lo_open ... lo_close komutlarının çevresine, BEGIN WORK ve COMMIT koymanız 
 | ||
| gerekmektedir;
 | ||
| 
 | ||
| Şu anda, PostgreSQL kuralları large objectleri transaction commit edildiğinde kapatarak uygulamaktadır. Dolayısıyla 
 | ||
| handle ile yapılacak ilk şey invalid large obj descriptor hatası ile sonuçlanacaktır.Dolayısıyla çalışan kodunuz eğer 
 | ||
| transaction kullanmazsanız hata mesajları üretecektir.
 | ||
| 
 | ||
| Eğer ODBC gibi bir istemci arabirimi kullanıyorsanız, auto-commit'i kapatmanız gerekebilir.
 | ||
| 4.21) Şu andaki zamanı öntanımlı değer olarak kabul eden How do I create a column that will default to the current 
 | ||
| time?
 | ||
| 
 | ||
| Alttakini kullanabilirsiniz:
 | ||
| 
 | ||
| CURRENT_TIMESTAMP:
 | ||
| CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
 | ||
| 		
 | ||
| 
 | ||
| 4.22) Neden IN kullanan subquery'lerim çok yavas?
 | ||
| 
 | ||
| 7.4 sürümünden önce, subqueryler. Eğer subquery sadece birkaç satır ve outer query bol sayıda satır döndürüyorsa, IN en 
 | ||
| hızlısıdır. Sorguları hızlandırmak için IN yerine EXISTS kullanın:
 | ||
| 
 | ||
| SELECT *
 | ||
|     FROM tab
 | ||
|     WHERE col1 IN (SELECT col2 FROM TAB2)
 | ||
| 		
 | ||
| 
 | ||
| sorgusunu, aşağıdaki ile değiştirin:
 | ||
| 
 | ||
| SELECT *
 | ||
|     FROM tab
 | ||
|     WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)		
 | ||
| 		
 | ||
| 
 | ||
| Bu işlemin hızlı olması için, subcol'un indexlenmiş bir kolon olması gerekmektedir.
 | ||
| 
 | ||
| 7.4 sürümü ve sonrasında, IN aslında normal sorgularla aynı karmaşık join tekniklerini kullanır ve EXISTS'e tercih 
 | ||
| edilir.
 | ||
| 4.23) Outer join işlemini nasıl yapabilirim?
 | ||
| 
 | ||
| PostgreSQL outer joins islemlerini SQL standartlarını kullanarak gerçekleştirmektedir. Aşağıda 2 örnek bulunmaktadır:
 | ||
| 
 | ||
| SELECT *
 | ||
| FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);		
 | ||
| 		
 | ||
| 
 | ||
| ya da
 | ||
| 
 | ||
| SELECT *
 | ||
| FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);		
 | ||
| 		
 | ||
| 
 | ||
| Bu özdeş sorgular t1.col' i t2.col'ye join ederler ve aynı zamanda t1'deki unjoined satırları (t2'de eşlenmemiş 
 | ||
| olanlarla) döndürürler. RIGHT JOIN t2'nin unjoined satırlarını ekleyecektir. Bir FULL join, eşleşmiş bütün satırları ve 
 | ||
| t1 ile t2'den tüm bağlanmamış (unjoined) satırları alır. OUTER sözcüğü seçimseldir ve LEFT, RIGHT ve FULL join 
 | ||
| işlemlerinde olduğu kabul edilir. Sıradan join işlemleri INNER JOIN olarak adlandırılır.
 | ||
| 
 | ||
| Önceki sürümlerde, OUTER JOINler UNION ve NOT IN kullanılarak simüle edilebiliyordu. Örneğin, tab1 ve tab2'yi 
 | ||
| birleştirirken, aşağıdaki sorgu iki tablonun dıştan bağlanmasını sağlar:
 | ||
| 
 | ||
| SELECT tab1.col1, tab2.col2
 | ||
| FROM tab1, tab2
 | ||
| WHERE tab1.col1 = tab2.col1
 | ||
| UNION ALL
 | ||
| SELECT tab1.col1, NULL
 | ||
| FROM tab1
 | ||
| WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
 | ||
| ORDER BY col1		
 | ||
| 		
 | ||
| 
 | ||
| 4.24) Aynı andan birden fazla veritabanında nasıl işlem yapabilirim?
 | ||
| 
 | ||
| Mevcut veritabanınız dışındaki başka bir veritabanınızı sorgulamanızın bir yolu bulunmamaktadır. Bunun nedeni, 
 | ||
| PostgreSQL'in veritabanına özel sistem katalogları yüklemesidir. Bu nedenle, cross-database bir sorgunun nasıl 
 | ||
| davranacağını kestirmek zordur.
 | ||
| 
 | ||
| contrib/dblink fonksiyon çağrılarını kullanarak cross-database sorgulara izin verir. Tabii ki, bir istemci değişik 
 | ||
| veritabanlarına aynı anda erişim sağlayabilir ve bilgiyi bu şekilde birleştirebilir.
 | ||
| 
 | ||
| 4.25) Bir fonksiyondan nasıl çoklu satır ya da kolon döndürebilirim?
 | ||
| 
 | ||
| 7.3 sürümünde, bir fonksiyondan kolaylıkla çoklu satır ya da sütun döndürebilirsiniz. 
 | ||
| (http://techdocs.postgresql.org/guides/SetReturningFunctions)
 | ||
| 
 | ||
| 4.26) Neden Pl/PgSQL fonksiyonları içinden güvenli bir şekilde tablo yaratma/kaldırma işlemlerini yapamıyoruz?
 | ||
| 
 | ||
| PL/PgSQL fonksiyon içerikleri cache'ler. Bunun istenmeyen bir tarafı, eğer bir PL/PgSQL fonksiyonu geçici bir tabloya 
 | ||
| erişiyorsa ve bu tablo ileride kaldırılıp yeniden oluşturulduktan sonra fonksiyon yeniden çağrılırsa, fonksiyon 
 | ||
| çalışmayacaktır; çünkü cache'lenmiş fonksiyon hala eski geçici tabloyu gösteriyor olacaktır. Çözüm, geçici tablo 
 | ||
| erişimleri için PL/PgSQL'de EXECUTE kullanmaktır. Bu, sorgunun her seferinde yeniden işlenmesini sağlayacaktır.
 | ||
| 
 | ||
| 4.27) Hangi şifreleme seçenekleri bulunmaktadır?
 | ||
| 
 | ||
|     * contrib/pgcrypto SQL sorgularında kullanılabilmesi için şifreleme fonksiyonları içermektedir.
 | ||
|     * İstemciden sunucuya iletişimi şifrelemek için, sunucuda ssl seçeneği postgresql.conf içinde açık olmalıdır. 
 | ||
| Ayrıca,pg_hba.conf dosyası içinde host ya da hostssl kaydı mutlaka olmalıdır ve istemci sslmode kapatılmamalıdır. (Aynı 
 | ||
| zamanda,PostgreSQL'in doğal SSL bağlantıları dışında ssh ya da ssl gibi 3.parti şifrelenmiş veri iletimi de mümkündür.)
 | ||
|     * Veritabanı kullanıcı adı ve şifreleri 7.3 sürümü ile birlikte otomatik olarak şifrelenirler. Önceki sürümlerde, 
 | ||
| postgresql.conf içindeki PASSWORD_ENCRYPTION seçeneğini aktif hale getirmeniz gerekmektedir.
 | ||
|     * Sunucunun kendisini şifreli dosya sistemi üzerinde çalıştırabilirsiniz.
 | ||
| 
 | ||
| PostgreSQL Özelliklerini Genişletmek
 | ||
| 
 | ||
| 5.1) Kullanıcı-tanımlı bir fonksiyon yazdım. psql'de çalıştırdığım zaman neden core dump ediyor?
 | ||
| 
 | ||
| Sorunun nedeni birden fazla şey olabilir. Kullanıcı-tanımlı fonksiyonunuzu stand-alone bir programda çalıştırmayı 
 | ||
| deneyiniz.
 | ||
| 
 | ||
| 5.2) PostgreSQL'e nasıl yeni tipler/fonksiyonlar ekleyebilirim?
 | ||
| 
 | ||
| Çalışmalarınızı pgsql-hackers e-posta listesine gönderiniz. Kodunuz incelendikten sonra /contrib dizinine konacaktır.
 | ||
| 
 | ||
| 5.3) Bir tuple dondürmek icin bir C fonksiyonunu nasil yazarım?
 | ||
| 
 | ||
| PostgreSQL 7.3 sürümü ile birlikte, C, PL/PgSQL ve SQL kullanılarak tablo-döndüren fonksiyonlar tamamen 
 | ||
| desteklenmektedir. Ayrıntılı bilgi için PostgreSQL 7.3.2 Kullanıcı Rehberi'ne bakabilrisiniz. Bir örneği 
 | ||
| contrib/tablefunc içinde bulabilirsiniz.
 | ||
| 
 | ||
| 5.4) Bir kaynak dosyasında değişiklik yaptım. Yeniden derlememe rağmen değişiklik geçerli olmuyor. Neden?
 | ||
| 
 | ||
| Makefile'lar include dosyaları için tam bir bağımlılık içermezler. Öncelikle make clean, ardından da baska bir make 
 | ||
| işlemi yapmanız gerekir. GCC kullanıyorsanız, configure betiğinin --enable-depend seçeneğini, derleyicinin 
 | ||
| bağımlılıkları otomatik olarak hesaplaması için kullanabilirsiniz.
 | ||
| 
 |