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