<p>Portions copyright (c) 1996-2002, PostgreSQL Global Development
Group Portions Copyright (c) 1994-6 Regents of the University of
California</p>
<p>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.</p>
<p>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.</p>
<p>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.</p>
<p><EFBFBD>stteki metin klasik a<EFBFBD><EFBFBD>k-kod lisans<EFBFBD> olan BSD lisans<EFBFBD>d<EFBFBD>r. Kaynak kodun nas<EFBFBD>l
kullan<EFBFBD>labilece<EFBFBD>ine dair s<EFBFBD>n<EFBFBD>rlamalar<EFBFBD> yoktur. Bu lisans<EFBFBD> seviyoruz. De<EFBFBD>i<EFBFBD>tirme
niyetimiz bulunmamaktad<EFBFBD>r.</p>
<h4><aname="1.3">1.3</a>) PostgreSQL, hangi Unix platforlar<EFBFBD>nda <EFBFBD>al<EFBFBD><EFBFBD><EFBFBD>r?</h4>
<p>Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i <EFBFBD>al<EFBFBD><EFBFBD>t<EFBFBD>racakt<EFBFBD>r.
Ayr<EFBFBD>nt<EFBFBD>l<EFBFBD> bilgi i<EFBFBD>in kurulum belgelerine bakabilirsiniz.</p>
<h4><aname="1.4">1.4</a>) Hangi Unix olmayan uyarlamalar<EFBFBD> bulunmaktad<EFBFBD>r?</h4>
<p><strong><EFBFBD>stemci</strong></p>
<p><code>libpq C</code> k<EFBFBD>t<EFBFBD>phanesini, psql ve diger arabirimleri ve binary dosyalar<EFBFBD>,
MS Windows ortamlar<EFBFBD>nda <EFBFBD>al<EFBFBD>smas<EFBFBD> i<EFBFBD>in derlemeniz m<EFBFBD>mk<EFBFBD>nd<EFBFBD>r. Bu <EFBFBD>rnekte istemcide
MS Windows <EFBFBD>al<EFBFBD><EFBFBD><EFBFBD>yor ve desteklenen Unix platformlar<EFBFBD>ndan birinde <EFBFBD>al<EFBFBD><EFBFBD>an PostgreSQL
sunucuna TCP/IP ile ba<EFBFBD>lanmaktad<EFBFBD>r. Da<EFBFBD><EFBFBD>t<EFBFBD>m i<EFBFBD>indeki <code>win31.mak</code> dosyas<EFBFBD> ile,
<code>Win32 libpg</code> k<EFBFBD>t<EFBFBD>phanesi ve psql yaratabilirsiniz. PostgreSQL ayn<EFBFBD>
zamanda <i>ODBC</i> istemcileri ile haberle<EFBFBD>ebilmektedir.</p>
<p><strong>Sunucu</strong></p>
<p>Veritaban<EFBFBD> sunuucsu <code>Cygwin</code> kullanarak Windows NT, 2K ya da
XP <EFBFBD>zerinde <EFBFBD>al<EFBFBD><EFBFBD>t<EFBFBD>r<EFBFBD>labilir. Dag<EFBFBD>t<EFBFBD>m i<EFBFBD>indeki <code>pgsql/doc/FAQ_MSWIN</code>
dosyas<EFBFBD>n<EFBFBD> ya da web sitemizdeki MS Windows FAQ'u inceleyebilirsiniz.</p>
<p>Do<EFBFBD>al Windows NT/2000/XP portu i<EFBFBD>in <EFBFBD>u anda <EFBFBD>al<EFBFBD><EFBFBD>malar devam etmektedir. Windows s<EFBFBD>r<EFBFBD>m<EFBFBD>
hakk<EFBFBD>nda g<EFBFBD>ncel bilgi i<EFBFBD>in, http://techdocs.postgresql.org/guides/Windows adresini
ziyaret edebilirsiniz.</p>
<p>Ayr<EFBFBD>ca, http://forge.novell.com adresinde Novell Netware 6 portu bulunmaktad<EFBFBD>r.</p>
<h4><aname="1.5">1.5</a>) PostgreSQL'i nereden indirebilirim?</h4>
<p>PostgreSQL i<EFBFBD>in ana anonim ftp sitesi <i><ahref="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</a></i>
adresidir. Yans<EFBFBD>lar i<EFBFBD>in, ana web sayfam<EFBFBD>za bakabilirsiniz.</p>
<h4><aname="1.6">1.6</a>) Nereden destek alabilirim?</h4>
<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>
<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>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