Add vacuum_freeze_table_age GUC option, to control when VACUUM should
[PostgreSQL.git] / doc / FAQ_turkish
blobd1c886d2a910a09dee4113087dd0a482d305f0f5
2                   PostgreSQL için Sýkça Sorulan Sorular (SSS)
3                                        
4    Son güncelleme : 15 Kasým 2004 Pazartesi - 15:03:23
5    
6    Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
7    
8    Çevirenler : Devrim Gündüz (devrim@tdmsoft.com)
9    Nicolai Tufar (ntufar@tdmsoft.com)
10    Volkan YAZICI (volkany@phreaker.net)
11    
12    Bu belgenin en güncel hali,
13    http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html ve
14    http://www.gunduz.org/seminer/pg/FAQ_turkish.html adreslerinde
15    görülebilir.
16    
17    Platforma özel sorularýnýz, http://www.PostgreSQL.org/docs/index.html
18    adresinde yanýtlanýr.
19      _________________________________________________________________
20    
21                                Genel Sorular
22                                       
23    1.1) PostgreSQL nedir? Nasýl okunur?
24    1.2) PostgreSQL'in haklarý nedir?
25    1.3) PostgreSQL, hangi Unix platformlarýnda çalýþýr?
26    1.4) Hangi Unix olmayan uyarlamalarý bulunmaktadýr?
27    1.5) PostgreSQL'i nereden indirebilirim?
28    1.6) Desteði nereden alabilirim?
29    1.7) En son sürümü nedir?
30    1.8) Hangi belgelere ulaþabilirim?
31    1.9) Bilinen hatalar ya da eksik özelliklere nereden ulasabilirim?
32    1.10) Nasýl SQL öðrenebilirim?
33    1.11) PostgreSQL 2000 yýlýna uyumlu mudur?
34    1.12) Geliþtirme takýmýna nasýl katýlabilirim??
35    1.13) Bir hata raporunu nasýl gönderebilirim?
36    1.14) PostgreSQL, diðer VTYS(DBMS) lerle nasýl karþýlaþtýrýlabilir?
37    1.15) PostgreSQL'e maddi açýdan nasýl destek olabilirim?
38    
39                          Kullanýcý/istemci Sorularý
40                                       
41    2.1) PostgreSQL için ODBC sürücüleri var mý?
42    2.2) PostgreSQL'i web sayfalarýnda kullanabilmek için hangi araçlar
43    bulunmaktadýr?
44    2.3) PostgreSQL'in grafik kullanýcý arabirimi var mýdýr?
45    2.4) PostgreSQL ile iletiþimi kurabilmek için hangi dilleri
46    kullanabilirim?
47    
48                              Yönetimsel Sorular
49                                       
50    3.1) PostgreSQL'i /usr/local/pgsql dizininden baþka dizinlere nasýl
51    kurabilirim?
52    3.2) Postmaster'ý baþlattýðýmda Bad System Call ya da core dumped
53    mesajý alýyorum. Neden?
54    3.3) Postmaster'ý baþlattýðýmda, IpcMemoryCreate hatasý alýyorum.
55    Neden?
56    3.4) Postmaster'ý, baþlattýðýmda, IpcSemaphoreCreate hatasý alýyorum.
57    Neden?
58    3.5) Diðer bilgisayarlarýn benim PostgreSQL veritabaný sunucuma
59    baðlantýlarýný nasýl kontrol edebilirim?
60    3.6) Veritabaný motorunu daha iyi baþarým icin nasýl ayarlayabilirim?
61    3.7) Hangi hata ayýklama özellikleri bulunmaktadýr?
62    3.8) Baðlanmaya çalýþýrken, neden "Sorry, too many clients" hatasýný
63    alýyorum. Neden?
64    3.9) pgsql_tmpdizinin içindeki dosyalar nelerdir?
65    3.10) PostgreSQL sürümlerini yükseltmek için neden bir dump/reload
66    iþlemi gerçekleþtirmek zorundayým?
67    3.11) Nasýl bir donaným kullanmalýyým?br>
68    
69                              Ýþletimsel Sorular
70                                       
71    4.1) Binary cursor ve normal cursor arasýndaki fark nedýr?
72    4.2) Sorgunun sadece ilk birkaç satýrýný nasýl SELECT edebilirim?
73    4.3) psql'in içinde gördügüm tablolarýn ya da diðer þeylerin listesini
74    nasýl alabilirim?
75    4.4) Bir tablodan bir kolonu nasýl kaldýrabilirim?
76    4.5) Bir satýr, tablo ve veritabaný için en fazla büyüklük nedir?
77    4.6) Tipik bir metin dosyasýndaki veriyi saklamak için ne kadar disk
78    alaný gereklidir?
79    4.7) Veritabanýnda hangi tablo ya da index'lerin tanýmlandýðýný nasýl
80    görebilirim?
81    4.8) Sorgularým cok yavaþ, ya da index'lerimi kullanmýyorlar. Neden?
82    4.9) Query-optimizer'ýn sorgularýmý nasýl deðerlendirdiðini, iþleme
83    soktuðunu nasýl görebilirim?
84    4.10) R-tree index nedir?
85    4.11) Genetic Query Optimizer nedir?
86    4.12) Düzenli ifade (Regular Expression) aramalarýný ve büyük/küçük
87    harfe duyarsýz aramalarý nasýl yapabilirim? Bu büyük/küçük harfe
88    duyarlý aramalar için index'i nasýl kullanabilirim?
89    4.13) Bir sorguda, bir alanýn NULL olduðunu nasýl ortaya
90    çýkarabilirim?
91    4.14) Çesitli karakter tipleri arasýndaki farklar nelerdir?
92    4.15.1) Nasýl serial/otomatik artan (auto-incrementing) bir alan
93    yaratabilirim?
94    4.15.2) Serial giriþinin deðerini nasýl alabilirim?
95    4.15.3) currval() ve nextval() diðer kullanýcýlara sorun yaratmaz mý?
96    4.15.4) Neden sequence sayýlarýn transaction iþleminin iptalinden
97    sonra yeniden kullanýlýyor? Neden sequence/SERIAL kolonumdaki
98    sayýlarda atlamalar oluyor?
99    4.16) OID nedir? TID nedir?
100    4.17) PostgreSQL' de kullanýlan bazý terimlerin anlamlarý nelerdir?
101    4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasýný
102    alýyorum?
103    4.19) Hangi PostgreSQL sürümünü çalýstýrdýðýmý nasýl görebilirim?
104    4.20) Neden large-object iþlemlerim, "invalid large obj descriptor"
105    hatasýný veriyor?
106    4.21) Þu andaki zamaný öntanýmlý deðer olarak kabul eden kolonu nasýl
107    yaratýrým?
108    4.22) Neden IN kullanan subquery'lerim çok yavaþ?
109    4.23) Outer join iþlemini nasýl yapabilirim?
110    4.24) Ayný anda birden fazla veritabanýnda nasýl iþlem yapabilirim?
111    4.25) Bir fonksiyondan nasýl çoklu satýr ya da kolon döndürebilirim?
112    4.26) Neden Pl/PgSQL fonksiyonlarý içinden güvenli bir þekilde tablo
113    yaratma/kaldýrma iþlemlerini yapamýyoruz?
114    4.27) Hangi þifreleme seçenekleri bulunmaktadýr?
115    
116                     PostgreSQL Özelliklerini Geniþletmek
117                                       
118    5.1) Kullanýcý-tanýmlý bir fonksiyon yazdým. psql'de çalýþtýrdýðým
119    zaman neden core dump ediyor?
120    5.2) PostgreSQL'e nasýl yeni veri tipleri/fonksiyonlar ekleyebilirim?
121    5.3) Bir tuple döndürmek için bir C fonksiyonunu nasýl yazarým?
122    5.4) Bir kaynak dosyasýnda deðiþiklik yaptým. Yeniden derlememe raðmen
123    deðiþiklik geçerli olmuyor. Neden?
124      _________________________________________________________________
125    
126                                Genel Sorular
127                                       
128     1.1) PostgreSQL nedir? Nasýl okunur?
129     
130    PostgreSQL, Post-Gres-Q-L. olarak okunur
131    
132    PostgreSQL, yeni-nesil VTYS araþtýrma prototipi olan POSTGRES
133    veritabaný yönetim sisteminin geliþtirilmesidir. POSTGRES'in zengin
134    veri tiplerini ve güçlü veri modelini tutarken, SQL'in geliþtirilmiþ
135    alt kümesi olan PostQuel dilini kullanýr. PostgreSQL ücretsizdir ve
136    kaynak kodu açýk daðýtýlýr.
137    
138    PostgreSQL, PostgreSQL geliþtirme listesine üye olan bir Internet
139    geliþtirici takýmý tarafýndan geliþtirilir. Þu andaki koordinatör,
140    Marc G. Fournier (scrappy@PostgreSQL.org). (Bu takýma nasýl
141    katýlacagýnýzý öðrenmek için 1.6 numaralý maddeyi okuyunuz.) Bu takým,
142    tüm PostgreSQL geliþiminden sorumludur.
143    
144    PostgreSQL 1.01 sürümünün yazarlarý Andrew Yu ve Jolly Chen idi.
145    Bunlarýn dýþýnda bir kaç kisi de uyarlama, hata ayýklama ve kodun
146    geliþtirilmesi için çalýsmýþtý. PostgreSQL'in türediði orijinal
147    Postgres kodu, lisans, lisansüstü ve akademisyenler tarafýndan,
148    Professor Michael Stonebraker (University of California, Berkeley)
149    koordinatörlügünde yazýlmýþtýr.
150    
151    Berkley'deki yazýlýmýn adý Postgres idi. SQL uyumluluðu 1995'te
152    eklenince, adý Postgres 95 oldu. 1996 yýlýnýn sonlarýnda adý
153    PostgreSQL olarak deðiþtirildi.
154    
155     1.2) PostgreSQL'in haklarý nedir?
156     
157    PostgreSQL Data Base Management System
158    
159    Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
160    Portions Copyright (c) 1994-6 Regents of the University of California
161    
162    Permission to use, copy, modify, and distribute this software and its
163    documentation for any purpose, without fee, and without a written
164    agreement is hereby granted, provided that the above copyright notice
165    and this paragraph and the following two paragraphs appear in all
166    copies.
167    
168    IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
169    FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
170    INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
171    ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
172    ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
173    
174    THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
175    INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
176    MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
177    PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
178    CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
179    UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
180    
181    Üstteki metin klasik açýk-kod lisansý olan BSD lisansýdýr. Kaynak
182    kodun nasýl kullanýlabileceðine dair sýnýrlamalarý yoktur. Bu lisansý
183    seviyoruz. Deðiþtirme niyetimiz bulunmamaktadýr.
184    
185     1.3) PostgreSQL, hangi Unix platforlarýnda çalýþýr?
186     
187    Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i
188    çalýþtýracaktýr. Ayrýntýlý bilgi için kurulum belgelerine
189    bakabilirsiniz.
190    
191     1.4) Hangi Unix olmayan uyarlamalarý bulunmaktadýr?
192     
193    PostgreSQL 8.0 sürümü ile , PostgreSQL artýk Win2000, WinXP ve Win2003
194    gibi Microsoft Windows NT tabanlý iþletim sistemlerinde doðal olarak
195    çalýþmaya baþlamýþtýr. Paketlenmiþ bir kurulum programý,
196    http://pgfoundry.org/projects/pginstaller. adresinden indirilebilir.
197    
198    Ayrýca, http://forge.novell.com adresinde Novell Netware 6 portu
199    bulunmaktadýr.
200    
201     1.5) PostgreSQL'i nereden indirebilirim?
202     
203    PostgreSQL için ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub
204    adresidir. Yansýlar için, ana web sayfamýza bakabilirsiniz.
205    
206     1.6) Nereden destek alabilirim?
207     
208    Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL
209    konusundaki tartýþmalara açýktýr. Üye olmak için, aþaðýdaki satýrlarý
210    e-postanýzýn body kýsmýna (konu kýsmýna deðil) yazýp,
211    pgsql-general-request@PostgreSQL.org adresine gönderin:
212 subscribe
215    Ayný zamanda, bir digest listesi bulunmaktadýr. Bu listeye üye olmak
216    için, pgsql-general-digest-request@PostgreSQL.org adresine, body
217    kýsmýnda
218 subscribe
221    yazan bir e-posta atmanýz yeterli olacaktýr.
222    
223    Digest postalar, ana liste 30k civarýnda e-postaya ulaþtýðýnda üyelere
224    gönderilmektedir.
225    
226    Bug'lar için bir e-posta listesi bulunmaktadýr. Bu listeye üye olmak
227    için, pgsql-bugs-request@PostgreSQL.org adresine, body kýsmýnda
228 subscribe
231    yazan bir e-posta atmanýz yeterli olacaktýr.
232    
233    Ayný zamanda, geliþtiriciler için tartýþma listesi bulunmaktadýr. Bu
234    listeye üye olmak için, pgsql-hackers-request@PostgreSQL.org adresine,
235    body kýsmýnda
236 subscribe
239    yazan bir e-posta atmanýz yeterli olacaktýr.
240    
241    Bunun dýþýndaki e-posta listelerine ve PostgreSQL hakkýnda bilgiye,
242    PostgreSQL WWW ana sayfasýndan ulasabilirsiniz:
243    http://www.PostgreSQL.org
244    
245    Ayný zamanda, EFNet üzerinde, #PostgreSQL adlý bir IRC kanalý
246    bulunmaktadýr. Bunun için, irc -c '#PostgreSQL' "$USER"
247    irc.phoenix.net Unix komutunu kullanabilirsiniz.
248    
249    Ticari destek veren firmalarýn listesine
250    
251    http://www.postgresql.org/users-lounge/commercial-support.html
252    
253    adresinden ulaþbilirsiniz.
254    
255     1.7) En son sürüm nedir?
256     
257    PostgreSQL'in son sürümü 7.4.6'dýr.
258    
259    Her 6-8 ayda ana sürüm çýkarýlmasý planlanmaktadýr.
260    
261     1.8) Hangi belgelere ulaþabilirim?
262     
263    Daðýtýmýn içinde, kitapçýklar, kitapçýk sayfalarý ve bazý küçük
264    örnekler verilmektedir. /doc dizinine bakýnýz. Ayrýca, bu el
265    kitapçýklarýný online olarak http://www.PostgreSQL.org/docs/
266    adresinden inceleyebilirsiniz.
267    
268    http://www.PostgreSQL.org/docs/awbook.html ve
269    http://www.commandprompt.com/ppbook adreslerinde PostgreSQL kitaplarý
270    bulunmaktadýr. PostgreSQL kitablarýnýn listesine,
271    http://www.ca.PostgreSQL.org/books/ adresinden ulaþaiblirsiniz.
272    Ayrýca, PostgreSQL konusundaki teknik makalelere de
273    http://techdocs.PostgreSQL.org/ adresinden ulaþabilirsiniz.
274    
275    psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar,
276    aggregate'ler, vb. ile ilgili güzel komutlarý vardýr.
277    
278    Web sitemiz daha fazla belgeyi içermektedir.
279    
280     1.9) Bilinen hatalar ya da eksik özelliklere nereden ulaþabilirim?
281     
282    PostgreSQL SQL-92 uyumluluðu içindedir, standartlardan fazla da
283    özellikleri bulunmaktadýr. Bilinen hatalar, eksik özellikler ve
284    gelecek ile ilgili planlar için TODO listesine bakýnýz.
285    
286     1.10) Nasýl SQL öðrenebilirim?
287     
288    http:/www.PostgreSQL.org/docs/awbook.html adresindeki kitap SQL
289    ögretecektir. http://www.commandprompt.com/ppbook adresinde de bir
290    baska PostgreSQL kitabý bulunmaktadýr.
291    
292    http://www.intermedia.net/support/sql/sqltut.shtm,
293    http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
294    http://sqlcourse.com ve http://sqlcourse2.com adreslerinde de güzel
295    belgeler bulunmaktadýr.
296    
297    Bir baþkasý da, http://members.tripod.com/er4ebus/sql/index.htm
298    adresinde bulunan "Teach Yourself SQL in 21 Days, Second Edition"
299    kitabýdýr.
300    
301    Bazý kullanýcýlarýmýz da þu kitabý önermektedirler: "The Practical SQL
302    Handbook, Bowman, Judith S., et al.,Addison-Wesley". Bazýlarý ise "The
303    Complete Reference SQL, Groff et al., McGraw-Hill" kitabýný
304    önermektedirler.
305    
306     1.11) PostgreSQL 2000 yýlýna uyumlu mudur?
307     
308    Evet.
309    
310     1.12) Geliþtirme takýmýna nasýl katýlabilirim?
311     
312    Öncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da
313    daðýtýmýn içindeki PostgreSQL Developer belgesini okuyun. Ardýndan,
314    pgsql-hackers ve pgsql-patches listelerine üye olun. Üçüncü olarak da,
315    pgsql-pacthes listesine yüksek kalitede yamalar gönderin.
316    
317    PostgreSQL CVS arþivine eriþim izni olan, 10 kadar geliþtirici
318    bulunmaktadýr. Hepsi defalarca, diðer kiþilerin yaptýðýndan çok daha
319    yüksek-kaliteli yamalar göndermiþlerdir. Ayrýca biz de bu
320    geliþtiricilerin ekledikleri yamalarýn yüksek kalitede olduðuna
321    güveniyoruz.
322    
323     1.13) Bir hata raporunu nasýl gönderebilirim?
324     
325    PostgreSQL BugTool sayfasýna gidiniz. O sayfada bir bug bildirmek için
326    neleri yapmanýz gerektiði anlatýlmýþtýr.
327    
328    Ayrýca, ftp://ftp.PostgreSQL.org/pub ftp adresimizde, yeni bir
329    PostgreSQL sürümü ya da yamasý olup olmadýðýni kontrol ediniz.
330    
331     1.14) PostgreSQL, diger DBMS'lerle nasýl karþýlastýrýlabilir?
332     
333    Bir yazýlýmýn gücünü ölçmek için çeþitli yollar vardýr: Yazýlýmýn
334    özellikleri, baþarýmý, güvenilirliði, desteði ve ücreti.
335    
336    Özellikler:
337    
338    PostgreSQL mevcut büyük ticari veritabanlarýnýn, transaction,
339    subselect, trigger, view, foreign key referential integrity ve
340    sophisticated locking gibi (user-defined types), rules, inheritance ve
341    lock cakýþmalarýný düþürmek için multi-version uyumluluk özellikleri
342    bulunmaktadýr.
343    
344    Performans (Baþarým):
345    
346    PostgreSQL, diðer ticari ve açýk kaynak kodlu veritabanlarýyla yakýn
347    baþarýmý saðlar. Bazý açýlardan daha hýzlýdýr, diðer açýlardan da
348    yavaþtýr. MySQL ya da daha zayýf veritabanlarý ile
349    karþýlaþtýrýldýðýnda, INSERT/UPDATE iþlemlerinde, transaction bazlý
350    çalýstýðýmýz için daha yavaþýz. MySQL, yukarýdaki "özellikler"
351    kýsmýnda belirtilenlerden hiç birine sahip deðildir. Biz, baþarýmýmýzý
352    her sürümde arttýrsak da, esneklik ve geliþmiþ özellikler için
353    yapýlanmýþ durumdayýz. PostgreSQL'i MySQL ile karþýlaþtýran þu web
354    sitesine bakabilirsiniz: http://openacs.org/why-not-mysql.html
355    
356    Güvenilirlik:
357    
358    DBMS'lerin güvenilir olmasý gerketiði, yoksa deðerleri olmayacaðýný
359    düþünüyoruz. Çok iyi test edilmiþ, dengeli çalýsan minimum sayýda hata
360    içeren kod sunmaya çalýþýyoruz. Her bir sürüm en az 1 aylýk beta
361    testlerinden geçirilmektedir. Sürüm geçmiþine bakarsanýz, üretime
362    hazýr, dengeli ve kararlý kodlar sunduðumuzu görebilirsiniz. Bu
363    alanda, diðer veritabaný yazýlýmlarýna üstünlüðümüz olduðuna
364    inanmaktayýz.
365    
366    Destek:
367    
368    E-posta listemiz, oluþan herhangi bir sorunu çözebilecek büyük sayýda
369    kullanýcý ve geliþtirici grubunu içerir. Sorununuz için, en az bir
370    ticari veritabaný kadar rahat çözüm bulabilirsiniz. Gelistiricilere,
371    kullanýcý grubuna, belgelere ve kaynak koda direk olarak eriþebilme,
372    PostgreSQL desteðini, diðer DBMS'lere göre daha önemli kýlar.
373    Gereksinimi olanlara, ticari destek verilebilir. (Destek için 1.6
374    bölümüne bakýnýz.)
375    
376    Fiyat:
377    
378    Ticari ve ticari olmayan tüm kullanýmlarýnýz için PostgreSQL
379    ücretsizdir. Kodumuzu, yukarýda belirtilen BSD-stili lisanstaki
380    sýnýrlamalar hariç, ürününüzün içine ekleyebilirsiniz.
381    
382     1.15) PostgreSQL'e maddi açýdan nasýl destek olabilirim?
383     
384    PostgreSQL, 1996 yýlýndan beri 1. sýnýf altyapýya sahiptir. Bunun
385    için, yýllar boyu çalýþýp bu altyapýyý oluþturup yöneten Marc
386    Fournier'e teþekkürler.
387    
388    Bir açýk kaynak kodlu proje için, kaliteli altyapý çok önemlidir. Bu
389    altyapý, projenin kesilmesini önler ve projenin ilerlemesini
390    hýzlandýrýr.
391    
392    Tabii ki bu altyapý ucuz deðildir. Ýþlerin yürümesi için çeþitli yýlýk
393    ve anlýk harcamalarýmýz olmaktadýr. Eðer siz ya da þirketinizin bu
394    çabamýza baðýþta bulunabilecek parasý varsa, lütfen
395    http://store.pgsql.com/ adresine gidiniz ve baðýþta, hibede bulununuz.
396    
397    Web sayfasýnýn 'PostgreSQL Inc.' den bahsetmesine raðmen, "katkýda
398    bulunanlar" (contributors) maddesi sadece PostgreSQL projesini
399    desteklemek içindir ve belirli bir þirketin para kaynaðý deðildir.
400    isterseniz, baðlantý adresine bir çek gönderebilirsiniz.
401      _________________________________________________________________
402    
403                          Kullanýcý/Ýstemci Sorularý
404                                       
405     2.1) PostgreSQL icin ODBC sürücüleri var mý?
406     
407    iki tane ODBC sürücüsü bulunmaktadýr: PsqlODBC ve OpenLink ODBC.
408    
409    PsqlODBC'i
410    http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
411    adresinden indirebilirsiniz.
412    
413    OpenLink ODBC http://www.openlinksw.com adresinden alýnabilir.Bu
414    sürücü, kendi standart ODBC istemci yazýlýmý ile çalýstýðýndan,
415    destekledikleri her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC
416    bulunmalidir.
417    
418    Ücretsiz sürümü olmakla beraber, ticari kalitede destek almak
419    isteyenlere satmak isteyeceklerdir. Sorularýnýzý lütfen
420    postgres95@openlink.co.uk adresine gönderiniz.
421    
422     2.2) PostgreSQL'i web sayfalarýnda kullanabilmek için hangi araçlar
423     bulunmaktadýr?
424     
425    http://www.webreview.com/ adresinde, arka planda veritabaný çalýstýran
426    Web sayfalarý için giriþ seviyesinde bilgi bulunmaktadýr.
427    
428    Web ile bütünleþme için, PHP () mükemmel bir arabirim sunar.
429    
430    Karmaþýk sorunlar için, çoðu kisi Perl arabirimini ve CGI.pm ya da
431    mod_perl kullanýr.
432    
433     2.3) PostgreSQL'in grafik kullanýcý arabirimi var mýdýr?
434     
435    Çeþitli grafik arabirimlerimiz bulunmaktadýr. Bunlarýn arasýnda,
436    PgAccess (http://www.pgaccess.org/), PgAdmin II
437    (http://www.pgadmin.org/, sadece Win32 için), RHDB Admin
438    (http://sources.redhat.com/rhdb/) ve Rekall
439    (http://www.thekompany.com/products/rekall/) bulunmaktadýr. Ayrýca,
440    PostgreSQL için web tabanlý bir arabirim olan PHPPgAdmin
441    (http://phppgadmin.sourceforge.net/) bulunmaktadýr.
442    
443    Daha ayrýntýlý liste için
444    http://techdocs.postgresql.org/guides/GUITools adresine
445    bakabilirsiniz.
446    
447     2.4) PostgreSQL ile iletiþimi kurabilmek için hangi dilleri kullanabilirim?
448     
449      * C (libpq)
450      * Embedded C (ecpg)
451      * Java (jdbc)
452      * Python (PyGreSQL)
453      * TCL (libpgtcl)
454        
455    Diðerleri için, http://gborg.postgresql.org adresindeki
456    Drivers/Interfaces bölümüne bakabilirsiniz.
457      _________________________________________________________________
458    
459                              Yönetimsel Sorular
460                                       
461     3.1) PostgreSQL'i, /usr/local/pgsql dizininden baþka dizinlere nasýl
462     kurabilirim?
463     
464    configure betiðini çalýstýrýrken, --prefix seçeneðini veriniz.
465    
466     3.2) postmaster'i baslattýgýmda, a Bad System Call ya da core dumped mesajý
467     alýyorum. Neden?
468     
469    Bunun birçok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey,
470    çekirdeginize System V uzantýlarýnýn kurulu olup olmadýgýný kontrol
471    etmek olabilir. PostgreSQL shared memory ve semaphores için çekirdek
472    destegine gereksinim duyar.
473    
474     3.3) postmaster'i baþlattýðýmda, ýpcMemoryCreate hatasý alýyorum. Neden?
475     
476    Ya çekirdeðinizde shared memory desteðiniz düzgünce
477    yapýlandýrýlmamýþtýr, ya da çekirdeðinizdeki mevcut shared memory
478    miktarýný büyütmeniz gerekecektir. Gereksinim duyacaðýnýz miktar,
479    mimarinize ve postmaster için ayarladýgýnýz tampon ile backend iþlemi
480    sayýsýna baðlýdýr. Tüm sistemler için, tamponlar ve iþlemlerde
481    öntanýmlý sayýlarla, ~ 1MB kadar yere gereksinmeniz olacaktýr.
482    PostgreSQL 7.3.2 Sistem Yöneticileri Rehberi'ne, shared memory ve
483    semaphorelar hakkýndaki ayrýntýlý bilgi için bakabilirsiniz.
484    
485     3.4) postmaster'ý baþlattýðýmda, ýpcSemaphoreCreate hatasý alýyorum. Neden?
486     
487    Eðer hata, "ýpcSemaphoreCreate: semget failed (No space left on
488    device)" ise, çekirdeðiniz yeterli semaphore ile yapýlandýrýlmamýþ
489    demektir. Postgres, her bir potansiyel backend için bir semaphore
490    gereksinimi duyar. Geçici bir çözüm, postmasterý backend iþlemleri
491    için daha az miktarda sýnýrla baþlatmak olabilir. -N'i varsayýlan
492    deðer olan 32'den küçük bir deðerle baþlatýnýz. Daha kalýcý bir çözüm,
493    çekirdeðinizin SEMMNS ve SEMMNI parametrelerini yükseltmek olacaktýr.
494    
495    Çalýþmayan semaphore'lar aðýr veritabaný iþlemlerinde çökme
496    yaratabilirler.
497    
498    Eðer hata mesajýnýz baþka bir þey ise, çekirdeðinizde semaphore
499    desteðini yapýlandýrmamýþ olabilirsiniz. Shared memory ve
500    semaphore'lar hakkýndaki daha ayrýntýlý bilgi için PostgreSQL 7.3.2
501    Sistem Yöneticileri Rehberi'ne bakabilirsiniz.
502    
503     3.5) Diger bilgisayarlarýn benim PostgreSQL veritabaný sunucuma
504     baðlantýlarýný nasýl kontrol edebilirim?
505     
506    Ön tanýmlý olarak, PostgreSQL sadece yerel makineden Unix domain
507    sockets kullanarak baðlanýlmasýna izin verir. Diger makineler,
508    postmaster'a -i etiketini geçirmezseniz ve $PGDATA/pg_hba.conf
509    dosyasýný düzenleyerek host-based authentication'a olanak vermezseniz,
510    baðlantý yapamayacaklardýr.
511    
512     3.6) Veritabani motorunu daha iyi baþarým için nasýl ayarlayabilirim?
513     
514    Index'ler sorgularý hýzlandýrabilir. EXPLAIN komutu, PostgreSQL'in
515    sorgunuzu nasýl yorumladýðýný ve hangi index'leri kullandýðýný
516    görmenize izin verir.
517    
518    Eðer cok fazla INSERT iþlemi yapýyorsanýz, bunlarý büyük bir toplu
519    iþlem dosyasýkullanýp COPY komutu ile veritabanýna girmeyi deneyiniz.
520    Bu, tekil INSERT'lerden daha hýzlýdýr. Ýkinci olarak, BEGIN
521    WORK/COMMIT transaction bloðu içinde olmayan ifadeler kendi
522    transaction'larýndaymýþ gibi düþünülür. Çoklu ifadeleri tek bir
523    transaction bloðu içinde yapabilirsiniz. Bu, transaction overhead'ini
524    düþürecektir. Tek bir transaction bloðu içinde birden çok ifadeyi
525    çalýþtýrmayý deneyebilirsiniz. Bu da ayný þekilde, transaction
526    overhead'ini düþürür.
527    
528    Çeþitli ayarlama seçenekleri mevcuttur. fsync() iþlemini, postmaster'ý
529    -o -F seçeneði ile baþlatarak devre dýþý býrakabilirsiniz. Bu iþlem,
530    fsync()'lerin her transactiondan sonra diski flush etmesini
531    engelleyecektir.
532    
533    Ayný zamanda, postmaster'i -B seçeneði ile baþlatýp, backend iþlemleri
534    tarafýndan kullanýlan shared memory buffers sayýlarýný
535    arttýrabilirsiniz. Eðer bu parametreyi çok yüksek tutarsanýz,
536    çekirdeðinizin shared memory bölgesindeki limiti aþma olasýlýðýnýz
537    yüzünden postmaster baþlayamayabilir. Her bir tampon (buffer) 8K'dýr.
538    Öntanýmlý sayý ise 64 tampondur.
539    
540    Ayný þekilde, backend'in -S seçeneðini geçici sýralamalar için backend
541    süreçleri tarafýndan kullanýlacak hafýzayý arttýrmak amacýyla
542    kullanabilirsiniz. -S seçeneði kilobayt cinsinden deðer alýr ve ön
543    tanýmlý deðeri 512'dir (512 K)
544    
545    Tablolardaki veriyi bir index'e eþlemek amacýyla gruplama için CLUSTER
546    komutunu kullanabilirsiniz. Ayrýntýlý bilgi için CLUSTER komutunun
547    yardým sayfasýna bakabilirsiniz.
548    
549     3.7) Hangi hata ayýklama özellikleri bulunmaktadýr?
550     
551    PostgreSQL, hata ayýklama amacýyla kullanýlabilecek durum bilgisi
552    rapor eden çeþitli özeliklere sahiptir.
553    
554    Öncelikle, configure betiðini --enable-cassert seçeneðiyle
555    çalýþtýrýrsanýz, bir çok assert() backend calýþmasýný gözlemler ve
556    beklenmeyen bir durumda programý durdurur.
557    
558    Postmaster ve postgres çeþitli hata ayýklama seçeneklerine sahiptir.
559    Öncelikle, postmaster'ý baþlattýðýnýzda, standart çýktýyý ve hatalarý
560    bir log dosyasýna yönlendirdiðinize emin olun:
561 cd /usr/local/pgsql
562 ./bin/postmaster >server.log 2>&1 &
564    Bu iþlem PostgreSQL ana dizinine server.log dosyasý yerleþtirecektir.
565    Bu dosya sunucunun yaþadýðý sorunlar ya da hatalar hakkýnda yararlý
566    bilgiler içerir. -d seçeneði, hata ayýklama seviyesini belirten bir
567    rakam ile kullanýlýr. Yüksek hata ayýklama seviyelerinin büyük log
568    dosyalarý oluþturacaðýný unutmayýnýz.
569    
570    Eðer postmaster çalýþmýyorsa, postgres backend'ini komut satýrýndan
571    çalýþtýrabilir ve SQL ifadenizi direk olarak yazabilirsiniz. Bu sadece
572    hata ayýklama amacýyla önerilir. Burada, noktalý virgülün deðil de
573    yeni bir satýrýn sorguyu sonlandýrdýðýný unutmayýnýz. Eðer hata
574    ayýklama sembolleri ile derlediyseniz, ne olduðunu görmek için bir
575    hata ayýklayýcý kullanabilirsiniz. backend postmaster'dan
576    baþlatýlmadýðýndan, eþdeðer bir ortamda çalýþmamaktadýr ve
577    locking/backend etkileþim sorunlarý artabilir.
578    
579    Eðer postmaster çalýþýyorsa, bir pencerede psql'i çalýþtýrýn ve psql
580    tarafýndan kullanýlan postgres sürecinin süreç numarasýný (PID) bulun.
581    Postgres süreci ile iliþkilendirmek için bir hata ayýklarýcý kullanýn.
582    Sorgularý psql aracýlýðý ile çalýþtýrabilirsiniz. Eðer postgres
583    baþlangýcýnda hata ayýklamak istiyorsanýz, PGOPTIONS="-W n" seçeneðini
584    ayarlayabilir ve psql'i baþlatabilirsiniz. Bu iþlem, baþlangýcýn n
585    saniye kadar gecikmesini saðlayacaktýr; böylece hata ayýklayýcýyý
586    sürece iliþkilendirdikten sonra baþlangýç sürecinin devam etmesini
587    saðlayabilirsiniz.
588    
589    postgres programý hata ayýklama ve baþarým ölçümleri için -s, -A ve -t
590    seçeneklerine sahiptir.
591    
592     3.8) Baðlanmaya çalýþýrken, neden "Sorry, too many clients" hatasýný
593     alýyorum?
594     
595    Postmaster'ýn eþzamanlý olarak baþlatabileceði backend süreçleri
596    sýnýrlarýný arttýrmanýz gerekmektedir.
597    
598    Ön tanýmlý deðer 32 süreçtir. Bunu, postmaster'ý uygun -N deðeri ile
599    ya da postgresql.conf dosyasýný düzenleyerek yeniden baþlatmakla
600    arttýrabilirsiniz.
601    
602    Eðer -N deðerini 32'den büyük yapacaksanýz, ayný zamanda -B deðerini
603    de deðiþtirmeniz gerektiðini unutmayýn. -B, -N'nin en az 2 katý kadar
604    olmalýdýr; daha iyi baþarým için bu sayýyý daha da arttýrmalýsýnýz.
605    Yüksek sayýdaki backend süreçleri için, çeþitli çekirdek yapýlandýrma
606    parametrelerini arttýrmanýz gerekecektir. Yapýlmasý gerekenler,
607    SHMMAX, SEMMNS, SEMMNI, NPROC, MAXUPRC ve açýlabilecek dosyalarýn
608    maksimum sayýsý olan NFILE ve NINODE deðerlerini karýþtýrmaktýr. Bunun
609    nedeni, PostgreSQL'in izin verilen backend süreçlerinin sayýsý
610    üzerinde bir sýnýrý olmasýdýr. Böylelikle sistem kaynaklarýnýn dýþýna
611    çýkýlmayacaktýr.
612    
613    PostgreSQL'in 6.5 sürümüne kadar, en fazla backend sayýsý 64 idi ve
614    bunu deðiþtirmek için include/storage/sinvaladt.h dosyasý içindeki
615    MaxBAckendid sabitini deðiþtirdek sonra yazýlýmý yeniden derlemek
616    gerekiyordu.
617    
618     3.9) pgsql_tmp dizinin içindeki dosyalar nelerdir?
619     
620    Sorgu çalýstýrýcý (query executer) tarafýndan yaratýlan geçici
621    dosyalardýr. Örnegin, bir sýralama ORDER BY ile yapýlacaksa ve
622    sýralama backend'in -s parametresinin izin verdiðinden daha fazla
623    alana gereksinim duyuyorsa, ekstra veriyi tutmak için geçici dosyalar
624    yaratýlýr.
625    
626    Geçici dosyalar, eðer sýralama sýrasýnda backend göçmezse otomatik
627    olarak silinecektir. Eðer çalýþan durumda bir backend'iniz yoksa,
628    pg_tempNNN.NN dosyalarýný silmeniz güvenlidir.
629    
630     3.10) PostgreSQL sürümlerini yükseltmek için neden bir dump/reload iþlemi
631     gerçekleþtirmek zorundayým?
632     
633    PostgreSQL takýmý ara sürümlerde sadece küçük deðiþiklikler
634    yapmaktadýr; bu yüzden 7.2 sürümünden 7.2.1'e yükseltmek dump/restore
635    iþlemi gerekmemektedir. Ancak, esas sürümlerde (örnek: 7.2'den 7.3'e)
636    çoðunlukla sistem tablolarýnýn ve veri dosyalarýnýn iç yapýsý
637    deðiþtirilir. Bu deðiþiklikler çoðunlukla karmaþýktýr; dolayýsýyla
638    veri dosyalarýnýn geriye dönük uyumluluðu iþlemlerini yapmýyoruz. Dump
639    iþlemi, veriyi genel biçimde alacaðýndan yeniden yükleme esnasýnda
640    veri, yeni iç biçime uygun þekilde yerleþtirilecektir.
641    
642    Disk biçiminin deðiþmediði sürümlerde, pg_upgrade betiði güncellemenin
643    bir dump/restore gerektirmeden yapýlmasýný saðlayacaktýr. pg_upgrade
644    betiðinin o sürüm için bulunup bulunmadýðýný sürüm notlarý içinde
645    bulabilirsiniz.
646    
647     3.11) Nasýl bir donaným kullanmalýyým?
648     
649    PC donanýmý tamamen uyumlu olduðu için, insanlar tüm PC donanýmlarýnýn
650    ayný kalitede olduðunu düþünürler. Oysa böyle deðildir. ECC RAM, SCSI
651    ve kaliteli anakartlar daha ucuz donanýmlara göre daha çok
652    güvenilirlerdir ve baþarýmlarý daha yüksektir. PostgreSQL hemen hemen
653    tüm donanýmda çalýþabilmektedir, ancak güvenilirlik ve baþarým önemli
654    ise donaným seçeneklerini çok iyi araþtýrmak gereklidir. E-posta
655    listelerimi donanýmlarla ilgili sorular ve de ticaret için
656    kullanýlabilir.
657      _________________________________________________________________
658    
659                              Ýþletimsel Sorular
660                                       
661     4.1) Binary cursor ve normal cursor arasýndaki fark nedir?
662     
663    DECLARE yardým sayfasýna bakýnýz.
664    
665     4.2) Sorgunun sadece ilk birkaç satýrýný nasýl SELECT edebilirim?
666     
667    FETCH yardým sayfasýna bakýnýz, ya da SELECT ... LIMIT ... kullanýnýz.
668    
669    Ýlk birkaç satýrý almak isteseniz bile, tüm sorgu deðerlendirilmek
670    durumunda kalýnabilir. ORDER BY içeren bir sorgu düþünün. Eðer ORDER
671    BY iþe eþleþen bir index varsa, PostgreSQL istenen ilk birkaç satýrý
672    iþleyebilir, ya da tüm sorgu istenen satýrlar üretilene kadar
673    iþlenebilir.
674    
675     4.3) psql'in içinde gördügüm tablolarýn ya da diðer þeylerin listesini
676     nasýl alabilirim?
677     
678    pgsql/src/bin/psql/describe.c içindeki psql kaynak kodunu
679    okuyabilirsiniz. Bu kod, psql'in \ ile baþlayan komutlarýnýn çýktýsýný
680    olusturan SQL komutlarýný içerir. Ayný zamanda, psql'i -E seçeneði ile
681    baþlatýp, verdiðiniz komutlarý çalýþtýrmak için yaptýðý sorgularýn
682    çýktýlarýný görebilirsiniz.
683    
684     4.4) Bir tablodan bir kolonu nasýl kaldýrabilirim?
685     
686    Bu özellik (ALTER TABLE DROP COLUMN) 7.3 sürümü ile gelmiþtir. Eski
687    sürümlerde aþaðýdakileri uygulamalýsýnýz:
688 BEGIN;
689 LOCK TABLE old_table;
690 SELECT ...  -- select all columns but the one you want to remove
691 INTO TABLE new_table
692 FROM old_table;
693 DROP TABLE old_table;
694 ALTER TABLE new_table RENAME TO old_table;
695 COMMIT;
696                 
697     4.5) Bir satýr, tablo ve veritabaný için en fazla büyüklük nedir?
698     
699    Sýnýrlar:
700    
701    Veritabaný için en fazla büyüklük nedir?
702    Sýnýrsýz (32 TB'lýk veritabaný bulunmaktadýr)
703    Bir tablo için en fazla büyüklük nedir?
704    32 TB
705    Bir satýr için en fazla büyüklük nedir?
706    1.6 TB
707    Bir alan için en fazla büyüklük nedir?
708    1 GB
709    Tabloda en fazla satýr sayýsý kaçtýr?
710    Sýnýrsýz
711    Bir tabloda olabilecek en fazla kolon sayýsý kaçtýr?
712    Kolon tiplerine baðlý olarak 250-1600
713    Bir tabloda olabilecek en fazla index sayýsý kaçtýr?
714    Sýnýrsýz
715    
716    Tabii ki bunlar aslýnda sýnýrsýz degildir. Burada belirtilen sýnýrlar,
717    fiziksel sýnýrlarýn haricindeki sýnýrlardýr. Boþ disk alaný,
718    hafýza/takas alaný na baðlý sýnýrlamalar vardýr. Baþarým, sýnýr
719    deðerlere yaklaþtýkça, ya da deðerler çok büyük olduðunda düþebilir.
720    
721    Bir tablo için büyüklük sýnýrý olan 32 TB, iþletim sisteminin büyük
722    dosya desteði olup olmamasýndan baðýmsýzdýr. Büyük tablolar, 1 GB'lik
723    dosyalarda saklandýðý için, dosya sistemi sýnýrlarýnin bir önemi
724    yoktur.
725    
726    Tablo ve kolon sayýsý büyüklükleri, ön tanýmlý blok büyüklüðü 32k ya
727    çýkarýlarak arttýrýlabilir.
728    
729     4.6) Tipik bir metin dosyasýndaki veriyi saklamak için ne kadar disk alaný
730     gereklidir?
731     
732    Bir PostgreSQL veritabaný, veriyi "flat" metin dosyasýnda saklamak
733    için gereken alanýn 5 kat fazla disk alanýna gereksinim duyabilir.
734    
735    Her satýrýnda bir tamsayý ve metin (text) içeren, 100.000 satýrlýk bir
736    dosya düþünün. Her satýrýn ortalama 20 byte olduðunu farzedelim. Metin
737    dosyasý 2.8 MB olacaktýr. Bu veriyi tutan PostgreSQL veritabaný
738    yaklaþýk 6.4 MB yer kaplayacaktýr.
739   36 byte: Her bir satýr baþlýðý (yaklaþýk)
740 + 24 byte: Bir tamsayý (int) alaný ve bir metin (text) alaný
741 +  4 byte: Sayfada tuple a pointer
742 ----------------------------------------
743   64 byte -> kayýt baþýna
745    PostgreSQL'de veri sayfasý (data page) büyüklüðü 8192 byte (8k)dýr,
746    dolayýsýyla:
747 8192 byte -> page baþýna
748 -------------------------  =  Her bir veritabaný page'ý baþýna 128 satýr (yaklaþýk)
749   Satýr baþýna 64 byte
751 100000 veri satýrý
752 --------------------  =  782 veritabaný sayfasý
753      128 satýr
755    782 veritabaný sayfasý * sayfa baþýna 8192 byte = 6,406,144 bytes (6.4
756    MB)
757    
758    Index'ler çok fazla yere gereksinim duymazlar, ama index'lenmiþ veriyi
759    tutacaklarýndan büyük olabilirler.
760    
761    NULL deðerler bitmapler içinde tutulur; dolayýsýyla çok az yer
762    kaplarlar.
763    
764     4.7) Veritabanýnda hangi tablo ya da index'lerin tanýmlandýðýný nasýl
765     görebilirim?
766     
767    psql, bu tür bilgileri göstermek için, \ ile baþlayan bir çok komut
768    sunmaktadýr. \? komutu ile bu komutlarý görebilirsiniz. Ayrýca,
769    bunlarý açýklayan ve pg_ ile baþlayan çok sayýda sistem tablosu
770    bulunmaktadýr. Ayný zamanda, psql -l ile tüm veritabanlarýný
771    listeyelebirsiniz.
772    
773    Ayrýca, pgsql/src/tutorial/syscat.source kodunu inceleyebilirsiniz. Bu
774    dosya, veritabaný sistem dosyalarýndan bilgiyi almak için gereksinim
775    duyulan bir çok SELECT'leri gösterir.
776    
777     4.8) Sorgularým cok yavaþ, ya da index'lerimi kullanmýyorlar. Neden?
778     
779    Indexler her sorgu tarafýndan otomatik olarak kullanýlmazlar. Indexler
780    eðer bir tablonun büyüklüðü minimum bir büyüklükten fazla ise ve sorgu
781    tablodaki satýrlarýn sadece küçük bir yüzdesini seçiyorsa kullanýlýr.
782    Bunun nedeni, index eriþiminin neden olduðu raslansal disk eriþimi nin
783    diskin ya da tablonun sýralý okunmasýndan daha yavas olabilmesidir.
784    
785    Bir index'in kullanýlýp kullanýlmayacaðýný belirlemek için, PostgreSQL
786    tablo hakkýndaki istatistiklere gereksinmesi vardýr. Bu istatistikler,
787    VACUUM ANALYZE kullanýlarak toplanýrlar. Optimizer, istatistikleri
788    kullanarak, tabloda kaç satýr olduðunu ve bilir ve indexin kullanýlýp
789    kullanýlmayacaðýna daha iyi karar verir. Istatistikler, ayný zamanda
790    en uygun join sýrasýný ve yöntemini belirlemekte çok önemlidir.
791    Ýstatistik toplanmasý, tablo içerikleri deðiþtikçe periyodik olarak
792    yapýlmalýdýr.
793    
794    Indexler normalde ORDER BY sorgularý ya da join iþlemlerini
795    gerçekleþtirmek için kullanýlmazlar. Açýk bir sýralamayý takip eden
796    sýralý bir arama (sequential scan), büyük bir tabloda index aramasý
797    yapmaktan genelde daha hýzlýdýr.
798    Ancak, ORDER BY ile birleþmiþ LIMIT genellikle bir index
799    kullanacaktýr; çünkü tablonun sadece belirli bir miktarý
800    döndürülecektir. Aslýnda, MAX() ve MIN() fonksiyonlarýnýn index
801    kullanmamalarýndan dolayý, bu gibi deðerleri ORDER BY ve LIMIT
802    kullanarak da almak olasýdýr:
803     SELECT col
804     FROM tab
805     ORDER BY col [ DESC ]
806     LIMIT 1;
808    Eðer optimizer'ýn sýralý arama yapmasýnýn yanlýþ olduðuna
809    inanýyorsanýz, SET enable_seqscan TO 'off' kullanýn ve index kullanan
810    aramalarýn hala daha hýzlý olup olmadýðýný görün.
811    
812    LIKE ya da ~ gibi operatörler kullanýyorsanýz, index'ler sadece
813    aþaðýdaki koþullarda kullanýlabilir:
814      * Arama dizininin baþý, dizinin baþý ile baðlanmalýdýr. Yani,
815           + LIKE sorgularý % ile baþlamamalýdýr.
816           + Düzenli ifade sorgularý ^ iþe baþlamamalýdýr.
817      * Arama metni bir karakter sýnýfý ile baþlayamaz. Örnek: [a-e]
818      * ILIKE ve ~* gibi büyük/küçük harfe duyarsýz aramalar index'lerden
819        yararlanmazlar. Onun yerine, bölüm 4.12'de anlatýlan fonksiyonel
820        index'leri kullanabilirsiniz.
821      * initdb sýrasýnda öntanýmlý C locale'i kullanýlmalýdýr.
822        
823     4.9) query-optimizer'ýn sorgularýmý nasýl deðerlendirdiðini, iþleme
824     soktuðunu nasýl görebilirim?
825     
826    EXPLAIN yardým sayfasýna bakýnýz.
827    
828     4.10) R-tree index nedir?
829     
830    R-tree index, uzaysal (spatial) verileri indexlemek için kullanýlýr.
831    Bir hash index, dizi aramalarýnda (range search) kullanýlamaz. B-tree
832    index dizi aramalarýnda sadece tek boyutlu çalýþmaktadýr. R-tree, çok
833    boyutlu veriyi destekler. Örneðin, eðer bir R-tree index point veri
834    tipi üzerinde inþa edililebilirse, sistem "select all points within a
835    bounding rectangle" gibi sorgulara daha verimli yanýtlar verecektir.
836    
837    Orijinal R-tree tasarýmýný açýklayan belge:
838    
839    Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
840    Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
841    Data, 45-57.
842    
843    Bu belgeyi, Stonebraker'ýn "Readings in Database Systems" kitabýnda
844    bulabilirsiniz.
845    
846    Gömülü R-tree indexleri poligon ve boxlarý kullanabilir. Teorik
847    olarak, R-tree indexlerin özelliklerini geniþletmek bir miktar çaba
848    gerektirir ve bunun nasýl yapýlacaðýna dair bir belgemiz henüz
849    bulunmamaktadýr.
850    
851     4.11) Genetic Query Optimizer nedir?
852     
853    GEQO modülü, Genetic Algorithm(GA) kullanýlarak tablolar
854    birleþtirildiðinde sorgu optimizasyonunu hýzlandýrýr.
855    
856     4.12) Düzenli ifade (Regular Expression) aramalarýný ve büyük/küçük harfe
857     duyarsýz aramalarý nasýl yapabilirim? Bu büyük(küçük harfe duyarlý aramalar
858     için index'i nasýl kullanabilirim?
859     
860    ~ operatörü düzenli ifade eþleþmesi ve ~* büyük/küçük harfe duyarsýz
861    düzenli ifade eþleþmesi yapar. Büyük/küçük harfe duyarlý olan LIKE'ýn
862    büyük/küçük harfe duyarsýz olan biçimi ILIKE'týr ve PostgreSQL 7.1
863    sürümü ile birlikte gelmiþtir.
864    
865    Büyük-küçük harfe duyarsýz eþitlik karþýlaþtýrmalarý aþaðýdaki gibi
866    ifade edilir:
867 SELECT *
868 FROM tab
869 WHERE lower(col) = 'abc'
870                 
871    Bu standart bir index yaratmayacaktýr. Ancak eðer fonksiyonel bir
872    index yaratýrsanýz; o kullanýlacaktýr:
873 CREATE INDEX tabindex on tab (lower(col));
875     4.13) Bir sorguda, bir alanin "NULL" olduðunu nasýl ortaya çýkarabilirim?
876     
877    Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz.
878    
879     4.14) Çesitli karakter tipleri arasýndaki farklar nelerdir?
880     
881 Veri Tipi           Ýç Adý              Not
882 --------------------------------------------------
883 VARCHAR(n)      varchar         boyut en büyük uzunluðu verir; sadece verilen kadar veri tutulur.
884 CHAR(n)         bpchar          belirtilen uzunluða kadar sonuna  boþluk eklenir.
885 TEXT            text            uzunlukta herhangi bir üst sýnýr yoktur.
886 BYTEA           bytea           variable-length byte array (null-byte safe)
887 "char"          char            bir karakter
888                 
889    Ýç adlarý (internal name) sistem kataloglarýný ve bazý hata
890    mesajlarýný incelerken göreceksiniz.
891    
892    Ýlk dört veri tipi "varlena" tipidir (yani, diskteki ilk 4 bayt
893    uzunluktur; devamý da veridir.) Dolayýsýyla, kullanýlan gerçek alan,
894    belirtilen alandan biraz daha büyüktür. Ancak, bu veri tipleri,
895    sýkýþtýrýlmaya tabi tutulabilir; dolayýsýyla disk alaný beklenilenden
896    küçük olabilir. VARCHAR(n) büyüklüðü artabilen ama en büyük uzunluðu
897    sýnýrlý olan verileri saklamak için en uygun yöntemdir. TEXT, 1 GB
898    büyüklüðe kadar olan verileri tutmak için kullanýlýr.
899    
900    CHAR(n), ayný uzunluktaki dizilerin saklanmasý için kullanýmýr.
901    CHAR(n) belirtilen uzunluða kadar boþluk ile doldurur; ancak
902    VARCHAR(n) sadece verilen karakterleri saklar. BYTEA binary veri
903    saklamak içindir; ayrýca "NULL" bayt içeren deðerleri de saklar.
904    Burada anlatýlan üç veri tipi de benzer baþarým karakteristiklere
905    sahiptir.
906    
907     4.15.1) Nasýl serial/otomatik artan (auto-incrementing) bir alan
908     yaratabilirim?
909     
910    PostgreSQL'de SERIAL veri tipi vardýr. Bu veri tipi bir sequence ve
911    kolon üzerinde bir index yaratýr.
912    
913    Örnek, aþaðýdaki sorgu:
914 CREATE TABLE person (
915     id   SERIAL,
916     name TEXT
918                 
919    buna çevrilir:
920 CREATE SEQUENCE person_id_seq;
921 CREATE TABLE person (
922     id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
923     name TEXT
925 CREATE UNIQUE INDEX person_id_key ON person ( id );
926                 
927    Sequenceler hakkýnda daha fazla bilgi için create_sequence yardým
928    sayfasýna bakabilirsiniz. Her satýrýn OID alanýný tekil bir sayý
929    olarak alabilirsiniz. Ancak, veritabanýnýzýn dump'ýný alýp yeniden
930    yüklerseniz, OID deðerlerini koruyabilmek için pg_dump'ýn -o
931    parametresini ya da "COPY WITH OIDS" seçeneðini kullanmanýz
932    gerekecektir.
933    
934     4.15.2) SERIAL giriþinin degerini nasýl alabilirim?
935     
936    Bir yaklaþým, sequence nesnesindeki SERIAL deðerini, veriyi girmeden
937    önce nextval() ile alýp, aldýðýnýz deðeri kendinizin girmesidir.
938    4.15.1'deki örnek tabloyu kullanarak bir örnek verelim:
939 new_id = execute("SELECT nextval('person_id_seq')");
941     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
943    Diðer sorgular için new_id'de yeni deðerin saklanmasý gerekir.
944    Otomatik olarak yaratýlan SEQUENE nesnesinin adý, <tablo adý>_<serial
945    kolonu adý>_seq þeklinde olacaktýr (< > iþaretleri olmadan).
946    
947    Alternatif olarak, atanmýþ SERIAL deðerini, deðer girildikten sonra
948    currval() fonksiyonu ile alabilirsiniz:
949                 execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
950                 new_id = execute("SELECT currval('person_id_seq')");
951                 
952    Son olarak, ön tanýmlý deðeri bulmak için INSERT ifadesinden dönen OID
953    deðerini kullanabilirsiniz; ancak bu en az taþýnabilir çözüm
954    olacaktýr. Perl'de, Edmund Mergl'in DBD:Pg mödülü ile birlikte DBI
955    kullanarak, OID deðeri $sth->execute() çalýþtýrýldýktan sonra
956    $sth->(pg_oid_status) ile alýnabilir.
957    
958     4.15.3) currval() ve nextval() diðer kullanýcýlara sorun yaratmaz mý?
959     
960    Hayýr. curval(), tüm kullanýcýlar deðil, backend tarafýndan atanan
961    geçerli deðeri döndürür.
962    
963     4.15.4) Neden sequence sayýlarý transaction iþleminin iptalinden sonra
964     yeniden kullanýlýyor? Neden sequence/SERIAL kolonumdaki sayýlarda atlamalar
965     oluyor?
966     
967    Uyumluluðu arttýrmak için, sequence deðerleri çalýþan transaction'lara
968    gerektiði þekilde aktarýlýr ve transaction bitene kadar o deðer
969    kilitlenmez. Bu, iptal edilen transaction iþlemleri nedeniyle
970    boþluklara neden olur.
971    
972     4.16) OID nedir? TID nedir?
973     
974    OIDler, tekil satýr numaralarýna PostgreSQL'in yanýtýdýr.
975    PostgreSQL'de yaratýlan her sayý, tekil bir OID alýr. initdb iþlemi
976    sýrasýnda yaratýlan tüm OID'ler 16384'ten küçüktür
977    (backend/access/transam.h). Kullanýcýlar tarafýndan yaratýlan tüm
978    OID'ler bu sayýya eþit ya da bu sayýdan büyüktür. Varsayýlan durumda,
979    tüm bu OIDler sadece bir tablo ya da veritabanýnda deðil, tüm
980    PostgreSQL kurulumunda tekildir.
981    
982    PostgreSQL OIDleri, tablolar arasýnda satýrlarý iliþkilendirmek için
983    kendi iç tablolarýnda kullanýr. Bu OIDler belirli kullanýcý
984    satýrlarýný belirtmek için kullanabilir ve join iþlemlerinde
985    kullanýlýr. OID deðerlerini saklamak için OID kolon tipini kullanmanýz
986    önerinir. Daha hýzlý bir eriþim için, OID alanýnda bir index
987    yaratabilirsiniz.
988    
989    OID'ler yeni satýrlara, tüm veritabanlarý tarafýnda kullanýlan ortak
990    bir alandan atanýrlar. Eðer OID'i baþka bir deðere eþitlemek
991    isterseniz ya da tablonun bir kopyasýný orijinal OIDler ile çýkarmak
992    isterseniz, bu mümkündür:
993                         CREATE TABLE new_table(old_oid oid, mycol int);
994                         SELECT old_oid, mycol INTO new FROM old;
995                         COPY new TO '/tmp/pgtable';
996                         DELETE FROM new;
997                         COPY new WITH OIDS FROM '/tmp/pgtable';
998                 
999    OIDler 4-bit tamsayý olarak saklanýrlar ve 4 milyarda overflow
1000    olacaktýr. Kimse bu sayýya ulaþtýðýna dair bir bilgi iletmedi ve bu
1001    sýnýrý kimse bu sýnýra ulaþmadan kaldýracaðýz.
1002    
1003    TIDler, belirli fiziksel satýrlar block ve offset deðerleri ile
1004    belirtmekte kullanýlýr. TIDler, satýrlar deðiþtiðinde ya da yeniden
1005    yüklendiðinde deðiþirler. Index girdileri tarafýndan fiziksel
1006    satýrlarý göstermek için kullanýlýrlar.
1007    
1008     4.17) PostgreSQL'de kullanýlan bazý terimlerin anlamlarý nelerdir?
1009     
1010    Kaynak kodun bir kýsmý ve eski belgeler, daha geniþ kullaným alaný
1011    olan terimleri kullanýrlar. Bunlarýn bazýlarý:
1012      * table, relation, class
1013      * row, record, tuple
1014      * column, field, attribute
1015      * retrieve, select
1016      * replace, update
1017      * append, insert
1018      * OID, serial value
1019      * portal, cursor
1020      * range variable, table name, table alias
1021        
1022    Genel veritabaný terimleri,
1023    http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
1024    /glossary.html adresinde bulunabilir.
1025    
1026     4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasýný alýyorum?
1027     
1028    Sisteminizde sanal belleðinizi tüketmiþ olabilirsiniz, ya da
1029    çekirdeðiniz belli kaynaklar icin düþük bir sýnýra sahip olabilir.
1030    postmaster'ý baþlatmadan önce aþaðýdakileri deneyebilirsiniz:
1031 ulimit -d 262144
1032 limit datasize 256m
1033                 
1034    Kabuðunuza baðlý olarak, bunlardan sadece biri olumlu sonuç
1035    verecektir, ama bu iþlem veri segment sýnýrýnýzý arttýracak, ve belki
1036    de sorgunuzun tamamlanmasýný saðlayacaktýr. Bu komut, varolan iþleme
1037    (current process) ve komut çalýþtýrýldýktan sonraki tüm alt iþlemlere
1038    uygulanýr. Eðer SQL istemcinizle, backend'in çok fazla veri döndürmesi
1039    nedeniyle bir sorun yaþýyorsanýz, bunu istemciyi baþlatmadan önce
1040    deneyiniz.
1041    
1042     4.19) Hangi PostgreSQL sürümünü çalýþtýrdýðýmý nasýl görebilirim?
1043     
1044    psql arabiriminde, select version(); yazýnýz.
1045    
1046     4.20) Neden large-object iþlemlerim, "invalid large obj descriptor"
1047     hatasýný veriyor?
1048     
1049    Large object iþlemlerinizin uçlarýna, yani lo_open ... lo_close
1050    komutlarýnýn çevresine, BEGIN WORK ve COMMIT koymanýz gerekmektedir;
1051    
1052    Þu anda, PostgreSQL kurallarý large objectleri transaction commit
1053    edildiðinde kapatarak uygulamaktadýr. Dolayýsýyla handle ile yapýlacak
1054    ilk þey invalid large obj descriptor hatasý ile
1055    sonuçlanacaktýr.Dolayýsýyla çalýþan kodunuz eðer transaction
1056    kullanmazsanýz hata mesajlarý üretecektir.
1057    
1058    Eðer ODBC gibi bir istemci arabirimi kullanýyorsanýz, auto-commit'i
1059    kapatmanýz gerekebilir.
1060    
1061     4.21) Þu andaki zamaný öntanýmlý deðer olarak kabul eden How do I create a
1062     column that will default to the current time?
1063     
1064    Alttakini kullanabilirsiniz:
1065 CURRENT_TIMESTAMP:
1066 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1067                 
1068     4.22) Neden IN kullanan subquery'lerim çok yavas?
1069     
1070    7.4 sürümünden önce, subqueryler. Eðer subquery sadece birkaç satýr ve
1071    outer query bol sayýda satýr döndürüyorsa, IN en hýzlýsýdýr. Sorgularý
1072    hýzlandýrmak için IN yerine EXISTS kullanýn:
1073 SELECT *
1074     FROM tab
1075     WHERE col1 IN (SELECT col2 FROM TAB2)
1076                 
1077    sorgusunu, aþaðýdaki ile deðiþtirin:
1078 SELECT *
1079     FROM tab
1080     WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
1081                 
1082    Bu iþlemin hýzlý olmasý için, subcol'un indexlenmiþ bir kolon olmasý
1083    gerekmektedir.
1084    
1085    7.4 sürümü ve sonrasýnda, IN aslýnda normal sorgularla ayný karmaþýk
1086    join tekniklerini kullanýr ve EXISTS'e tercih edilir.
1087    
1088     4.23) Outer join iþlemini nasýl yapabilirim?
1089     
1090    PostgreSQL outer joins islemlerini SQL standartlarýný kullanarak
1091    gerçekleþtirmektedir. Aþaðýda 2 örnek bulunmaktadýr:
1092 SELECT *
1093 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1094                 
1095    ya da
1096 SELECT *
1097 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1098                 
1099    Bu özdeþ sorgular t1.col' i t2.col'ye join ederler ve ayný zamanda
1100    t1'deki unjoined satýrlarý (t2'de eþlenmemiþ olanlarla) döndürürler.
1101    RIGHT JOIN t2'nin unjoined satýrlarýný ekleyecektir. Bir FULL join,
1102    eþleþmiþ bütün satýrlarý ve t1 ile t2'den tüm baðlanmamýþ (unjoined)
1103    satýrlarý alýr. OUTER sözcüðü seçimseldir ve LEFT, RIGHT ve FULL join
1104    iþlemlerinde olduðu kabul edilir. Sýradan join iþlemleri INNER JOIN
1105    olarak adlandýrýlýr.
1106    
1107    Önceki sürümlerde, OUTER JOINler UNION ve NOT IN kullanýlarak simüle
1108    edilebiliyordu. Örneðin, tab1 ve tab2'yi birleþtirirken, aþaðýdaki
1109    sorgu iki tablonun dýþtan baðlanmasýný saðlar:
1110 SELECT tab1.col1, tab2.col2
1111 FROM tab1, tab2
1112 WHERE tab1.col1 = tab2.col1
1113 UNION ALL
1114 SELECT tab1.col1, NULL
1115 FROM tab1
1116 WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1117 ORDER BY col1
1118                 
1119     4.24) Ayný andan birden fazla veritabanýnda nasýl iþlem yapabilirim?
1120     
1121    Mevcut veritabanýnýz dýþýndaki baþka bir veritabanýnýzý sorgulamanýzýn
1122    bir yolu bulunmamaktadýr. Bunun nedeni, PostgreSQL'in veritabanýna
1123    özel sistem kataloglarý yüklemesidir. Bu nedenle, cross-database bir
1124    sorgunun nasýl davranacaðýný kestirmek zordur.
1125    
1126    contrib/dblink fonksiyon çaðrýlarýný kullanarak cross-database
1127    sorgulara izin verir. Tabii ki, bir istemci deðiþik veritabanlarýna
1128    ayný anda eriþim saðlayabilir ve bilgiyi bu þekilde birleþtirebilir.
1129    
1130     4.25) Bir fonksiyondan nasýl çoklu satýr ya da kolon döndürebilirim?
1131     
1132    7.3 sürümünde, bir fonksiyondan kolaylýkla çoklu satýr ya da sütun
1133    döndürebilirsiniz.
1134    (http://techdocs.postgresql.org/guides/SetReturningFunctions)
1135    
1136     4.26) Neden Pl/PgSQL fonksiyonlarý içinden güvenli bir þekilde tablo
1137     yaratma/kaldýrma iþlemlerini yapamýyoruz?
1138     
1139    PL/PgSQL fonksiyon içerikleri cache'ler. Bunun istenmeyen bir tarafý,
1140    eðer bir PL/PgSQL fonksiyonu geçici bir tabloya eriþiyorsa ve bu tablo
1141    ileride kaldýrýlýp yeniden oluþturulduktan sonra fonksiyon yeniden
1142    çaðrýlýrsa, fonksiyon çalýþmayacaktýr; çünkü cache'lenmiþ fonksiyon
1143    hala eski geçici tabloyu gösteriyor olacaktýr. Çözüm, geçici tablo
1144    eriþimleri için PL/PgSQL'de EXECUTE kullanmaktýr. Bu, sorgunun her
1145    seferinde yeniden iþlenmesini saðlayacaktýr.
1146    
1147     4.27) 4.28) Hangi þifreleme seçenekleri bulunmaktadýr?
1148     
1149      * contrib/pgcrypto SQL sorgularýnda kullanýlabilmesi için þifreleme
1150        fonksiyonlarý içermektedir.
1151      * Ýstemciden sunucuya iletiþimi þifrelemek için, sunucuda ssl
1152        seçeneði postgresql.conf içinde açýk olmalýdýr. Ayrýca,pg_hba.conf
1153        dosyasý içinde host ya da hostssl kaydý mutlaka olmalýdýr ve
1154        istemci sslmode kapatýlmamalýdýr. (Ayný zamanda,PostgreSQL'in
1155        doðal SSL baðlantýlarý dýþýnda ssh ya da ssl gibi 3.parti
1156        þifrelenmiþ veri iletimi de mümkündür.)
1157      * Veritabaný kullanýcý adý ve þifreleri 7.3 sürümü ile birlikte
1158        otomatik olarak þifrelenirler. Önceki sürümlerde, postgresql.conf
1159        içindeki PASSWORD_ENCRYPTION seçeneðini aktif hale getirmeniz
1160        gerekmektedir.
1161      * Sunucunun kendisini þifreli dosya sistemi üzerinde
1162        çalýþtýrabilirsiniz.
1163      _________________________________________________________________
1164    
1165                     PostgreSQL Özelliklerini Geniþletmek
1166                                       
1167     5.1) Kullanýcý-tanýmlý bir fonksiyon yazdým. psql'de çalýþtýrdýðým zaman
1168     neden core dump ediyor?
1169     
1170    Sorunun nedeni birden fazla þey olabilir. Kullanýcý-tanýmlý
1171    fonksiyonunuzu stand-alone bir programda çalýþtýrmayý deneyiniz.
1172    
1173     5.2) PostgreSQL'e nasýl yeni tipler/fonksiyonlar ekleyebilirim?
1174     
1175    Çalýþmalarýnýzý pgsql-hackers e-posta listesine gönderiniz. Kodunuz
1176    incelendikten sonra contrib dizinine konacaktýr.
1177    
1178     5.3) Bir tuple dondürmek icin bir C fonksiyonunu nasil yazarým?
1179     
1180    PostgreSQL 7.3 sürümü ile birlikte, C, PL/PgSQL ve SQL kullanýlarak
1181    tablo-döndüren fonksiyonlar tamamen desteklenmektedir. Ayrýntýlý bilgi
1182    için PostgreSQL 7.3.2 Kullanýcý Rehberi'ne bakabilrisiniz. Bir örneði
1183    contrib/tablefunc içinde bulabilirsiniz.
1184    
1185     5.4) Bir kaynak dosyasýnda deðiþiklik yaptým. Yeniden derlememe raðmen
1186     deðiþiklik geçerli olmuyor. Neden?
1187     
1188    Makefile'lar include dosyalarý için tam bir baðýmlýlýk içermezler.
1189    Öncelikle make clean, ardýndan da baska bir make iþlemi yapmanýz
1190    gerekir. GCC kullanýyorsanýz, configure betiðinin --enable-depend
1191    seçeneðini, derleyicinin baðýmlýlýklarý otomatik olarak hesaplamasý
1192    için kullanabilirsiniz.