2 PostgreSQL için Sýkça Sorulan Sorular (SSS)
4 Son güncelleme : 15 Kasým 2004 Pazartesi - 15:03:23
6 Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
8 Çevirenler : Devrim Gündüz (devrim@tdmsoft.com)
9 Nicolai Tufar (ntufar@tdmsoft.com)
10 Volkan YAZICI (volkany@phreaker.net)
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
17 Platforma özel sorularýnýz, http://www.PostgreSQL.org/docs/index.html
19 _________________________________________________________________
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?
39 Kullanýcý/istemci Sorularý
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
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
50 3.1) PostgreSQL'i /usr/local/pgsql dizininden baþka dizinlere nasýl
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.
56 3.4) Postmaster'ý, baþlattýðýmda, IpcSemaphoreCreate hatasý alýyorum.
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ý
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>
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
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
79 4.7) Veritabanýnda hangi tablo ya da index'lerin tanýmlandýðýný nasýl
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
91 4.14) Çesitli karakter tipleri arasýndaki farklar nelerdir?
92 4.15.1) Nasýl serial/otomatik artan (auto-incrementing) bir alan
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ý
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"
106 4.21) Þu andaki zamaný öntanýmlý deðer olarak kabul eden kolonu nasýl
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?
116 PostgreSQL Özelliklerini Geniþletmek
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 _________________________________________________________________
128 1.1) PostgreSQL nedir? Nasýl okunur?
130 PostgreSQL, Post-Gres-Q-L. olarak okunur
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.
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.
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.
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.
155 1.2) PostgreSQL'in haklarý nedir?
157 PostgreSQL Data Base Management System
159 Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
160 Portions Copyright (c) 1994-6 Regents of the University of California
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
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.
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.
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.
185 1.3) PostgreSQL, hangi Unix platforlarýnda çalýþýr?
187 Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i
188 çalýþtýracaktýr. Ayrýntýlý bilgi için kurulum belgelerine
191 1.4) Hangi Unix olmayan uyarlamalarý bulunmaktadýr?
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.
198 Ayrýca, http://forge.novell.com adresinde Novell Netware 6 portu
201 1.5) PostgreSQL'i nereden indirebilirim?
203 PostgreSQL için ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub
204 adresidir. Yansýlar için, ana web sayfamýza bakabilirsiniz.
206 1.6) Nereden destek alabilirim?
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:
215 Ayný zamanda, bir digest listesi bulunmaktadýr. Bu listeye üye olmak
216 için, pgsql-general-digest-request@PostgreSQL.org adresine, body
221 yazan bir e-posta atmanýz yeterli olacaktýr.
223 Digest postalar, ana liste 30k civarýnda e-postaya ulaþtýðýnda üyelere
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
231 yazan bir e-posta atmanýz yeterli olacaktýr.
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,
239 yazan bir e-posta atmanýz yeterli olacaktýr.
241 Bunun dýþýndaki e-posta listelerine ve PostgreSQL hakkýnda bilgiye,
242 PostgreSQL WWW ana sayfasýndan ulasabilirsiniz:
243 http://www.PostgreSQL.org
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.
249 Ticari destek veren firmalarýn listesine
251 http://www.postgresql.org/users-lounge/commercial-support.html
253 adresinden ulaþbilirsiniz.
255 1.7) En son sürüm nedir?
257 PostgreSQL'in son sürümü 7.4.6'dýr.
259 Her 6-8 ayda ana sürüm çýkarýlmasý planlanmaktadýr.
261 1.8) Hangi belgelere ulaþabilirim?
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.
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.
275 psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar,
276 aggregate'ler, vb. ile ilgili güzel komutlarý vardýr.
278 Web sitemiz daha fazla belgeyi içermektedir.
280 1.9) Bilinen hatalar ya da eksik özelliklere nereden ulaþabilirim?
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.
286 1.10) Nasýl SQL öðrenebilirim?
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.
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.
297 Bir baþkasý da, http://members.tripod.com/er4ebus/sql/index.htm
298 adresinde bulunan "Teach Yourself SQL in 21 Days, Second Edition"
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ý
306 1.11) PostgreSQL 2000 yýlýna uyumlu mudur?
310 1.12) Geliþtirme takýmýna nasýl katýlabilirim?
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.
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
323 1.13) Bir hata raporunu nasýl gönderebilirim?
325 PostgreSQL BugTool sayfasýna gidiniz. O sayfada bir bug bildirmek için
326 neleri yapmanýz gerektiði anlatýlmýþtýr.
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.
331 1.14) PostgreSQL, diger DBMS'lerle nasýl karþýlastýrýlabilir?
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.
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
344 Performans (Baþarým):
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
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
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
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.
382 1.15) PostgreSQL'e maddi açýdan nasýl destek olabilirim?
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.
388 Bir açýk kaynak kodlu proje için, kaliteli altyapý çok önemlidir. Bu
389 altyapý, projenin kesilmesini önler ve projenin ilerlemesini
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.
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 _________________________________________________________________
403 Kullanýcý/Ýstemci Sorularý
405 2.1) PostgreSQL icin ODBC sürücüleri var mý?
407 iki tane ODBC sürücüsü bulunmaktadýr: PsqlODBC ve OpenLink ODBC.
410 http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
411 adresinden indirebilirsiniz.
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
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.
422 2.2) PostgreSQL'i web sayfalarýnda kullanabilmek için hangi araçlar
425 http://www.webreview.com/ adresinde, arka planda veritabaný çalýstýran
426 Web sayfalarý için giriþ seviyesinde bilgi bulunmaktadýr.
428 Web ile bütünleþme için, PHP () mükemmel bir arabirim sunar.
430 Karmaþýk sorunlar için, çoðu kisi Perl arabirimini ve CGI.pm ya da
433 2.3) PostgreSQL'in grafik kullanýcý arabirimi var mýdýr?
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.
443 Daha ayrýntýlý liste için
444 http://techdocs.postgresql.org/guides/GUITools adresine
447 2.4) PostgreSQL ile iletiþimi kurabilmek için hangi dilleri kullanabilirim?
455 Diðerleri için, http://gborg.postgresql.org adresindeki
456 Drivers/Interfaces bölümüne bakabilirsiniz.
457 _________________________________________________________________
461 3.1) PostgreSQL'i, /usr/local/pgsql dizininden baþka dizinlere nasýl
464 configure betiðini çalýstýrýrken, --prefix seçeneðini veriniz.
466 3.2) postmaster'i baslattýgýmda, a Bad System Call ya da core dumped mesajý
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.
474 3.3) postmaster'i baþlattýðýmda, ýpcMemoryCreate hatasý alýyorum. Neden?
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.
485 3.4) postmaster'ý baþlattýðýmda, ýpcSemaphoreCreate hatasý alýyorum. Neden?
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.
495 Çalýþmayan semaphore'lar aðýr veritabaný iþlemlerinde çökme
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.
503 3.5) Diger bilgisayarlarýn benim PostgreSQL veritabaný sunucuma
504 baðlantýlarýný nasýl kontrol edebilirim?
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.
512 3.6) Veritabani motorunu daha iyi baþarým için nasýl ayarlayabilirim?
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.
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.
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
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.
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)
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.
549 3.7) Hangi hata ayýklama özellikleri bulunmaktadýr?
551 PostgreSQL, hata ayýklama amacýyla kullanýlabilecek durum bilgisi
552 rapor eden çeþitli özeliklere sahiptir.
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.
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:
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.
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.
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
589 postgres programý hata ayýklama ve baþarým ölçümleri için -s, -A ve -t
590 seçeneklerine sahiptir.
592 3.8) Baðlanmaya çalýþýrken, neden "Sorry, too many clients" hatasýný
595 Postmaster'ýn eþzamanlý olarak baþlatabileceði backend süreçleri
596 sýnýrlarýný arttýrmanýz gerekmektedir.
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
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
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
618 3.9) pgsql_tmp dizinin içindeki dosyalar nelerdir?
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
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.
630 3.10) PostgreSQL sürümlerini yükseltmek için neden bir dump/reload iþlemi
631 gerçekleþtirmek zorundayým?
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.
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
647 3.11) Nasýl bir donaným kullanmalýyým?
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
657 _________________________________________________________________
661 4.1) Binary cursor ve normal cursor arasýndaki fark nedir?
663 DECLARE yardým sayfasýna bakýnýz.
665 4.2) Sorgunun sadece ilk birkaç satýrýný nasýl SELECT edebilirim?
667 FETCH yardým sayfasýna bakýnýz, ya da SELECT ... LIMIT ... kullanýnýz.
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
675 4.3) psql'in içinde gördügüm tablolarýn ya da diðer þeylerin listesini
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.
684 4.4) Bir tablodan bir kolonu nasýl kaldýrabilirim?
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:
689 LOCK TABLE old_table;
690 SELECT ... -- select all columns but the one you want to remove
693 DROP TABLE old_table;
694 ALTER TABLE new_table RENAME TO old_table;
697 4.5) Bir satýr, tablo ve veritabaný için en fazla büyüklük nedir?
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?
705 Bir satýr için en fazla büyüklük nedir?
707 Bir alan için en fazla büyüklük nedir?
709 Tabloda en fazla satýr sayýsý kaçtýr?
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?
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.
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
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.
729 4.6) Tipik bir metin dosyasýndaki veriyi saklamak için ne kadar disk alaný
732 Bir PostgreSQL veritabaný, veriyi "flat" metin dosyasýnda saklamak
733 için gereken alanýn 5 kat fazla disk alanýna gereksinim duyabilir.
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,
747 8192 byte -> page baþýna
748 ------------------------- = Her bir veritabaný page'ý baþýna 128 satýr (yaklaþýk)
752 -------------------- = 782 veritabaný sayfasý
755 782 veritabaný sayfasý * sayfa baþýna 8192 byte = 6,406,144 bytes (6.4
758 Index'ler çok fazla yere gereksinim duymazlar, ama index'lenmiþ veriyi
759 tutacaklarýndan büyük olabilirler.
761 NULL deðerler bitmapler içinde tutulur; dolayýsýyla çok az yer
764 4.7) Veritabanýnda hangi tablo ya da index'lerin tanýmlandýðýný nasýl
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ý
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.
777 4.8) Sorgularým cok yavaþ, ya da index'lerimi kullanmýyorlar. Neden?
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.
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
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:
805 ORDER BY col [ DESC ]
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.
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.
823 4.9) query-optimizer'ýn sorgularýmý nasýl deðerlendirdiðini, iþleme
824 soktuðunu nasýl görebilirim?
826 EXPLAIN yardým sayfasýna bakýnýz.
828 4.10) R-tree index nedir?
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.
837 Orijinal R-tree tasarýmýný açýklayan belge:
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
843 Bu belgeyi, Stonebraker'ýn "Readings in Database Systems" kitabýnda
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
851 4.11) Genetic Query Optimizer nedir?
853 GEQO modülü, Genetic Algorithm(GA) kullanýlarak tablolar
854 birleþtirildiðinde sorgu optimizasyonunu hýzlandýrýr.
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?
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.
865 Büyük-küçük harfe duyarsýz eþitlik karþýlaþtýrmalarý aþaðýdaki gibi
869 WHERE lower(col) = 'abc'
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?
877 Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz.
879 4.14) Çesitli karakter tipleri arasýndaki farklar nelerdir?
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
889 Ýç adlarý (internal name) sistem kataloglarýný ve bazý hata
890 mesajlarýný incelerken göreceksiniz.
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.
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
907 4.15.1) Nasýl serial/otomatik artan (auto-incrementing) bir alan
910 PostgreSQL'de SERIAL veri tipi vardýr. Bu veri tipi bir sequence ve
911 kolon üzerinde bir index yaratýr.
913 Örnek, aþaðýdaki sorgu:
914 CREATE TABLE person (
920 CREATE SEQUENCE person_id_seq;
921 CREATE TABLE person (
922 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
925 CREATE UNIQUE INDEX person_id_key ON person ( id );
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
934 4.15.2) SERIAL giriþinin degerini nasýl alabilirim?
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).
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')");
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.
958 4.15.3) currval() ve nextval() diðer kullanýcýlara sorun yaratmaz mý?
960 Hayýr. curval(), tüm kullanýcýlar deðil, backend tarafýndan atanan
961 geçerli deðeri döndürür.
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
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.
972 4.16) OID nedir? TID nedir?
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.
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
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';
997 COPY new WITH OIDS FROM '/tmp/pgtable';
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.
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.
1008 4.17) PostgreSQL'de kullanýlan bazý terimlerin anlamlarý nelerdir?
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
1020 * range variable, table name, table alias
1022 Genel veritabaný terimleri,
1023 http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
1024 /glossary.html adresinde bulunabilir.
1026 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasýný alýyorum?
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:
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
1042 4.19) Hangi PostgreSQL sürümünü çalýþtýrdýðýmý nasýl görebilirim?
1044 psql arabiriminde, select version(); yazýnýz.
1046 4.20) Neden large-object iþlemlerim, "invalid large obj descriptor"
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;
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.
1058 Eðer ODBC gibi bir istemci arabirimi kullanýyorsanýz, auto-commit'i
1059 kapatmanýz gerekebilir.
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?
1064 Alttakini kullanabilirsiniz:
1066 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1068 4.22) Neden IN kullanan subquery'lerim çok yavas?
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:
1075 WHERE col1 IN (SELECT col2 FROM TAB2)
1077 sorgusunu, aþaðýdaki ile deðiþtirin:
1080 WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
1082 Bu iþlemin hýzlý olmasý için, subcol'un indexlenmiþ bir kolon olmasý
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.
1088 4.23) Outer join iþlemini nasýl yapabilirim?
1090 PostgreSQL outer joins islemlerini SQL standartlarýný kullanarak
1091 gerçekleþtirmektedir. Aþaðýda 2 örnek bulunmaktadýr:
1093 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1097 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
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.
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
1112 WHERE tab1.col1 = tab2.col1
1114 SELECT tab1.col1, NULL
1116 WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1119 4.24) Ayný andan birden fazla veritabanýnda nasýl iþlem yapabilirim?
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.
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.
1130 4.25) Bir fonksiyondan nasýl çoklu satýr ya da kolon döndürebilirim?
1132 7.3 sürümünde, bir fonksiyondan kolaylýkla çoklu satýr ya da sütun
1134 (http://techdocs.postgresql.org/guides/SetReturningFunctions)
1136 4.26) Neden Pl/PgSQL fonksiyonlarý içinden güvenli bir þekilde tablo
1137 yaratma/kaldýrma iþlemlerini yapamýyoruz?
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.
1147 4.27) 4.28) Hangi þifreleme seçenekleri bulunmaktadýr?
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
1161 * Sunucunun kendisini þifreli dosya sistemi üzerinde
1162 çalýþtýrabilirsiniz.
1163 _________________________________________________________________
1165 PostgreSQL Özelliklerini Geniþletmek
1167 5.1) Kullanýcý-tanýmlý bir fonksiyon yazdým. psql'de çalýþtýrdýðým zaman
1168 neden core dump ediyor?
1170 Sorunun nedeni birden fazla þey olabilir. Kullanýcý-tanýmlý
1171 fonksiyonunuzu stand-alone bir programda çalýþtýrmayý deneyiniz.
1173 5.2) PostgreSQL'e nasýl yeni tipler/fonksiyonlar ekleyebilirim?
1175 Çalýþmalarýnýzý pgsql-hackers e-posta listesine gönderiniz. Kodunuz
1176 incelendikten sonra contrib dizinine konacaktýr.
1178 5.3) Bir tuple dondürmek icin bir C fonksiyonunu nasil yazarým?
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.
1185 5.4) Bir kaynak dosyasýnda deðiþiklik yaptým. Yeniden derlememe raðmen
1186 deðiþiklik geçerli olmuyor. Neden?
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.