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