<P>PostgreSQL 8.0 s<EFBFBD>r<EFBFBD>m<EFBFBD> ile , PostgreSQL art<EFBFBD>k Win2000, WinXP ve Win2003 gibi Microsoft
Windows NT tabanl<EFBFBD> i<EFBFBD>letim sistemlerinde do<EFBFBD>al olarak <EFBFBD>al<EFBFBD><EFBFBD>maya ba<EFBFBD>lam<EFBFBD><EFBFBD>t<EFBFBD>r. Paketlenmi<EFBFBD> bir
<h4><aname="1.8">1.8</a>) Hangi belgelere ula<EFBFBD>abilirim?</h4>
<p>Da<EFBFBD><EFBFBD>t<EFBFBD>m<EFBFBD>n i<EFBFBD>inde, kitap<EFBFBD><EFBFBD>klar, kitap<EFBFBD><EFBFBD>k sayfalar<EFBFBD> ve baz<EFBFBD> k<EFBFBD><EFBFBD><EFBFBD>k <EFBFBD>rnekler verilmektedir.
<code>/doc</code> dizinine bak<EFBFBD>n<EFBFBD>z. Ayr<EFBFBD>ca, bu el kitap<EFBFBD><EFBFBD>klar<EFBFBD>n<EFBFBD> online olarak
<p>PostgreSQL, di<EFBFBD>er ticari ve a<EFBFBD><EFBFBD>k kaynak kodlu veritabanlar<EFBFBD>yla yak<EFBFBD>n ba<EFBFBD>ar<EFBFBD>m<EFBFBD> sa<EFBFBD>lar.
Baz<EFBFBD> a<EFBFBD><EFBFBD>lardan daha h<EFBFBD>zl<EFBFBD>d<EFBFBD>r, di<EFBFBD>er a<EFBFBD><EFBFBD>lardan da yava<EFBFBD>t<EFBFBD>r. MySQL ya da daha zay<EFBFBD>f
veritabanlar<EFBFBD> ile kar<EFBFBD><EFBFBD>la<EFBFBD>t<EFBFBD>r<EFBFBD>ld<EFBFBD><EFBFBD><EFBFBD>nda, <code>INSERT/UPDATE</code> i<EFBFBD>lemlerinde,
<i>transaction</i> bazl<EFBFBD><EFBFBD>al<EFBFBD>st<EFBFBD><EFBFBD><EFBFBD>m<EFBFBD>z i<EFBFBD>in daha yava<EFBFBD><EFBFBD>z. MySQL, yukar<EFBFBD>daki "<EFBFBD>zellikler"
k<EFBFBD>sm<EFBFBD>nda belirtilenlerden hi<EFBFBD> birine sahip de<EFBFBD>ildir. Biz, ba<EFBFBD>ar<EFBFBD>m<EFBFBD>m<EFBFBD>z<EFBFBD> her s<EFBFBD>r<EFBFBD>mde
artt<EFBFBD>rsak da, esneklik ve geli<EFBFBD>mi<EFBFBD><EFBFBD>zellikler i<EFBFBD>in yap<EFBFBD>lanm<EFBFBD><EFBFBD> durumday<EFBFBD>z.
PostgreSQL'i MySQL ile kar<EFBFBD><EFBFBD>la<EFBFBD>t<EFBFBD>ran <EFBFBD>u web sitesine bakabilirsiniz:
<EFBFBD>ok iyi test edilmi<EFBFBD>, dengeli <EFBFBD>al<EFBFBD>san minimum say<EFBFBD>da hata i<EFBFBD>eren kod sunmaya <EFBFBD>al<EFBFBD><EFBFBD><EFBFBD>yoruz.
Her bir s<EFBFBD>r<EFBFBD>m en az 1 ayl<EFBFBD>k beta testlerinden ge<EFBFBD>irilmektedir. S<EFBFBD>r<EFBFBD>m ge<EFBFBD>mi<EFBFBD>ine bakarsan<EFBFBD>z,
<EFBFBD>retime haz<EFBFBD>r, dengeli ve kararl<EFBFBD> kodlar sundu<EFBFBD>umuzu g<EFBFBD>rebilirsiniz. Bu alanda, di<EFBFBD>er
<h4><aname="1.15">1.15</a>) PostgreSQL'e maddi a<EFBFBD><EFBFBD>dan nas<EFBFBD>l destek olabilirim?</h4>
<p>PostgreSQL, 1996 y<EFBFBD>l<EFBFBD>ndan beri 1. s<EFBFBD>n<EFBFBD>f altyap<EFBFBD>ya sahiptir. Bunun i<EFBFBD>in, y<EFBFBD>llar
boyu <EFBFBD>al<EFBFBD><EFBFBD><EFBFBD>p bu altyap<EFBFBD>y<EFBFBD> olu<EFBFBD>turup y<EFBFBD>neten Marc Fournier'e te<EFBFBD>ekk<EFBFBD>rler.</p>
<p>Bir a<EFBFBD><EFBFBD>k kaynak kodlu proje i<EFBFBD>in, kaliteli altyap<EFBFBD><EFBFBD>ok <EFBFBD>nemlidir. Bu altyap<EFBFBD>,
projenin kesilmesini <EFBFBD>nler ve projenin ilerlemesini h<EFBFBD>zland<EFBFBD>r<EFBFBD>r.</p>
<p>Tabii ki bu altyap<EFBFBD> ucuz de<EFBFBD>ildir. <EFBFBD><EFBFBD>lerin y<EFBFBD>r<EFBFBD>mesi i<EFBFBD>in <EFBFBD>e<EFBFBD>itli y<EFBFBD>l<EFBFBD>k ve anl<EFBFBD>k
harcamalar<EFBFBD>m<EFBFBD>z olmaktad<EFBFBD>r. E<EFBFBD>er siz ya da <EFBFBD>irketinizin bu <EFBFBD>abam<EFBFBD>za ba<EFBFBD><EFBFBD><EFBFBD>ta
<p>E<EFBFBD>er hata, "<code><EFBFBD>pcSemaphoreCreate: semget failed (No space left on device)</code>"
ise, <EFBFBD>ekirde<EFBFBD>iniz yeterli <i>semaphore</i> ile yap<EFBFBD>land<EFBFBD>r<EFBFBD>lmam<EFBFBD><EFBFBD> demektir. Postgres, her
bir potansiyel <i>backend</i> i<EFBFBD>in bir <i>semaphore</i> gereksinimi duyar. Ge<EFBFBD>ici
bir <EFBFBD><EFBFBD>z<EFBFBD>m, postmaster<EFBFBD><i>backend</i> i<EFBFBD>lemleri i<EFBFBD>in daha az miktarda s<EFBFBD>n<EFBFBD>rla
ba<EFBFBD>latmak olabilir. <code>-N</code>'i varsay<EFBFBD>lan de<EFBFBD>er olan 32'den k<EFBFBD><EFBFBD><EFBFBD>k bir
de<EFBFBD>erle ba<EFBFBD>lat<EFBFBD>n<EFBFBD>z. Daha kal<EFBFBD>c<EFBFBD> bir <EFBFBD><EFBFBD>z<EFBFBD>m, <EFBFBD>ekirde<EFBFBD>inizin <code>SEMMNS</code> ve
PostgreSQL'in sorgunuzu nas<EFBFBD>l yorumlad<EFBFBD><EFBFBD><EFBFBD>n<EFBFBD> ve hangi <i>index</i>'leri kulland<EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>
g<EFBFBD>rmenize izin verir.</p>
<p>E<EFBFBD>er cok fazla <code>INSERT</code> i<EFBFBD>lemi yap<EFBFBD>yorsan<EFBFBD>z, bunlar<EFBFBD> b<EFBFBD>y<EFBFBD>k bir
toplu i<EFBFBD>lem dosyas<EFBFBD>kullan<EFBFBD>p <code>COPY</code> komutu ile veritaban<EFBFBD>na girmeyi
deneyiniz. Bu, tekil <code>INSERT</code>'lerden daha h<EFBFBD>zl<EFBFBD>d<EFBFBD>r. <EFBFBD>kinci olarak,
<code>BEGIN WORK/COMMIT</code><i>transaction</i> blo<EFBFBD>u i<EFBFBD>inde olmayan ifadeler kendi
<i>transaction</i>'lar<EFBFBD>ndaym<EFBFBD><EFBFBD> gibi d<EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>l<EFBFBD>r. <EFBFBD>oklu ifadeleri tek bir
<i>transaction</i> blo<EFBFBD>u i<EFBFBD>inde yapabilirsiniz. Bu, <i>transaction overhead</i>'ini
d<EFBFBD><EFBFBD><EFBFBD>recektir. Tek bir <i>transaction</i> blo<EFBFBD>u i<EFBFBD>inde birden <EFBFBD>ok ifadeyi <EFBFBD>al<EFBFBD><EFBFBD>t<EFBFBD>rmay<EFBFBD>
deneyebilirsiniz. Bu da ayn<EFBFBD><EFBFBD>ekilde, <i>transaction overhead</i>'ini d<EFBFBD><EFBFBD><EFBFBD>r<EFBFBD>r.</p>
<p><EFBFBD>e<EFBFBD>itli ayarlama se<EFBFBD>enekleri mevcuttur. <code>fsync()</code> i<EFBFBD>lemini, postmaster'<EFBFBD>
<code>-o -F</code> se<EFBFBD>ene<EFBFBD>i ile ba<EFBFBD>latarak devre d<EFBFBD><EFBFBD><EFBFBD> b<EFBFBD>rakabilirsiniz. Bu i<EFBFBD>lem,
<code>fsync()</code>'lerin her <i>transactiondan</i> sonra diski <i>flush</i> etmesini
engelleyecektir.</p>
<p>Ayn<EFBFBD> zamanda, postmaster'i <code>-B</code> se<EFBFBD>ene<EFBFBD>i ile ba<EFBFBD>lat<EFBFBD>p, <i>backend</i>
E<EFBFBD>er bu parametreyi <EFBFBD>ok y<EFBFBD>ksek tutarsan<EFBFBD>z, <EFBFBD>ekirde<EFBFBD>inizin <i>shared memory</i>
b<EFBFBD>lgesindeki limiti a<EFBFBD>ma olas<EFBFBD>l<EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>z y<EFBFBD>z<EFBFBD>nden postmaster ba<EFBFBD>layamayabilir. Her bir
tampon (<i>buffer</i>) 8K'd<EFBFBD>r. <EFBFBD>ntan<EFBFBD>ml<EFBFBD> say<EFBFBD> ise 64 tampondur.</p>
<EFBFBD>al<EFBFBD><EFBFBD>t<EFBFBD>r<EFBFBD>rsan<EFBFBD>z, bir <EFBFBD>ok <code>assert() backend</code> cal<EFBFBD><EFBFBD>mas<EFBFBD>n<EFBFBD> g<EFBFBD>zlemler ve
beklenmeyen bir durumda program<EFBFBD> durdurur.</p>
<p>Postmaster ve postgres <EFBFBD>e<EFBFBD>itli hata ay<EFBFBD>klama se<EFBFBD>eneklerine sahiptir. <EFBFBD>ncelikle,
postmaster'<EFBFBD> ba<EFBFBD>latt<EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>zda, standart <EFBFBD><EFBFBD>kt<EFBFBD>y<EFBFBD> ve hatalar<EFBFBD> bir log dosyas<EFBFBD>na
<p>E<EFBFBD>er postmaster <EFBFBD>al<EFBFBD><EFBFBD><EFBFBD>yorsa, bir pencerede psql'i <EFBFBD>al<EFBFBD><EFBFBD>t<EFBFBD>r<EFBFBD>n ve psql taraf<EFBFBD>ndan
s<EFBFBD>reci ile ili<EFBFBD>kilendirmek i<EFBFBD>in bir hata ay<EFBFBD>klar<EFBFBD>c<EFBFBD> kullan<EFBFBD>n. Sorgular<EFBFBD> psql arac<EFBFBD>l<EFBFBD><EFBFBD><EFBFBD>
ile <EFBFBD>al<EFBFBD><EFBFBD>t<EFBFBD>rabilirsiniz. E<EFBFBD>er postgres ba<EFBFBD>lang<EFBFBD>c<EFBFBD>nda hata ay<EFBFBD>klamak istiyorsan<EFBFBD>z,
<code>PGOPTIONS="-W n"</code> se<EFBFBD>ene<EFBFBD>ini ayarlayabilir ve psql'i ba<EFBFBD>latabilirsiniz.
Bu i<EFBFBD>lem, ba<EFBFBD>lang<EFBFBD>c<EFBFBD>n <code>n</code> saniye kadar gecikmesini sa<EFBFBD>layacakt<EFBFBD>r; b<EFBFBD>ylece
hata ay<EFBFBD>klay<EFBFBD>c<EFBFBD>y<EFBFBD> s<EFBFBD>rece ili<EFBFBD>kilendirdikten sonra ba<EFBFBD>lang<EFBFBD><EFBFBD> s<EFBFBD>recinin devam etmesini
sa<EFBFBD>layabilirsiniz.</p>
<p>postgres program<EFBFBD> hata ay<EFBFBD>klama ve ba<EFBFBD>ar<EFBFBD>m <EFBFBD>l<EFBFBD><EFBFBD>mleri i<EFBFBD>in <code>-s</code>,
<code>-A</code> ve <code>-t</code> se<EFBFBD>eneklerine sahiptir.</p>
<h4><aname="3.8">3.8</a>) Ba<EFBFBD>lanmaya <EFBFBD>al<EFBFBD><EFBFBD><EFBFBD>rken, neden "<i>Sorry, too many
<code>MAXUPRC</code> ve a<EFBFBD><EFBFBD>labilecek dosyalar<EFBFBD>n maksimum say<EFBFBD>s<EFBFBD> olan <code>NFILE</code>
ve <code>NINODE</code> de<EFBFBD>erlerini kar<EFBFBD><EFBFBD>t<EFBFBD>rmakt<EFBFBD>r. Bunun nedeni, PostgreSQL'in izin
verilen <i>backend</i> s<EFBFBD>re<EFBFBD>lerinin say<EFBFBD>s<EFBFBD><EFBFBD>zerinde bir s<EFBFBD>n<EFBFBD>r<EFBFBD> olmas<EFBFBD>d<EFBFBD>r. B<EFBFBD>ylelikle
sistem kaynaklar<EFBFBD>n<EFBFBD>n d<EFBFBD><EFBFBD><EFBFBD>na <EFBFBD><EFBFBD>k<EFBFBD>lmayacakt<EFBFBD>r.</p>
<p>PostgreSQL'in 6.5 s<EFBFBD>r<EFBFBD>m<EFBFBD>ne kadar, en fazla <i>backend</i> say<EFBFBD>s<EFBFBD> 64 idi ve bunu
<p>PostgreSQL tak<EFBFBD>m<EFBFBD> ara s<EFBFBD>r<EFBFBD>mlerde sadece k<EFBFBD><EFBFBD><EFBFBD>k de<EFBFBD>i<EFBFBD>iklikler yapmaktad<EFBFBD>r;
bu y<EFBFBD>zden 7.2 s<EFBFBD>r<EFBFBD>m<EFBFBD>nden 7.2.1'e y<EFBFBD>kseltmek <i>dump/restore</i> i<EFBFBD>lemi
gerekmemektedir. Ancak, esas s<EFBFBD>r<EFBFBD>mlerde (<EFBFBD>rnek: 7.2'den 7.3'e) <EFBFBD>o<EFBFBD>unlukla sistem
tablolar<EFBFBD>n<EFBFBD>n ve veri dosyalar<EFBFBD>n<EFBFBD>n i<EFBFBD> yap<EFBFBD>s<EFBFBD> de<EFBFBD>i<EFBFBD>tirilir. Bu de<EFBFBD>i<EFBFBD>iklikler <EFBFBD>o<EFBFBD>unlukla
karma<EFBFBD><EFBFBD>kt<EFBFBD>r; dolay<EFBFBD>s<EFBFBD>yla veri dosyalar<EFBFBD>n<EFBFBD>n geriye d<EFBFBD>n<EFBFBD>k uyumlulu<EFBFBD>u i<EFBFBD>lemlerini
yapm<EFBFBD>yoruz. <i>Dump</i> i<EFBFBD>lemi, veriyi genel bi<EFBFBD>imde alaca<EFBFBD><EFBFBD>ndan yeniden y<EFBFBD>kleme
esnas<EFBFBD>nda veri, yeni i<EFBFBD> bi<EFBFBD>ime uygun <EFBFBD>ekilde yerle<EFBFBD>tirilecektir.</p>
<h4><aname="3.11">3.11</a>) Nas<EFBFBD>l bir donan<EFBFBD>m kullanmal<EFBFBD>y<EFBFBD>m? </h4>
<p> PC donan<EFBFBD>m<EFBFBD> tamamen uyumlu oldu<EFBFBD>u i<EFBFBD>in, insanlar t<EFBFBD>m PC donan<EFBFBD>mlar<EFBFBD>n<EFBFBD>n ayn<EFBFBD> kalitede oldu<EFBFBD>unu
d<EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>rler. Oysa b<EFBFBD>yle de<EFBFBD>ildir. ECC RAM, SCSI ve kaliteli anakartlar daha ucuz donan<EFBFBD>mlara g<EFBFBD>re daha
<EFBFBD>ok g<EFBFBD>venilirlerdir ve ba<EFBFBD>ar<EFBFBD>mlar<EFBFBD> daha y<EFBFBD>ksektir. PostgreSQL hemen hemen t<EFBFBD>m donan<EFBFBD>mda
<EFBFBD>al<EFBFBD><EFBFBD>abilmektedir, ancak g<EFBFBD>venilirlik ve ba<EFBFBD>ar<EFBFBD>m <EFBFBD>nemli ise donan<EFBFBD>m se<EFBFBD>eneklerini <EFBFBD>ok iyi ara<EFBFBD>t<EFBFBD>rmak
gereklidir. E-posta listelerimi donan<EFBFBD>mlarla ilgili sorular ve de ticaret i<EFBFBD>in kullan<EFBFBD>labilir.</p>
<p><EFBFBD>lk birka<EFBFBD> sat<EFBFBD>r<EFBFBD> almak isteseniz bile, t<EFBFBD>m sorgu de<EFBFBD>erlendirilmek durumunda kal<EFBFBD>nabilir. ORDER
BY i<EFBFBD>eren bir sorgu d<EFBFBD><EFBFBD><EFBFBD>n<EFBFBD>n. E<EFBFBD>er ORDER BY i<EFBFBD>e e<EFBFBD>le<EFBFBD>en bir index varsa, PostgreSQL istenen ilk birka<EFBFBD>
sat<EFBFBD>r<EFBFBD> i<EFBFBD>leyebilir, ya da t<EFBFBD>m sorgu istenen sat<EFBFBD>rlar <EFBFBD>retilene kadar i<EFBFBD>lenebilir. </b></p>
<h4><aname="4.3">4.3</a>) psql'in i<EFBFBD>inde g<EFBFBD>rd<EFBFBD>g<EFBFBD>m tablolar<EFBFBD>n ya da di<EFBFBD>er
<h4><aname="4.5">4.5</a>) Bir sat<EFBFBD>r, tablo ve veritaban<EFBFBD> i<EFBFBD>in en
fazla b<EFBFBD>y<EFBFBD>kl<EFBFBD>k nedir?</h4>
<p>S<EFBFBD>n<EFBFBD>rlar:</p>
<p>Veritaban<EFBFBD> i<EFBFBD>in en fazla b<EFBFBD>y<EFBFBD>kl<EFBFBD>k nedir?<br>S<EFBFBD>n<EFBFBD>rs<EFBFBD>z (32 TB'l<EFBFBD>k veritaban<EFBFBD> bulunmaktad<EFBFBD>r)<br><br>
Bir tablo i<EFBFBD>in en fazla b<EFBFBD>y<EFBFBD>kl<EFBFBD>k nedir?<br>32 TB<br><br>
Bir sat<EFBFBD>r i<EFBFBD>in en fazla b<EFBFBD>y<EFBFBD>kl<EFBFBD>k nedir?<br>1.6 TB<br><br>
Bir alan i<EFBFBD>in en fazla b<EFBFBD>y<EFBFBD>kl<EFBFBD>k nedir?<br>1 GB<br><br>
Tabloda en fazla sat<EFBFBD>r say<EFBFBD>s<EFBFBD> ka<EFBFBD>t<EFBFBD>r?<br>S<EFBFBD>n<EFBFBD>rs<EFBFBD>z<br><br>
Bir tabloda olabilecek en fazla kolon say<EFBFBD>s<EFBFBD> ka<EFBFBD>t<EFBFBD>r?<br>Kolon tiplerine ba<EFBFBD>l<EFBFBD> olarak 250-1600<br><br>
Bir tabloda olabilecek en fazla <i>index</i> say<EFBFBD>s<EFBFBD> ka<EFBFBD>t<EFBFBD>r?<br>S<EFBFBD>n<EFBFBD>rs<EFBFBD>z</p>
<p>Tabii ki bunlar asl<EFBFBD>nda s<EFBFBD>n<EFBFBD>rs<EFBFBD>z degildir. Burada belirtilen s<EFBFBD>n<EFBFBD>rlar, fiziksel
s<EFBFBD>n<EFBFBD>rlar<EFBFBD>n haricindeki s<EFBFBD>n<EFBFBD>rlard<EFBFBD>r. Bo<EFBFBD> disk alan<EFBFBD>, haf<EFBFBD>za/takas alan<EFBFBD> na ba<EFBFBD>l<EFBFBD>
s<EFBFBD>n<EFBFBD>rlamalar vard<EFBFBD>r. Ba<EFBFBD>ar<EFBFBD>m, s<EFBFBD>n<EFBFBD>r de<EFBFBD>erlere yakla<EFBFBD>t<EFBFBD>k<EFBFBD>a, ya da de<EFBFBD>erler <EFBFBD>ok b<EFBFBD>y<EFBFBD>k
oldu<EFBFBD>unda d<EFBFBD><EFBFBD>ebilir.</p>
<p>Bir tablo i<EFBFBD>in b<EFBFBD>y<EFBFBD>kl<EFBFBD>k s<EFBFBD>n<EFBFBD>r<EFBFBD> olan 32 TB, i<EFBFBD>letim sisteminin b<EFBFBD>y<EFBFBD>k dosya deste<EFBFBD>i olup
Bu dosya, veritaban<EFBFBD> sistem dosyalar<EFBFBD>ndan bilgiyi almak i<EFBFBD>in gereksinim duyulan
bir <EFBFBD>ok <code>SELECT</code>'leri g<EFBFBD>sterir.</p>
<h4><aname="4.8">4.8</a>) Sorgular<EFBFBD>m cok yava<EFBFBD>, ya da <i>index</i>'lerimi
kullanm<EFBFBD>yorlar. Neden?</h4>
<p>Indexler her sorgu taraf<EFBFBD>ndan otomatik olarak kullan<EFBFBD>lmazlar. Indexler e<EFBFBD>er bir
tablonun b<EFBFBD>y<EFBFBD>kl<EFBFBD><EFBFBD><EFBFBD> minimum bir b<EFBFBD>y<EFBFBD>kl<EFBFBD>kten fazla ise ve sorgu tablodaki sat<EFBFBD>rlar<EFBFBD>n sadece k<EFBFBD><EFBFBD><EFBFBD>k bir
y<EFBFBD>zdesini se<EFBFBD>iyorsa kullan<EFBFBD>l<EFBFBD>r. Bunun nedeni, index eri<EFBFBD>iminin neden oldu<EFBFBD>u raslansal disk eri<EFBFBD>imi
nin diskin ya da tablonun s<EFBFBD>ral<EFBFBD> okunmas<EFBFBD>ndan daha yavas olabilmesidir.</p>
<p>Indexler normalde <small>ORDER BY</small> sorgular<EFBFBD> ya da join i<EFBFBD>lemlerini ger<EFBFBD>ekle<EFBFBD>tirmek i<EFBFBD>in
kullan<EFBFBD>lmazlar. A<EFBFBD><EFBFBD>k bir s<EFBFBD>ralamay<EFBFBD> takip eden s<EFBFBD>ral<EFBFBD> bir arama (sequential scan), b<EFBFBD>y<EFBFBD>k bir tabloda index
aramas<EFBFBD> yapmaktan genelde daha h<EFBFBD>zl<EFBFBD>d<EFBFBD>r.</p>
Ancak, <small>ORDER BY</small> ile birle<EFBFBD>mi<EFBFBD><small>LIMIT</small>
genellikle bir index kullanacakt<EFBFBD>r; <EFBFBD><EFBFBD>nk<EFBFBD> tablonun sadece belirli bir miktar<EFBFBD> d<EFBFBD>nd<EFBFBD>r<EFBFBD>lecektir.
Asl<EFBFBD>nda, MAX() ve MIN() fonksiyonlar<EFBFBD>n<EFBFBD>n index kullanmamalar<EFBFBD>ndan dolay<EFBFBD>, bu gibi de<EFBFBD>erleri ORDER BY ve LIMIT
'off'</code> kullan<EFBFBD>n ve index kullanan aramalar<EFBFBD>n hala daha h<EFBFBD>zl<EFBFBD> olup olmad<EFBFBD><EFBFBD><EFBFBD>n<EFBFBD> g<EFBFBD>r<EFBFBD>n.</p>
<p><code>LIKE</code> ya da <code>~</code> gibi operat<EFBFBD>rler kullan<EFBFBD>yorsan<EFBFBD>z,
<i>index</i>'ler sadece a<EFBFBD>a<EFBFBD><EFBFBD>daki ko<EFBFBD>ullarda kullan<EFBFBD>labilir:</p>
<ul>
<li>Arama dizininin ba<EFBFBD><EFBFBD>, dizinin ba<EFBFBD><EFBFBD> ile ba<EFBFBD>lanmal<EFBFBD>d<EFBFBD>r. Yani,
<ul><li><code>LIKE</code> sorgular<EFBFBD><code>%</code> ile ba<EFBFBD>lamamal<EFBFBD>d<EFBFBD>r.</li>
<li>D<EFBFBD>zenli ifade sorgular<EFBFBD><code>^</code> i<EFBFBD>e ba<EFBFBD>lamamal<EFBFBD>d<EFBFBD>r.</li></ul></li>
<li>Arama metni bir karakter s<EFBFBD>n<EFBFBD>f<EFBFBD> ile ba<EFBFBD>layamaz. <EFBFBD>rnek: <code>[a-e]</code></li>
<li><code>ILIKE</code> ve <code>~*</code> gibi b<EFBFBD>y<EFBFBD>k/k<EFBFBD><EFBFBD><EFBFBD>k harfe duyars<EFBFBD>z
aramalar <i>index</i>'lerden yararlanmazlar. Onun yerine, b<EFBFBD>l<EFBFBD>m 4.12'de anlat<EFBFBD>lan
<p>R-tree index, uzaysal (spatial) verileri indexlemek i<EFBFBD>in kullan<EFBFBD>l<EFBFBD>r. Bir hash
index, dizi aramalar<EFBFBD>nda (range search) kullan<EFBFBD>lamaz. B-tree index dizi aramalar<EFBFBD>nda sadece tek
boyutlu <EFBFBD>al<EFBFBD><EFBFBD>maktad<EFBFBD>r. R-tree, <EFBFBD>ok boyutlu veriyi destekler. <EFBFBD>rne<EFBFBD>in, e<EFBFBD>er bir R-tree index point
veri tipi <EFBFBD>zerinde in<EFBFBD>a edililebilirse, sistem "select all points within a bounding rectangle"
gibi sorgulara daha verimli yan<EFBFBD>tlar verecektir.</p>
<h4><aname="4.12">4.12</a>) D<EFBFBD>zenli ifade (<i>Regular Expression</i>) aramalar<EFBFBD>n<EFBFBD>
ve b<EFBFBD>y<EFBFBD>k/k<EFBFBD><EFBFBD><EFBFBD>k harfe duyars<EFBFBD>z aramalar<EFBFBD> nas<EFBFBD>l yapabilirim?
Bu b<EFBFBD>y<EFBFBD>k(k<EFBFBD><EFBFBD><EFBFBD>k harfe duyarl<EFBFBD> aramalar i<EFBFBD>in <i>index</i>'i nas<EFBFBD>l kullanabilirim?</h4>
<p><code>~</code> operat<EFBFBD>r<EFBFBD> d<EFBFBD>zenli ifade e<EFBFBD>le<EFBFBD>mesi ve <code>~*</code> b<EFBFBD>y<EFBFBD>k/k<EFBFBD><EFBFBD><EFBFBD>k
harfe duyars<EFBFBD>z d<EFBFBD>zenli ifade e<EFBFBD>le<EFBFBD>mesi yapar. B<EFBFBD>y<EFBFBD>k/k<EFBFBD><EFBFBD><EFBFBD>k harfe duyarl<EFBFBD> olan
<code>LIKE</code>'<EFBFBD>n b<EFBFBD>y<EFBFBD>k/k<EFBFBD><EFBFBD><EFBFBD>k harfe duyars<EFBFBD>z olan bi<EFBFBD>imi <code>ILIKE</code>'t<EFBFBD>r
ve PostgreSQL 7.1 s<EFBFBD>r<EFBFBD>m<EFBFBD> ile birlikte gelmi<EFBFBD>tir.</p>
<p>B<EFBFBD>y<EFBFBD>k-k<EFBFBD><EFBFBD><EFBFBD>k harfe duyars<EFBFBD>z e<EFBFBD>itlik kar<EFBFBD><EFBFBD>la<EFBFBD>t<EFBFBD>rmalar<EFBFBD> a<EFBFBD>a<EFBFBD><EFBFBD>daki gibi ifade edilir:</p>
<pre>
SELECT *
FROM tab
WHERE lower(col) = 'abc'
</pre>
<p>Bu standart bir <i>index</i> yaratmayacakt<EFBFBD>r. Ancak e<EFBFBD>er fonksiyonel bir
<i>index</i> yarat<EFBFBD>rsan<EFBFBD>z; o kullan<EFBFBD>lacakt<EFBFBD>r:</p>
<pre>CREATE INDEX tabindex on tab (lower(col));</pre>
<h4><aname="4.13">4.13</a>) Bir sorguda, bir alanin "<code>NULL</code>" oldu<EFBFBD>unu
nas<EFBFBD>l ortaya <EFBFBD><EFBFBD>karabilirim?</h4>
<p>Kolonu, <code>IS NULL</code> ve <code>IS NOT NULL</code> ile test edebilirsiniz.</p>
<h4><aname="4.14">4.14</a>) <EFBFBD>esitli karakter tipleri aras<EFBFBD>ndaki farklar nelerdir?</h4>
<p><EFBFBD><EFBFBD> adlar<EFBFBD> (<i>internal name</i>) sistem kataloglar<EFBFBD>n<EFBFBD> ve
baz<EFBFBD> hata mesajlar<EFBFBD>n<EFBFBD> incelerken g<EFBFBD>receksiniz.</p>
<p><EFBFBD>lk d<EFBFBD>rt veri tipi "<i>varlena</i>" tipidir (yani, diskteki ilk 4 bayt uzunluktur;
devam<EFBFBD> da veridir.) Dolay<EFBFBD>s<EFBFBD>yla, kullan<EFBFBD>lan ger<EFBFBD>ek alan, belirtilen alandan biraz
daha b<EFBFBD>y<EFBFBD>kt<EFBFBD>r. Ancak, bu veri tipleri, s<EFBFBD>k<EFBFBD><EFBFBD>t<EFBFBD>r<EFBFBD>lmaya tabi tutulabilir; dolay<EFBFBD>s<EFBFBD>yla
disk alan<EFBFBD> beklenilenden k<EFBFBD><EFBFBD><EFBFBD>k olabilir. <code>VARCHAR(<i>n</i>)</code> b<EFBFBD>y<EFBFBD>kl<EFBFBD><EFBFBD><EFBFBD>
artabilen ama en b<EFBFBD>y<EFBFBD>k uzunlu<EFBFBD>u s<EFBFBD>n<EFBFBD>rl<EFBFBD> olan verileri saklamak i<EFBFBD>in en uygun y<EFBFBD>ntemdir.
<code>TEXT</code>, 1 GB b<EFBFBD>y<EFBFBD>kl<EFBFBD><EFBFBD>e kadar olan verileri tutmak i<EFBFBD>in kullan<EFBFBD>l<EFBFBD>r.</p>
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");</pre>
<P>Di<EFBFBD>er sorgular i<EFBFBD>in new_id'de yeni de<EFBFBD>erin saklanmas<EFBFBD> gerekir. Otomatik olarak yarat<EFBFBD>lan SEQUENE nesnesinin ad<EFBFBD>,
her say<EFBFBD>, tekil bir OID al<EFBFBD>r. initdb i<EFBFBD>lemi s<EFBFBD>ras<EFBFBD>nda yarat<EFBFBD>lan t<EFBFBD>m OID'ler 16384'ten k<EFBFBD><EFBFBD><EFBFBD>kt<EFBFBD>r
(backend/access/transam.h). Kullan<EFBFBD>c<EFBFBD>lar taraf<EFBFBD>ndan yarat<EFBFBD>lan t<EFBFBD>m OID'ler bu say<EFBFBD>ya e<EFBFBD>it ya da bu
say<EFBFBD>dan b<EFBFBD>y<EFBFBD>kt<EFBFBD>r. Varsay<EFBFBD>lan durumda, t<EFBFBD>m bu OIDler sadece bir tablo ya da veritaban<EFBFBD>nda de<EFBFBD>il, t<EFBFBD>m
kullan<EFBFBD>r. Bu OIDler belirli kullan<EFBFBD>c<EFBFBD> sat<EFBFBD>rlar<EFBFBD>n<EFBFBD> belirtmek i<EFBFBD>in kullanabilir ve join i<EFBFBD>lemlerinde
kullan<EFBFBD>l<EFBFBD>r. OID de<EFBFBD>erlerini saklamak i<EFBFBD>in OID kolon tipini kullanman<EFBFBD>z <EFBFBD>nerinir. Daha h<EFBFBD>zl<EFBFBD> bir
eri<EFBFBD>im i<EFBFBD>in, OID alan<EFBFBD>nda bir index yaratabilirsiniz.</p>
<p>OID'ler yeni sat<EFBFBD>rlara, t<EFBFBD>m veritabanlar<EFBFBD> taraf<EFBFBD>nda kullan<EFBFBD>lan ortak bir alandan atan<EFBFBD>rlar. E<EFBFBD>er
OID'i ba<EFBFBD>ka bir de<EFBFBD>ere e<EFBFBD>itlemek isterseniz ya da tablonun bir kopyas<EFBFBD>n<EFBFBD> orijinal OIDler ile
<EFBFBD><EFBFBD>karmak isterseniz, bu m<EFBFBD>mk<EFBFBD>nd<EFBFBD>r:</p>
<pre>
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';
</pre>
<p>OIDler 4-bit tamsay<EFBFBD> olarak saklan<EFBFBD>rlar ve 4 milyarda overflow olacakt<EFBFBD>r. Kimse
bu say<EFBFBD>ya ula<EFBFBD>t<EFBFBD><EFBFBD><EFBFBD>na dair bir bilgi iletmedi ve bu s<EFBFBD>n<EFBFBD>r<EFBFBD> kimse bu s<EFBFBD>n<EFBFBD>ra ula<EFBFBD>madan kald<EFBFBD>raca<EFBFBD><EFBFBD>z.</p>
<p>TIDler, belirli fiziksel sat<EFBFBD>rlar block ve offset de<EFBFBD>erleri ile belirtmekte kullan<EFBFBD>l<EFBFBD>r. TIDler,
sat<EFBFBD>rlar de<EFBFBD>i<EFBFBD>ti<EFBFBD>inde ya da yeniden y<EFBFBD>klendi<EFBFBD>inde de<EFBFBD>i<EFBFBD>irler. Index girdileri taraf<EFBFBD>ndan fiziksel
<p>Kabu<EFBFBD>unuza ba<EFBFBD>l<EFBFBD> olarak, bunlardan sadece biri olumlu sonu<EFBFBD> verecektir, ama
bu i<EFBFBD>lem veri segment s<EFBFBD>n<EFBFBD>r<EFBFBD>n<EFBFBD>z<EFBFBD> artt<EFBFBD>racak, ve belki de sorgunuzun tamamlanmas<EFBFBD>n<EFBFBD>
sa<EFBFBD>layacakt<EFBFBD>r. Bu komut, varolan i<EFBFBD>leme (<i>current process</i>) ve komut <EFBFBD>al<EFBFBD><EFBFBD>t<EFBFBD>r<EFBFBD>ld<EFBFBD>ktan
sonraki t<EFBFBD>m alt i<EFBFBD>lemlere uygulan<EFBFBD>r. E<EFBFBD>er SQL istemcinizle, <i>backend</i>'in <EFBFBD>ok
fazla veri d<EFBFBD>nd<EFBFBD>rmesi nedeniyle bir sorun ya<EFBFBD><EFBFBD>yorsan<EFBFBD>z, bunu istemciyi ba<EFBFBD>latmadan
<EFBFBD>nce deneyiniz.</p>
<h4><aname="4.19">4.19</a>) Hangi PostgreSQL s<EFBFBD>r<EFBFBD>m<EFBFBD>n<EFBFBD><EFBFBD>al<EFBFBD><EFBFBD>t<EFBFBD>rd<EFBFBD><EFBFBD><EFBFBD>m<EFBFBD> nas<EFBFBD>l g<EFBFBD>rebilirim?</h4>
<p><EFBFBD>u anda, PostgreSQL kurallar<EFBFBD> large objectleri transaction commit edildi<EFBFBD>inde kapatarak
uygulamaktad<EFBFBD>r. Dolay<EFBFBD>s<EFBFBD>yla handle ile yap<EFBFBD>lacak ilk <EFBFBD>ey <i>invalid large obj descriptor</i> hatas<EFBFBD>
ile sonu<EFBFBD>lanacakt<EFBFBD>r.Dolay<EFBFBD>s<EFBFBD>yla <EFBFBD>al<EFBFBD><EFBFBD>an kodunuz e<EFBFBD>er transaction kullanmazsan<EFBFBD>z hata mesajlar<EFBFBD>
<p>E<EFBFBD>er ODBC gibi bir istemci arabirimi kullan<EFBFBD>yorsan<EFBFBD>z, <i>auto-commit</i>'i
kapatman<EFBFBD>z gerekebilir.</p>
<h4><aname="4.21">4.21</a>) <EFBFBD>u andaki zaman<EFBFBD><EFBFBD>ntan<EFBFBD>ml<EFBFBD> de<EFBFBD>er olarak
kabul eden <b>How do I create a column that will default to the current time?</b></h4>
<p>Alttakini kullanabilirsiniz:</p>
<pre>
CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
</pre>
<h4><aname="4.22">4.22</a>) Neden <code>IN</code> kullanan <i>subquery</i>'lerim
<EFBFBD>ok yavas?</h4>
<p>7.4 s<EFBFBD>r<EFBFBD>m<EFBFBD>nden <EFBFBD>nce, subqueryler. E<EFBFBD>er subquery sadece birka<EFBFBD> sat<EFBFBD>r ve outer query bol
say<EFBFBD>da sat<EFBFBD>r d<EFBFBD>nd<EFBFBD>r<EFBFBD>yorsa, IN en h<EFBFBD>zl<EFBFBD>s<EFBFBD>d<EFBFBD>r. Sorgular<EFBFBD> h<EFBFBD>zland<EFBFBD>rmak i<EFBFBD>in IN yerine EXISTS
<p>7.4 s<EFBFBD>r<EFBFBD>m<EFBFBD> ve sonras<EFBFBD>nda, IN asl<EFBFBD>nda normal sorgularla ayn<EFBFBD> karma<EFBFBD><EFBFBD>k join tekniklerini kullan<EFBFBD>r ve
a<EFBFBD><EFBFBD>k olmal<EFBFBD>d<EFBFBD>r. Ayr<EFBFBD>ca,pg_hba.conf dosyas<EFBFBD> i<EFBFBD>inde host ya da hostssl kayd<EFBFBD> mutlaka olmal<EFBFBD>d<EFBFBD>r ve