postgres/doc/src/FAQ/FAQ_turkish.html
2005-01-01 22:14:33 +00:00

1020 lines
60 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso8859-9">
<title>PostgreSQL Sýkça Sorulan Sorular - Türkçe</title>
<style type="text/css"><!--
body { background: #FFFFFF; }
a:link { color: #ff0000; }
a:active { color: #0000ff; }
a:visited { color: #a00000; }
i { font-style: oblique; }
body, h1, h2, h4, ul, p, a { font-family: helvetica, arial, sans-serif; font-size: medium; color: black; }
pre { color: #5C5C5C; padding-left: 30px; }
.fixme { color: cyan; }
--></style>
</head>
<body bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff">
<h1>PostgreSQL için Sýkça Sorulan Sorular (SSS)</h1>
<p>Son güncelleme : 15 Kasým 2004 Pazartesi - 15:03:23</p>
<p>Current maintainer: Bruce Momjian
(<a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>)<br></p>
<p>Çevirenler : Devrim Gündüz (<a href="mailto:devrim@tdmsoft.com">devrim@tdmsoft.com</a>)<br>Nicolai Tufar
(<a href="mailto:ntufar@tdmsoft.com">ntufar@tdmsoft.com</a>)<BR>Volkan YAZICI (<a href="mailto:volkany@phreaker.net">volkany@phreaker.net</a>)</p>
<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>
ve <a href="http://www.gunduz.org/seminer/pg/FAQ_turkish.html">http://www.gunduz.org/seminer/pg/FAQ_turkish.html</a>
adreslerinde görülebilir.</p>
<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>
<hr>
<h2 align="center">Genel Sorular</h2>
<a href="#1.1">1.1</a>) PostgreSQL nedir? Nasýl okunur?<br>
<a href="#1.2">1.2</a>) PostgreSQL'in haklarý nedir?<br>
<a href="#1.3">1.3</a>) PostgreSQL, hangi Unix platformlarýnda çalýþýr?<br>
<a href="#1.4">1.4</a>) Hangi Unix olmayan uyarlamalarý bulunmaktadýr?<br>
<a href="#1.5">1.5</a>) PostgreSQL'i nereden indirebilirim?<br>
<a href="#1.6">1.6</a>) Desteði nereden alabilirim?<br>
<a href="#1.7">1.7</a>) En son sürümü nedir?<br>
<a href="#1.8">1.8</a>) Hangi belgelere ulaþabilirim?<br>
<a href="#1.9">1.9</a>) Bilinen hatalar ya da eksik özelliklere nereden ulasabilirim?<br>
<a href="#1.10">1.10</a>) Nasýl <small>SQL</small> öðrenebilirim?<br>
<a href="#1.11">1.11</a>) PostgreSQL 2000 yýlýna uyumlu mudur?<br>
<a href="#1.12">1.12</a>) Geliþtirme takýmýna nasýl katýlabilirim??<br>
<a href="#1.13">1.13</a>) Bir hata raporunu nasýl gönderebilirim?<br>
<a href="#1.14">1.14</a>) PostgreSQL, diðer <small>VTYS(DBMS)</small> lerle nasýl
karþýlaþtýrýlabilir?<br>
<a href="#1.15">1.15</a>) PostgreSQL'e maddi açýdan nasýl destek olabilirim?<br>
<h2 align="center">Kullanýcý/istemci Sorularý</h2>
<a href="#2.1">2.1</a>) PostgreSQL için <i>ODBC</i> sürücüleri var mý?<br>
<a href="#2.2">2.2</a>) PostgreSQL'i web sayfalarýnda kullanabilmek için
hangi araçlar bulunmaktadýr?<br>
<a href="#2.3">2.3</a>) PostgreSQL'in grafik kullanýcý arabirimi var mýdýr?<br>
<a href="#2.4">2.4</a>) PostgreSQL ile iletiþimi kurabilmek için
hangi dilleri kullanabilirim? <br>
<h2 align="center">Yönetimsel Sorular</h2>
<a href="#3.1">3.1</a>) PostgreSQL'i <code>/usr/local/pgsql</code> dizininden
baþka dizinlere nasýl kurabilirim?<br>
<a href="#3.2">3.2</a>) <i>Postmaster</i>'ý baþlattýðýmda <code>Bad System Call</code>
ya da <code>core dumped</code> mesajý alýyorum. Neden?<br>
<a href="#3.3">3.3</a>) <i>Postmaster</i>'ý baþlattýðýmda, <code>IpcMemoryCreate</code>
hatasý alýyorum. Neden?<br>
<a href="#3.4">3.4</a>) <i>Postmaster</i>'ý, baþlattýðýmda, <code>IpcSemaphoreCreate</code>
hatasý alýyorum. Neden?<br>
<a href="#3.5">3.5</a>) Diðer bilgisayarlarýn benim PostgreSQL veritabaný
sunucuma baðlantýlarýný nasýl kontrol edebilirim?<br>
<a href="#3.6">3.6</a>) Veritabaný motorunu daha iyi baþarým icin nasýl ayarlayabilirim?<br>
<a href="#3.7">3.7</a>) Hangi hata ayýklama özellikleri bulunmaktadýr?<br>
<a href="#3.8">3.8</a>) Baðlanmaya çalýþýrken, neden "<code>Sorry, too many clients</code>"
hatasýný alýyorum. Neden?<br>
<a href="#3.9">3.9</a>) <code>pgsql_tmp</code>dizinin içindeki dosyalar nelerdir?<br>
<a href="#3.10">3.10</a>) PostgreSQL sürümlerini yükseltmek için neden bir
<code>dump/reload</code> iþlemi gerçekleþtirmek zorundayým?<br>
<a href="#3.11">3.11</a>) Nasýl bir donaným kullanmalýyým?br>
<h2 align="center">Ýþletimsel Sorular</h2>
<a href="#4.1">4.1</a>) <i>Binary cursor</i> ve <i>normal cursor</i> arasýndaki fark nedýr?<br>
<a href="#4.2">4.2</a>) Sorgunun sadece ilk birkaç satýrýný nasýl
<code>SELECT</code> edebilirim?<br>
<a href="#4.3">4.3</a>) <i>psql</i>'in içinde gördügüm tablolarýn ya da diðer
þeylerin listesini nasýl alabilirim?<br>
<a href="#4.4">4.4</a>) Bir tablodan bir kolonu nasýl kaldýrabilirim?<br>
<a href="#4.5">4.5</a>) Bir satýr, tablo ve veritabaný için en fazla büyüklük nedir?<br>
<a href="#4.6">4.6</a>) Tipik bir metin dosyasýndaki veriyi saklamak için ne
kadar disk alaný gereklidir?<br>
<a href="#4.7">4.7</a>) Veritabanýnda hangi tablo ya da <i>index</i>'lerin
tanýmlandýðýný nasýl görebilirim?<br>
<a href="#4.8">4.8</a>) Sorgularým cok yavaþ, ya da <i>index</i>'lerimi kullanmýyorlar. Neden?<br>
<a href="#4.9">4.9</a>) <i>Query-optimizer</i>'ýn sorgularýmý nasýl deðerlendirdiðini,
iþleme soktuðunu nasýl görebilirim?<br>
<a href="#4.10">4.10</a>) <i>R-tree index</i> nedir?<br>
<a href="#4.11">4.11</a>) <i>Genetic Query Optimizer</i> nedir?<br>
<a href="#4.12">4.12</a>) Düzenli ifade (<i>Regular Expression</i>) aramalarýný
ve büyük/küçük harfe duyarsýz aramalarý nasýl yapabilirim? Bu büyük/küçük harfe duyarlý
aramalar için <i>index</i>'i nasýl kullanabilirim?<br>
<a href="#4.13">4.13</a>) Bir sorguda, bir alanýn <code>NULL</code> olduðunu nasýl
ortaya çýkarabilirim?<br>
<a href="#4.14">4.14</a>) Çesitli karakter tipleri arasýndaki farklar nelerdir?<br>
<a href="#4.15.1">4.15.1</a>) Nasýl <code>serial</code>/otomatik artan
(<i>auto-incrementing</i>) bir alan yaratabilirim?<br>
<a href="#4.15.2">4.15.2</a>) <code>Serial</code> giriþinin deðerini nasýl alabilirim?<br>
<a href="#4.15.3">4.15.3</a>) <code>currval()</code> ve <code>nextval()</code>
diðer kullanýcýlara sorun yaratmaz mý?<br>
<a href="#4.15.4">4.15.4</a>) Neden sequence sayýlarýn <i>transaction</i>
iþleminin iptalinden sonra yeniden kullanýlýyor? Neden <code>sequence/SERIAL</code>
kolonumdaki sayýlarda atlamalar oluyor?<br>
<a href="#4.16">4.16</a>) <code>OID</code> nedir? <code>TID</code> nedir?<br>
<a href="#4.17">4.17</a>) PostgreSQL' de kullanýlan bazý terimlerin anlamlarý nelerdir?<br>
<a href="#4.18">4.18</a>) Neden "<code>ERROR: Memory exhausted in AllocSetAlloc()</code>"
hatasýný alýyorum?<br>
<a href="#4.19">4.19</a>) Hangi PostgreSQL sürümünü çalýstýrdýðýmý nasýl görebilirim?<br>
<a href="#4.20">4.20</a>) Neden <i>large-object</i> iþlemlerim, "</code>invalid large
obj descriptor</code>" hatasýný veriyor?<br>
<a href="#4.21">4.21</a>) Þu andaki zamaný öntanýmlý deðer olarak kabul
eden kolonu nasýl yaratýrým?<br>
<a href="#4.22">4.22</a>) Neden <code>IN</code> kullanan <i>subquery</i>'lerim çok yavaþ?<br>
<a href="#4.23">4.23</a>) <i>Outer join</i> iþlemini nasýl yapabilirim?<br>
<a href="#4.24">4.24</a>) Ayný anda birden fazla veritabanýnda nasýl iþlem yapabilirim?<br>
<a href="#4.25">4.25</a>) Bir fonksiyondan nasýl çoklu satýr ya da kolon döndürebilirim?<br>
<a href="#4.26">4.26</a>) Neden Pl/PgSQL fonksiyonlarý içinden güvenli
bir þekilde tablo yaratma/kaldýrma iþlemlerini yapamýyoruz?<br>
<a href="#4.27">4.27</a>) Hangi þifreleme seçenekleri bulunmaktadýr?<br>
<h2 align="center">PostgreSQL Özelliklerini Geniþletmek</h2>
<a href="#5.1">5.1</a>) Kullanýcý-tanýmlý bir fonksiyon yazdým. <i>psql</i>'de
çalýþtýrdýðým zaman neden <code>core dump</code> ediyor?<br>
<a href="#5.2">5.2</a>) PostgreSQL'e nasýl yeni veri tipleri/fonksiyonlar ekleyebilirim?<br>
<a href="#5.3">5.3</a>) Bir tuple döndürmek için bir C fonksiyonunu nasýl yazarým?<br>
<a href="#5.4">5.4</a>) Bir kaynak dosyasýnda deðiþiklik yaptým.
Yeniden derlememe raðmen deðiþiklik geçerli olmuyor. Neden?<br>
<hr>
<h2 align="center">Genel Sorular</h2>
<h4><a name="1.1">1.1</a>) PostgreSQL nedir? Nasýl okunur?</h4>
<p>PostgreSQL, <i>Post-Gres-Q-L</i>. olarak okunur</p>
<p>PostgreSQL, yeni-nesil <small>VTYS</small> araþtýrma prototipi olan POSTGRES
veritabaný yönetim sisteminin geliþtirilmesidir. POSTGRES'in zengin veri tiplerini ve
güçlü veri modelini tutarken, <small>SQL</small>'in geliþtirilmiþ alt kümesi
olan PostQuel dilini kullanýr. PostgreSQL ücretsizdir ve kaynak kodu açýk daðýtýlýr.</p>
<p>PostgreSQL, PostgreSQL geliþtirme listesine üye olan bir Internet geliþtirici
takýmý tarafýndan geliþtirilir. Þu andaki koordinatör, Marc G. Fournier
(<a href="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</a>).
(Bu takýma nasýl katýlacagýnýzý öðrenmek için <a href="#1.6">1.6</a> numaralý maddeyi
okuyunuz.) Bu takým, tüm PostgreSQL geliþiminden sorumludur.</p>
<p>PostgreSQL 1.01 sürümünün yazarlarý Andrew Yu ve Jolly Chen idi. Bunlarýn dýþýnda
bir kaç kisi de uyarlama, hata ayýklama ve kodun geliþtirilmesi için çalýsmýþtý.
PostgreSQL'in türediði orijinal Postgres kodu, lisans, lisansüstü ve akademisyenler
tarafýndan, Professor Michael Stonebraker (University of California, Berkeley)
koordinatörlügünde yazýlmýþtýr.</p>
<p>Berkley'deki yazýlýmýn adý Postgres idi. <small>SQL</small> uyumluluðu
1995'te eklenince, adý Postgres 95 oldu. 1996 yýlýnýn sonlarýnda adý
PostgreSQL olarak deðiþtirildi.</p>
<h4><a name="1.2">1.2</a>) PostgreSQL'in haklarý nedir?</h4>
<p>PostgreSQL Data Base Management System</p>
<P>Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
Portions Copyright (c) 1994-6 Regents of the University of California</P>
<p>Permission to use, copy, modify, and distribute this software
and its documentation for any purpose, without fee, and without a
written agreement is hereby granted, provided that the above
copyright notice and this paragraph and the following two
paragraphs appear in all copies.</p>
<p>IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY
PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS
SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p>
<p>THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE
UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE,
SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.</p>
<p>Üstteki metin klasik açýk-kod lisansý olan BSD lisansýdýr. Kaynak kodun nasýl
kullanýlabileceðine dair sýnýrlamalarý yoktur. Bu lisansý seviyoruz. Deðiþtirme
niyetimiz bulunmamaktadýr.</p>
<h4><a name="1.3">1.3</a>) PostgreSQL, hangi Unix platforlarýnda çalýþýr?</h4>
<p>Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i çalýþtýracaktýr.
Ayrýntýlý bilgi için kurulum belgelerine bakabilirsiniz.</p>
<h4><a name="1.4">1.4</a>) Hangi Unix olmayan uyarlamalarý bulunmaktadýr?</h4>
<P>PostgreSQL 8.0 sürümü ile , PostgreSQL artýk Win2000, WinXP ve Win2003 gibi Microsoft
Windows NT tabanlý iþletim sistemlerinde doðal olarak çalýþmaya baþlamýþtýr. Paketlenmiþ bir
kurulum programý, <a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>. adresinden
indirilebilir.
<p>Ayrýca, http://forge.novell.com adresinde Novell Netware 6 portu bulunmaktadýr.</p>
<h4><a name="1.5">1.5</a>) PostgreSQL'i nereden indirebilirim?</h4>
<p>PostgreSQL için ana anonim ftp sitesi <i><a href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</a></i>
adresidir. Yansýlar için, ana web sayfamýza bakabilirsiniz.</p>
<h4><a name="1.6">1.6</a>) Nereden destek alabilirim?</h4>
<p>Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL konusundaki tartýþmalara
açýktýr. Üye olmak için, aþaðýdaki satýrlarý e-postanýzýn <i>body</i> kýsmýna
(konu kýsmýna deðil) yazýp, pgsql-general-request@PostgreSQL.org adresine gönderin:</p>
<pre>subscribe<br>end</pre>
<p>Ayný zamanda, bir <i>digest</i> listesi bulunmaktadýr. Bu listeye üye olmak için,
pgsql-general-digest-request@PostgreSQL.org adresine, body kýsmýnda</p>
<pre>subscribe<br>end</pre>
<p>yazan bir e-posta atmanýz yeterli olacaktýr.</p>
<p><i>Digest</i> postalar, ana liste 30k civarýnda e-postaya ulaþtýðýnda
üyelere gönderilmektedir.</p>
<p><i>Bug</i>'lar için bir e-posta listesi bulunmaktadýr. Bu listeye üye olmak için,
pgsql-bugs-request@PostgreSQL.org adresine, <i>body</i> kýsmýnda</p>
<pre>subscribe<br>end</pre>
<p>yazan bir e-posta atmanýz yeterli olacaktýr.</p>
<p>Ayný zamanda, geliþtiriciler için tartýþma listesi bulunmaktadýr. Bu listeye
üye olmak için, pgsql-hackers-request@PostgreSQL.org adresine, body kýsmýnda</p>
<pre>subscribe<br>end</pre>
<p>yazan bir e-posta atmanýz yeterli olacaktýr.</p>
<p>Bunun dýþýndaki e-posta listelerine ve PostgreSQL hakkýnda bilgiye, PostgreSQL WWW
ana sayfasýndan ulasabilirsiniz: <i><a href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</a></i><p>
<p>Ayný zamanda, EFNet üzerinde, <code>#PostgreSQL</code> adlý bir IRC kanalý
bulunmaktadýr. Bunun için, <code>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</code>
Unix komutunu kullanabilirsiniz.</p>
<p>Ticari destek veren firmalarýn listesine</p>
<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>
<p>adresinden ulaþbilirsiniz.</p>
<h4><a name="1.7">1.7</a>) En son sürüm nedir?</h4>
<p>PostgreSQL'in son sürümü 7.4.6'dýr.</p>
<p>Her 6-8 ayda <i>ana sürüm</i> çýkarýlmasý planlanmaktadýr.</p>
<h4><a name="1.8">1.8</a>) Hangi belgelere ulaþabilirim?</h4>
<p>Daðýtýmýn içinde, kitapçýklar, kitapçýk sayfalarý ve bazý küçük örnekler verilmektedir.
<code>/doc</code> dizinine bakýnýz. Ayrýca, bu el kitapçýklarýný online olarak
<i><a href="http://www.PostgreSQL.org/docs/">http://www.PostgreSQL.org/docs/</a></i> adresinden inceleyebilirsiniz.</p>
<p><i><a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a></i>
ve <i><a href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook<a></i>
adreslerinde PostgreSQL kitaplarý bulunmaktadýr. PostgreSQL kitablarýnýn listesine,
<i><a href="http://www.ca.PostgreSQL.org/books/">http://www.ca.PostgreSQL.org/books/</a></i> adresinden ulaþaiblirsiniz.
Ayrýca, PostgreSQL konusundaki teknik makalelere de
<i><a href="http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</a></i> adresinden ulaþabilirsiniz.</p>
<p>psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar,
<i>aggregate</i>'ler, vb. ile ilgili güzel komutlarý vardýr.</p>
<p>Web sitemiz daha fazla belgeyi içermektedir.</p>
<h4><a name="1.9">1.9</a>) Bilinen hatalar ya da eksik
özelliklere nereden ulaþabilirim?</h4>
<p>PostgreSQL SQL-92 uyumluluðu içindedir, standartlardan fazla da özellikleri
bulunmaktadýr. Bilinen hatalar, eksik özellikler ve gelecek ile ilgili planlar için
TODO listesine bakýnýz.</p>
<h4><a name="1.10">1.10</a>) Nasýl <small>SQL</small> öðrenebilirim?</h4>
<p><i><a href="http:/www.PostgreSQL.org/docs/awbook.html">http:/www.PostgreSQL.org/docs/awbook.html</a></i>
adresindeki kitap SQL ögretecektir.
<i><a href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</a></i>
adresinde de bir baska PostgreSQL kitabý bulunmaktadýr.</p>
<p><i><a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a></i>,
<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>
<i><a href="http://sqlcourse.com">http://sqlcourse.com</a></i>
ve <i><a href="http://sqlcourse2.com">http://sqlcourse2.com</a></i>
adreslerinde de güzel belgeler bulunmaktadýr.</p>
<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>
adresinde bulunan "<i>Teach Yourself SQL in 21 Days, Second Edition</i>" kitabýdýr.</p>
<p>Bazý kullanýcýlarýmýz da þu kitabý önermektedirler: "<i>The Practical SQL Handbook,
Bowman, Judith S., et al.,Addison-Wesley</i>". Bazýlarý ise "<i>The Complete
Reference SQL, Groff et al., McGraw-Hill</i>" kitabýný önermektedirler.</p>
<h4><a name="1.11">1.11</a>) PostgreSQL 2000 yýlýna uyumlu mudur?</h4>
<p>Evet.</p>
<h4><a name="1.12">1.12</a>) Geliþtirme takýmýna nasýl katýlabilirim?</h4>
<p>Öncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da daðýtýmýn içindeki
PostgreSQL Developer belgesini okuyun. Ardýndan, pgsql-hackers ve pgsql-patches
listelerine üye olun. Üçüncü olarak da, pgsql-pacthes listesine yüksek kalitede
yamalar gönderin.</p>
<p>PostgreSQL CVS arþivine eriþim izni olan, 10 kadar geliþtirici bulunmaktadýr.
Hepsi defalarca, diðer kiþilerin yaptýðýndan çok daha yüksek-kaliteli yamalar
göndermiþlerdir. Ayrýca biz de bu geliþtiricilerin ekledikleri yamalarýn yüksek
kalitede olduðuna güveniyoruz.</p>
<h4><a name="1.13">1.13</a>) Bir hata raporunu nasýl gönderebilirim?</h4>
<p>PostgreSQL BugTool sayfasýna gidiniz. O sayfada bir <i>bug</i> bildirmek
için neleri yapmanýz gerektiði anlatýlmýþtýr.</p>
<p>Ayrýca, <i><a href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</a></i>
ftp adresimizde, yeni bir PostgreSQL sürümü ya da yamasý olup olmadýðýni kontrol ediniz.</p>
<h4><a name="1.14">1.14</a>) PostgreSQL, diger DBMS'lerle nasýl karþýlastýrýlabilir?</h4>
<p>Bir yazýlýmýn gücünü ölçmek için çeþitli yollar vardýr: Yazýlýmýn özellikleri,
baþarýmý, güvenilirliði, desteði ve ücreti.</p>
<p>Özellikler:<p>
<p>PostgreSQL mevcut büyük ticari veritabanlarýnýn, <i>transaction</i>,
<i>subselect</i>, <i>trigger</i>, <i>view</i>, <i>foreign key referential integrity</i>
ve <i>sophisticated locking</i> gibi (<i>user-defined types</i>), <i>rules</i>,
<i>inheritance</i> ve <i>lock</i> cakýþmalarýný düþürmek için <i>multi-version</i>
uyumluluk özellikleri bulunmaktadýr.</p>
<p>Performans (Baþarým):</p>
<p>PostgreSQL, diðer ticari ve açýk kaynak kodlu veritabanlarýyla yakýn baþarýmý saðlar.
Bazý açýlardan daha hýzlýdýr, diðer açýlardan da yavaþtýr. MySQL ya da daha zayýf
veritabanlarý ile karþýlaþtýrýldýðýnda, <code>INSERT/UPDATE</code> iþlemlerinde,
<i>transaction</i> bazlý çalýstýðýmýz için daha yavaþýz. MySQL, yukarýdaki "özellikler"
kýsmýnda belirtilenlerden hiç birine sahip deðildir. Biz, baþarýmýmýzý her sürümde
arttýrsak da, esneklik ve geliþmiþ özellikler için yapýlanmýþ durumdayýz.
PostgreSQL'i MySQL ile karþýlaþtýran þu web sitesine bakabilirsiniz:
<i><a href="http://openacs.org/why-not-mysql.html">http://openacs.org/why-not-mysql.html</a></i></p>
<p>Güvenilirlik:</p>
<p><i>DBMS</i>'lerin güvenilir olmasý gerketiði, yoksa deðerleri olmayacaðýný düþünüyoruz.
Çok iyi test edilmiþ, dengeli çalýsan minimum sayýda hata içeren kod sunmaya çalýþýyoruz.
Her bir sürüm en az 1 aylýk beta testlerinden geçirilmektedir. Sürüm geçmiþine bakarsanýz,
üretime hazýr, dengeli ve kararlý kodlar sunduðumuzu görebilirsiniz. Bu alanda, diðer
veritabaný yazýlýmlarýna üstünlüðümüz olduðuna inanmaktayýz.</p>
<p>Destek:</p>
<p>E-posta listemiz, oluþan herhangi bir sorunu çözebilecek büyük sayýda kullanýcý
ve geliþtirici grubunu içerir. Sorununuz için, en az bir ticari veritabaný kadar
rahat çözüm bulabilirsiniz. Gelistiricilere, kullanýcý grubuna, belgelere ve
kaynak koda direk olarak eriþebilme, PostgreSQL desteðini, diðer <i>DBMS</i>'lere
göre daha önemli kýlar. Gereksinimi olanlara, ticari destek verilebilir.
(Destek için 1.6 bölümüne bakýnýz.)</p>
<p>Fiyat:</p>
<p>Ticari ve ticari olmayan tüm kullanýmlarýnýz için PostgreSQL ücretsizdir. Kodumuzu,
yukarýda belirtilen BSD-stili lisanstaki sýnýrlamalar hariç, ürününüzün içine
ekleyebilirsiniz.</p>
<h4><a name="1.15">1.15</a>) PostgreSQL'e maddi açýdan nasýl destek olabilirim?</h4>
<p>PostgreSQL, 1996 yýlýndan beri 1. sýnýf altyapýya sahiptir. Bunun için, yýllar
boyu çalýþýp bu altyapýyý oluþturup yöneten Marc Fournier'e teþekkürler.</p>
<p>Bir açýk kaynak kodlu proje için, kaliteli altyapý çok önemlidir. Bu altyapý,
projenin kesilmesini önler ve projenin ilerlemesini hýzlandýrýr.</p>
<p>Tabii ki bu altyapý ucuz deðildir. Ýþlerin yürümesi için çeþitli yýlýk ve anlýk
harcamalarýmýz olmaktadýr. Eðer siz ya da þirketinizin bu çabamýza baðýþta
bulunabilecek parasý varsa, lütfen
<i><a href="http://store.pgsql.com/">http://store.pgsql.com/</a></i>
adresine gidiniz ve baðýþta, hibede bulununuz.</p>
<p>Web sayfasýnýn 'PostgreSQL Inc.' den bahsetmesine raðmen, "katkýda bulunanlar"
(<i>contributors</i>) maddesi sadece PostgreSQL projesini desteklemek içindir ve
belirli bir þirketin para kaynaðý deðildir. isterseniz, baðlantý adresine bir
çek gönderebilirsiniz.</p>
<hr>
<h2 align="center">Kullanýcý/Ýstemci Sorularý</h2>
<h4><a name="2.1">2.1</a>) PostgreSQL icin ODBC sürücüleri var mý?</h4>
<p>iki tane ODBC sürücüsü bulunmaktadýr: PsqlODBC ve OpenLink ODBC.</p>
<p>PsqlODBC'i http://gborg.postgresql.org/project/psqlodbc/projdisplay.php adresinden
indirebilirsiniz.</p>
<p>OpenLink ODBC http://www.openlinksw.com adresinden alýnabilir.Bu sürücü,
kendi standart ODBC istemci yazýlýmý ile çalýstýðýndan, destekledikleri
her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC bulunmalidir.</p>
<p>Ücretsiz sürümü olmakla beraber, ticari kalitede destek almak isteyenlere satmak isteyeceklerdir.
Sorularýnýzý lütfen postgres95@openlink.co.uk adresine gönderiniz.</p>
<h4><a name="2.2">2.2</a>) PostgreSQL'i web sayfalarýnda kullanabilmek için hangi
araçlar bulunmaktadýr?</h4>
<p><i><a href="http://www.webreview.com/">http://www.webreview.com/</a></i> adresinde,
arka planda veritabaný çalýstýran Web sayfalarý için giriþ seviyesinde bilgi bulunmaktadýr.</p>
<p>Web ile bütünleþme için, PHP (<i><a href="http://www.php.net/"></a></i>)
mükemmel bir arabirim sunar.<p>
<p>Karmaþýk sorunlar için, çoðu kisi Perl arabirimini ve CGI.pm ya da mod_perl kullanýr.</p>
<h4><a name="2.3">2.3</a>) PostgreSQL'in grafik kullanýcý arabirimi var mýdýr?</h4>
<p>Çeþitli grafik arabirimlerimiz bulunmaktadýr. Bunlarýn arasýnda,
PgAccess (<i><a href="http://www.pgaccess.org/">http://www.pgaccess.org/</a></i>),
PgAdmin II (<i><a href="http://www.pgadmin.org/">http://www.pgadmin.org/</a></i>, sadece Win32 için),
RHDB Admin (<i><a href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</a></i>)
ve Rekall (<i><a href="http://www.thekompany.com/products/rekall/">http://www.thekompany.com/products/rekall/</a></i>)
bulunmaktadýr. Ayrýca, PostgreSQL için web tabanlý bir arabirim olan
PHPPgAdmin (<i><a href="http://phppgadmin.sourceforge.net/">http://phppgadmin.sourceforge.net/</a></i>) bulunmaktadýr.</p>
<p>Daha ayrýntýlý liste için
<i><a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a></i>
adresine bakabilirsiniz.</p>
<h4><a name="2.4">2.4</a>) PostgreSQL ile iletiþimi kurabilmek için hangi dilleri kullanabilirim?</h4>
<ul><li>C (libpq)</li>
<li>Embedded C (ecpg)</li>
<li>Java (jdbc)</li>
<li>Python (PyGreSQL)</li>
<li>TCL (libpgtcl)</li></ul>
<p>Diðerleri için, http://gborg.postgresql.org adresindeki Drivers/Interfaces bölümüne
bakabilirsiniz.</p>
<hr>
<h2 align="center">Yönetimsel Sorular</h2>
<h4><a name="3.1">3.1</a>) PostgreSQL'i, <code>/usr/local/pgsql</code> dizininden
baþka dizinlere nasýl kurabilirim?</h4>
<p><i>configure</i> betiðini çalýstýrýrken, <code>--prefix</code> seçeneðini veriniz.</p>
<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>
<p>Bunun birçok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey, çekirdeginize
System V uzantýlarýnýn kurulu olup olmadýgýný kontrol etmek olabilir. PostgreSQL
shared memory ve semaphores için çekirdek destegine gereksinim duyar.</p>
<h4><a name="3.3">3.3</a>) postmaster'i baþlattýðýmda, <code>ýpcMemoryCreate</code>
hatasý alýyorum. Neden?</h4>
<p>Ya çekirdeðinizde <i>shared memory</i> desteðiniz düzgünce yapýlandýrýlmamýþtýr,
ya da çekirdeðinizdeki mevcut <i>shared memory</i> miktarýný büyütmeniz gerekecektir.
Gereksinim duyacaðýnýz miktar, mimarinize ve postmaster için ayarladýgýnýz tampon
ile <i>backend</i> iþlemi sayýsýna baðlýdýr. Tüm sistemler için, tamponlar ve
iþlemlerde öntanýmlý sayýlarla, ~ 1MB kadar yere gereksinmeniz olacaktýr.
<i><a href="http://www.postgresql.com/docs/7.3/interactive/admin.html">PostgreSQL
7.3.2 Sistem Yöneticileri Rehberi</a></i>'ne, <i>shared memory</i> ve <i>semaphorelar</i>
hakkýndaki ayrýntýlý bilgi için bakabilirsiniz.</p>
<h4><a name="3.3">3.4</a>) postmaster'ý baþlattýðýmda,
<code>ýpcSemaphoreCreate</code> hatasý alýyorum. Neden?</h4>
<p>Eðer hata, "<code>ýpcSemaphoreCreate: semget failed (No space left on device)</code>"
ise, çekirdeðiniz yeterli <i>semaphore</i> ile yapýlandýrýlmamýþ demektir. Postgres, her
bir potansiyel <i>backend</i> için bir <i>semaphore</i> gereksinimi duyar. Geçici
bir çözüm, postmasterý <i>backend</i> iþlemleri için daha az miktarda sýnýrla
baþlatmak olabilir. <code>-N</code>'i varsayýlan deðer olan 32'den küçük bir
deðerle baþlatýnýz. Daha kalýcý bir çözüm, çekirdeðinizin <code>SEMMNS</code> ve
<code>SEMMNI</code> parametrelerini yükseltmek olacaktýr.</p>
<p>Çalýþmayan <i>semaphore</i>'lar aðýr veritabaný iþlemlerinde çökme yaratabilirler.</p>
<p>Eðer hata mesajýnýz baþka bir þey ise, çekirdeðinizde <i>semaphore</i> desteðini
yapýlandýrmamýþ olabilirsiniz. <i>Shared memory</i> ve <i>semaphore</i>'lar hakkýndaki
daha ayrýntýlý bilgi için
<i><a href="http://www.postgresql.com/docs/7.3/interactive/admin.html">PostgreSQL
7.3.2 Sistem Yöneticileri Rehberi</a></i>'ne bakabilirsiniz.</p>
<h4><a name="3.5">3.5</a>) Diger bilgisayarlarýn benim PostgreSQL veritabaný
sunucuma baðlantýlarýný nasýl kontrol edebilirim?</h4>
<p>Ön tanýmlý olarak, PostgreSQL sadece yerel makineden <i>Unix domain sockets</i>
kullanarak baðlanýlmasýna izin verir. Diger makineler, postmaster'a <code>-i</code>
etiketini geçirmezseniz ve <code>$PGDATA/pg_hba.conf</code> dosyasýný düzenleyerek
<i>host-based authentication</i>'a olanak vermezseniz, baðlantý yapamayacaklardýr.</p>
<h4><a name="3.6">3.6</a>) Veritabani motorunu daha iyi
baþarým için nasýl ayarlayabilirim?</h4>
<p><i>Index</i>'ler sorgularý hýzlandýrabilir. <code>EXPLAIN</code> komutu,
PostgreSQL'in sorgunuzu nasýl yorumladýðýný ve hangi <i>index</i>'leri kullandýðýný
görmenize izin verir.</p>
<p>Eðer cok fazla <code>INSERT</code> iþlemi yapýyorsanýz, bunlarý büyük bir
toplu iþlem dosyasýkullanýp <code>COPY</code> komutu ile veritabanýna girmeyi
deneyiniz. Bu, tekil <code>INSERT</code>'lerden daha hýzlýdýr. Ýkinci olarak,
<code>BEGIN WORK/COMMIT</code> <i>transaction</i> bloðu içinde olmayan ifadeler kendi
<i>transaction</i>'larýndaymýþ gibi düþünülür. Çoklu ifadeleri tek bir
<i>transaction</i> bloðu içinde yapabilirsiniz. Bu, <i>transaction overhead</i>'ini
düþürecektir. Tek bir <i>transaction</i> bloðu içinde birden çok ifadeyi çalýþtýrmayý
deneyebilirsiniz. Bu da ayný þekilde, <i>transaction overhead</i>'ini düþürür.</p>
<p>Çeþitli ayarlama seçenekleri mevcuttur. <code>fsync()</code> iþlemini, postmaster'ý
<code>-o -F</code> seçeneði ile baþlatarak devre dýþý býrakabilirsiniz. Bu iþlem,
<code>fsync()</code>'lerin her <i>transactiondan</i> sonra diski <i>flush</i> etmesini
engelleyecektir.</p>
<p>Ayný zamanda, postmaster'i <code>-B</code> seçeneði ile baþlatýp, <i>backend</i>
iþlemleri tarafýndan kullanýlan <i>shared memory buffers</i> sayýlarýný arttýrabilirsiniz.
Eðer bu parametreyi çok yüksek tutarsanýz, çekirdeðinizin <i>shared memory</i>
bölgesindeki limiti aþma olasýlýðýnýz yüzünden postmaster baþlayamayabilir. Her bir
tampon (<i>buffer</i>) 8K'dýr. Öntanýmlý sayý ise 64 tampondur.</p>
<p>Ayný þekilde, backend'in <code>-S</code> seçeneðini geçici sýralamalar için
<i>backend</i> süreçleri tarafýndan kullanýlacak hafýzayý arttýrmak amacýyla
kullanabilirsiniz. <code>-S</code> seçeneði kilobayt cinsinden deðer alýr ve ön
tanýmlý deðeri 512'dir (512 K)</p>
<p>Tablolardaki veriyi bir <i>index</i>'e eþlemek amacýyla gruplama için
<code>CLUSTER</code> komutunu kullanabilirsiniz. Ayrýntýlý bilgi için
<code>CLUSTER</code> komutunun yardým sayfasýna bakabilirsiniz.</p>
<h4><a name="3.7">3.7</a>) Hangi hata ayýklama özellikleri bulunmaktadýr?</h4>
<p>PostgreSQL, hata ayýklama amacýyla kullanýlabilecek durum bilgisi
rapor eden çeþitli özeliklere sahiptir.</p>
<p>Öncelikle, <i>configure</i> betiðini <code>--enable-cassert</code> seçeneðiyle
çalýþtýrýrsanýz, bir çok <code>assert() backend</code> calýþmasýný gözlemler ve
beklenmeyen bir durumda programý durdurur.</p>
<p>Postmaster ve postgres çeþitli hata ayýklama seçeneklerine sahiptir. Öncelikle,
postmaster'ý baþlattýðýnýzda, standart çýktýyý ve hatalarý bir log dosyasýna
yönlendirdiðinize emin olun:</p>
<pre>cd /usr/local/pgsql<br>./bin/postmaster >server.log 2>&1 &</pre>
<p>Bu iþlem PostgreSQL ana dizinine <code>server.log</code> dosyasý yerleþtirecektir.
Bu dosya sunucunun yaþadýðý sorunlar ya da hatalar hakkýnda yararlý bilgiler içerir.
<code>-d</code> seçeneði, hata ayýklama seviyesini belirten bir rakam ile kullanýlýr.
Yüksek hata ayýklama seviyelerinin büyük log dosyalarý oluþturacaðýný unutmayýnýz.</p>
<p>Eðer postmaster çalýþmýyorsa, <code>postgres backend</code>'ini komut satýrýndan
çalýþtýrabilir ve SQL ifadenizi direk olarak yazabilirsiniz. Bu sadece hata ayýklama
amacýyla önerilir. Burada, noktalý virgülün deðil de yeni bir satýrýn sorguyu
sonlandýrdýðýný unutmayýnýz. Eðer hata ayýklama sembolleri ile derlediyseniz,
ne olduðunu görmek için bir hata ayýklayýcý kullanabilirsiniz. <i>backend</i>
postmaster'dan baþlatýlmadýðýndan, eþdeðer bir ortamda çalýþmamaktadýr ve
<i>locking/backend</i> etkileþim sorunlarý artabilir.</p>
<p>Eðer postmaster çalýþýyorsa, bir pencerede psql'i çalýþtýrýn ve psql tarafýndan
kullanýlan postgres sürecinin süreç numarasýný (<code>PID</code>) bulun. Postgres
süreci ile iliþkilendirmek için bir hata ayýklarýcý kullanýn. Sorgularý psql aracýlýðý
ile çalýþtýrabilirsiniz. Eðer postgres baþlangýcýnda hata ayýklamak istiyorsanýz,
<code>PGOPTIONS="-W n"</code> seçeneðini ayarlayabilir ve psql'i baþlatabilirsiniz.
Bu iþlem, baþlangýcýn <code>n</code> saniye kadar gecikmesini saðlayacaktýr; böylece
hata ayýklayýcýyý sürece iliþkilendirdikten sonra baþlangýç sürecinin devam etmesini
saðlayabilirsiniz.</p>
<p>postgres programý hata ayýklama ve baþarým ölçümleri için <code>-s</code>,
<code>-A</code> ve <code>-t</code> seçeneklerine sahiptir.</p>
<h4><a name="3.8">3.8</a>) Baðlanmaya çalýþýrken, neden "<i>Sorry, too many
clients</i>" hatasýný alýyorum?</h4>
<p>Postmaster'ýn eþzamanlý olarak baþlatabileceði <i>backend</i> süreçleri
sýnýrlarýný arttýrmanýz gerekmektedir.</p>
<p>Ön tanýmlý deðer 32 süreçtir. Bunu, postmaster'ý uygun <code>-N</code>
deðeri ile ya da <code>postgresql.conf</code> dosyasýný düzenleyerek yeniden
baþlatmakla arttýrabilirsiniz.</p>
<p>Eðer <code>-N</code> deðerini 32'den büyük yapacaksanýz, ayný zamanda
<code>-B</code> deðerini de deðiþtirmeniz gerektiðini unutmayýn. </code>-B</code>,
<code>-N</code>'nin en az 2 katý kadar olmalýdýr; daha iyi baþarým için bu sayýyý daha
da arttýrmalýsýnýz. Yüksek sayýdaki <i>backend</i> süreçleri için, çeþitli çekirdek
yapýlandýrma parametrelerini arttýrmanýz gerekecektir. Yapýlmasý gerekenler,
<code>SHMMAX</code>, <code>SEMMNS</code>, <code>SEMMNI</code>, <code>NPROC</code>,
<code>MAXUPRC</code> ve açýlabilecek dosyalarýn maksimum sayýsý olan <code>NFILE</code>
ve <code>NINODE</code> deðerlerini karýþtýrmaktýr. Bunun nedeni, PostgreSQL'in izin
verilen <i>backend</i> süreçlerinin sayýsý üzerinde bir sýnýrý olmasýdýr. Böylelikle
sistem kaynaklarýnýn dýþýna çýkýlmayacaktýr.</p>
<p>PostgreSQL'in 6.5 sürümüne kadar, en fazla <i>backend</i> sayýsý 64 idi ve bunu
deðiþtirmek için <code>include/storage/sinvaladt.h</code> dosyasý içindeki
<code>MaxBAckendid</code> sabitini deðiþtirdek sonra yazýlýmý yeniden
derlemek gerekiyordu.</p>
<h4><a name="3.9">3.9</a>) <code>pgsql_tmp</code> dizinin içindeki dosyalar nelerdir?</h4>
<p>Sorgu çalýstýrýcý (<i>query executer</i>) tarafýndan yaratýlan geçici dosyalardýr.
Örnegin, bir sýralama <code>ORDER BY</code> ile yapýlacaksa ve sýralama
<code>backend</code>'in <code>-s</code> parametresinin izin verdiðinden daha
fazla alana gereksinim duyuyorsa, ekstra veriyi tutmak için geçici dosyalar yaratýlýr.</p>
<p>Geçici dosyalar, eðer sýralama sýrasýnda <i>backend</i> göçmezse otomatik olarak
silinecektir. Eðer çalýþan durumda bir <i>backend</i>'iniz yoksa,
<code>pg_tempNNN.NN</code> dosyalarýný silmeniz güvenlidir.</p>
<h4><a name="3.10">3.10</a>) PostgreSQL sürümlerini yükseltmek için neden bir
dump/reload iþlemi gerçekleþtirmek zorundayým?</h4>
<p>PostgreSQL takýmý ara sürümlerde sadece küçük deðiþiklikler yapmaktadýr;
bu yüzden 7.2 sürümünden 7.2.1'e yükseltmek <i>dump/restore</i> iþlemi
gerekmemektedir. Ancak, esas sürümlerde (örnek: 7.2'den 7.3'e) çoðunlukla sistem
tablolarýnýn ve veri dosyalarýnýn iç yapýsý deðiþtirilir. Bu deðiþiklikler çoðunlukla
karmaþýktýr; dolayýsýyla veri dosyalarýnýn geriye dönük uyumluluðu iþlemlerini
yapmýyoruz. <i>Dump</i> iþlemi, veriyi genel biçimde alacaðýndan yeniden yükleme
esnasýnda veri, yeni iç biçime uygun þekilde yerleþtirilecektir.</p>
<p>Disk biçiminin deðiþmediði sürümlerde, <code>pg_upgrade</code> betiði güncellemenin
bir <i>dump/restore</i> gerektirmeden yapýlmasýný saðlayacaktýr. <i>pg_upgrade</i>
betiðinin o sürüm için bulunup bulunmadýðýný sürüm notlarý içinde bulabilirsiniz.</p>
<h4><a name="3.11">3.11</a>) Nasýl bir donaným kullanmalýyým? </h4>
<p> PC donanýmý tamamen uyumlu olduðu için, insanlar tüm PC donanýmlarýnýn ayný kalitede olduðunu
düþünürler. Oysa böyle deðildir. ECC RAM, SCSI ve kaliteli anakartlar daha ucuz donanýmlara göre daha
çok güvenilirlerdir ve baþarýmlarý daha yüksektir. PostgreSQL hemen hemen tüm donanýmda
çalýþabilmektedir, ancak güvenilirlik ve baþarým önemli ise donaným seçeneklerini çok iyi araþtýrmak
gereklidir. E-posta listelerimi donanýmlarla ilgili sorular ve de ticaret için kullanýlabilir.</p>
<hr>
<h2 align="center">Ýþletimsel Sorular</h2>
<h4><a name="4.1">4.1</a>) <i>Binary cursor</i> ve <i>normal cursor</i>
arasýndaki fark nedir?</h4>
<p><code>DECLARE</code> yardým sayfasýna bakýnýz.</p>
<h4><a name="4.2">4.2</a>) Sorgunun sadece ilk birkaç satýrýný
nasýl <code>SELECT</code> edebilirim?</h4>
<p><code>FETCH</code> yardým sayfasýna bakýnýz, ya da <code>SELECT</code> ...
<code>LIMIT</code> ... kullanýnýz.</p>
<p>Ýlk birkaç satýrý almak isteseniz bile, tüm sorgu deðerlendirilmek durumunda kalýnabilir. ORDER
BY içeren bir sorgu düþünün. Eðer ORDER BY iþe eþleþen bir index varsa, PostgreSQL istenen ilk birkaç
satýrý iþleyebilir, ya da tüm sorgu istenen satýrlar üretilene kadar iþlenebilir. </b></p>
<h4><a name="4.3">4.3</a>) psql'in içinde gördügüm tablolarýn ya da diðer
þeylerin listesini nasýl alabilirim?</h4>
<p><code>pgsql/src/bin/psql/describe.c</code> içindeki psql kaynak kodunu
okuyabilirsiniz. Bu kod, psql'in <code>\</code> ile baþlayan komutlarýnýn
çýktýsýný olusturan SQL komutlarýný içerir. Ayný zamanda, psql'i <code>-E</code>
seçeneði ile baþlatýp, verdiðiniz komutlarý çalýþtýrmak için yaptýðý
sorgularýn çýktýlarýný görebilirsiniz.</p>
<h4><a name="4.4">4.4</a>) Bir tablodan bir kolonu nasýl kaldýrabilirim?</h4>
<p>Bu özellik (<code>ALTER TABLE DROP COLUMN</code>) 7.3 sürümü ile gelmiþtir.
Eski sürümlerde aþaðýdakileri uygulamalýsýnýz: </p>
<pre>
BEGIN;
LOCK TABLE old_table;
SELECT ... -- select all columns but the one you want to remove
INTO TABLE new_table
FROM old_table;
DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table;
COMMIT;
</pre>
<h4><a name="4.5">4.5</a>) Bir satýr, tablo ve veritabaný için en
fazla büyüklük nedir?</h4>
<p>Sýnýrlar:</p>
<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>
Bir tablo için en fazla büyüklük nedir?<br>32 TB<br><br>
Bir satýr için en fazla büyüklük nedir?<br>1.6 TB<br><br>
Bir alan için en fazla büyüklük nedir?<br>1 GB<br><br>
Tabloda en fazla satýr sayýsý kaçtýr?<br>Sýnýrsýz<br><br>
Bir tabloda olabilecek en fazla kolon sayýsý kaçtýr?<br>Kolon tiplerine baðlý olarak 250-1600<br><br>
Bir tabloda olabilecek en fazla <i>index</i> sayýsý kaçtýr?<br>Sýnýrsýz</p>
<p>Tabii ki bunlar aslýnda sýnýrsýz degildir. Burada belirtilen sýnýrlar, fiziksel
sýnýrlarýn haricindeki sýnýrlardýr. Boþ disk alaný, hafýza/takas alaný na baðlý
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
olduðunda düþebilir.</p>
<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
olmamasýndan baðýmsýzdýr. Büyük tablolar, 1 GB'lik dosyalarda saklandýðý için, dosya
sistemi sýnýrlarýnin bir önemi yoktur.</p>
<p>Tablo ve kolon sayýsý büyüklükleri, ön tanýmlý blok büyüklüðü 32k ya çýkarýlarak
arttýrýlabilir.</p>
<h4><a name="4.6">4.6</a>) Tipik bir metin dosyasýndaki veriyi saklamak için ne
kadar disk alaný gereklidir?</h4>
<p>Bir PostgreSQL veritabaný, veriyi "<i>flat</i>" metin dosyasýnda saklamak için
gereken alanýn 5 kat fazla disk alanýna gereksinim duyabilir.</p>
<p>Her satýrýnda bir tamsayý ve metin (<i>text</i>) içeren, 100.000 satýrlýk bir
dosya düþünün. Her satýrýn ortalama 20 byte olduðunu farzedelim. Metin dosyasý
2.8 MB olacaktýr. Bu veriyi tutan PostgreSQL veritabaný
yaklaþýk 6.4 MB yer kaplayacaktýr.</p>
<pre>
36 byte: Her bir satýr baþlýðý (yaklaþýk)
+ 24 byte: Bir tamsayý (int) alaný ve bir metin (text) alaný
+ 4 byte: Sayfada tuple a pointer
----------------------------------------
64 byte -> kayýt baþýna</pre>
<p>PostgreSQL'de veri sayfasý (data page) büyüklüðü 8192 byte (8k)dýr, dolayýsýyla:</p>
<pre>
8192 byte -> page baþýna
------------------------- = Her bir veritabaný <i>page</i>'ý baþýna 128 satýr (yaklaþýk)
Satýr baþýna 64 byte
100000 veri satýrý
-------------------- = 782 veritabaný sayfasý
128 satýr</pre>
<p>782 veritabaný sayfasý <code>*</code> sayfa baþýna <code>8192 byte =
6,406,144 bytes (6.4 MB)</code></p>
<p><i>Index</i>'ler çok fazla yere gereksinim duymazlar, ama <i>index</i>'lenmiþ
veriyi tutacaklarýndan büyük olabilirler.</p>
<p><code>NULL</code> deðerler bitmapler içinde tutulur; dolayýsýyla çok az yer kaplarlar.</p>
<h4><a name="4.7">4.7</a>) Veritabanýnda hangi tablo ya da <i>index</i>'lerin
tanýmlandýðýný nasýl görebilirim?</h4>
<p>psql, bu tür bilgileri göstermek için, <code>\</code> ile baþlayan bir çok
komut sunmaktadýr. <code>\?</code> komutu ile bu komutlarý görebilirsiniz. Ayrýca,
bunlarý açýklayan ve <code>pg_</code> ile baþlayan çok sayýda sistem tablosu
bulunmaktadýr. Ayný zamanda, <code>psql -l</code> ile tüm veritabanlarýný
listeyelebirsiniz.</p>
<p>Ayrýca, <code>pgsql/src/tutorial/syscat.source</code> kodunu inceleyebilirsiniz.
Bu dosya, veritabaný sistem dosyalarýndan bilgiyi almak için gereksinim duyulan
bir çok <code>SELECT</code>'leri gösterir.</p>
<h4><a name="4.8">4.8</a>) Sorgularým cok yavaþ, ya da <i>index</i>'lerimi
kullanmýyorlar. Neden?</h4>
<p>Indexler her sorgu tarafýndan otomatik olarak kullanýlmazlar. Indexler eðer bir
tablonun büyüklüðü minimum bir büyüklükten fazla ise ve sorgu tablodaki satýrlarýn sadece küçük bir
yüzdesini seçiyorsa kullanýlýr. Bunun nedeni, index eriþiminin neden olduðu raslansal disk eriþimi
nin diskin ya da tablonun sýralý okunmasýndan daha yavas olabilmesidir.</p>
<p>Bir index'in kullanýlýp kullanýlmayacaðýný belirlemek için, PostgreSQL tablo hakkýndaki
istatistiklere gereksinmesi vardýr. Bu istatistikler, <small>VACUUM ANALYZE</small> kullanýlarak
toplanýrlar. Optimizer, istatistikleri kullanarak, tabloda kaç satýr olduðunu ve bilir ve indexin
kullanýlýp kullanýlmayacaðýna daha iyi karar verir. Istatistikler, ayný zamanda en uygun join
sýrasýný ve yöntemini belirlemekte çok önemlidir. Ýstatistik toplanmasý, tablo içerikleri
deðiþtikçe periyodik olarak yapýlmalýdýr.</p>
<p>Indexler normalde <small>ORDER BY</small> sorgularý ya da join iþlemlerini gerçekleþtirmek için
kullanýlmazlar. Açýk bir sýralamayý takip eden sýralý bir arama (sequential scan), büyük bir tabloda index
aramasý yapmaktan genelde daha hýzlýdýr.</p>
Ancak, <small>ORDER BY</small> ile birleþmiþ <small>LIMIT</small>
genellikle bir index kullanacaktýr; çünkü tablonun sadece belirli bir miktarý döndürülecektir.
Aslýnda, MAX() ve MIN() fonksiyonlarýnýn index kullanmamalarýndan dolayý, bu gibi deðerleri ORDER BY ve LIMIT
kullanarak da almak olasýdýr:
<pre>
SELECT col
FROM tab
ORDER BY col [ DESC ]
LIMIT 1;
</pre>
<p>Eðer optimizer'ýn sýralý arama yapmasýnýn yanlýþ olduðuna inanýyorsanýz, <code>SET enable_seqscan TO
'off'</code> kullanýn ve index kullanan aramalarýn hala daha hýzlý olup olmadýðýný görün.</p>
<p><code>LIKE</code> ya da <code>~</code> gibi operatörler kullanýyorsanýz,
<i>index</i>'ler sadece aþaðýdaki koþullarda kullanýlabilir:</p>
<ul>
<li>Arama dizininin baþý, dizinin baþý ile baðlanmalýdýr. Yani,
<ul><li><code>LIKE</code> sorgularý <code>%</code> ile baþlamamalýdýr.</li>
<li>Düzenli ifade sorgularý <code>^</code> iþe baþlamamalýdýr.</li></ul></li>
<li>Arama metni bir karakter sýnýfý ile baþlayamaz. Örnek: <code>[a-e]</code></li>
<li><code>ILIKE</code> ve <code>~*</code> gibi büyük/küçük harfe duyarsýz
aramalar <i>index</i>'lerden yararlanmazlar. Onun yerine, bölüm 4.12'de anlatýlan
fonksiyonel <i>index</i>'leri kullanabilirsiniz.</li>
<li><i>initdb</i> sýrasýnda öntanýmlý <i>C locale</i>'i kullanýlmalýdýr.</li>
</ul>
<h4><a name="4.9">4.9</a>) <i>query-optimizer</i>'ýn sorgularýmý nasýl
deðerlendirdiðini, iþleme soktuðunu nasýl görebilirim?</h4>
<p><code>EXPLAIN</code> yardým sayfasýna bakýnýz.</p>
<h4><a name="4.10">4.10</a>) <i>R-tree index</i> nedir?</h4>
<p>R-tree index, uzaysal (spatial) verileri indexlemek için kullanýlýr. Bir hash
index, dizi aramalarýnda (range search) kullanýlamaz. B-tree index dizi aramalarýnda sadece tek
boyutlu çalýþmaktadýr. R-tree, çok boyutlu veriyi destekler. Örneðin, eðer bir R-tree index point
veri tipi üzerinde inþa edililebilirse, sistem "select all points within a bounding rectangle"
gibi sorgulara daha verimli yanýtlar verecektir.</p>
<p>Orijinal R-tree tasarýmýný açýklayan belge:</p>
<p>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial Searching."
Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.</p>
<p>Bu belgeyi, Stonebraker'ýn "Readings in Database Systems" kitabýnda bulabilirsiniz.</p>
<p>Gömülü R-tree indexleri poligon ve boxlarý kullanabilir. Teorik olarak,
R-tree indexlerin özelliklerini geniþletmek bir miktar çaba gerektirir ve bunun nasýl
yapýlacaðýna dair bir belgemiz henüz bulunmamaktadýr.</p>
<h4><a name="4.11">4.11</a>) <i>Genetic Query Optimizer</i> nedir?</h4>
<p><i>GEQO</i> modülü, <i>Genetic Algorithm(GA)</i> kullanýlarak tablolar
birleþtirildiðinde sorgu optimizasyonunu hýzlandýrýr. </p>
<h4><a name="4.12">4.12</a>) Düzenli ifade (<i>Regular Expression</i>) aramalarýný
ve büyük/küçük harfe duyarsýz aramalarý nasýl yapabilirim?
Bu büyük(küçük harfe duyarlý aramalar için <i>index</i>'i nasýl kullanabilirim?</h4>
<p><code>~</code> operatörü düzenli ifade eþleþmesi ve <code>~*</code> büyük/küçük
harfe duyarsýz düzenli ifade eþleþmesi yapar. Büyük/küçük harfe duyarlý olan
<code>LIKE</code>'ýn büyük/küçük harfe duyarsýz olan biçimi <code>ILIKE</code>'týr
ve PostgreSQL 7.1 sürümü ile birlikte gelmiþtir.</p>
<p>Büyük-küçük harfe duyarsýz eþitlik karþýlaþtýrmalarý aþaðýdaki gibi ifade edilir:</p>
<pre>
SELECT *
FROM tab
WHERE lower(col) = 'abc'
</pre>
<p>Bu standart bir <i>index</i> yaratmayacaktýr. Ancak eðer fonksiyonel bir
<i>index</i> yaratýrsanýz; o kullanýlacaktýr:</p>
<pre>CREATE INDEX tabindex on tab (lower(col));</pre>
<h4><a name="4.13">4.13</a>) Bir sorguda, bir alanin "<code>NULL</code>" olduðunu
nasýl ortaya çýkarabilirim?</h4>
<p>Kolonu, <code>IS NULL</code> ve <code>IS NOT NULL</code> ile test edebilirsiniz.</p>
<h4><a name="4.14">4.14</a>) Çesitli karakter tipleri arasýndaki farklar nelerdir?</h4>
<pre>
Veri Tipi Ýç Adý Not
--------------------------------------------------
VARCHAR(n) varchar boyut en büyük uzunluðu verir; sadece verilen kadar veri tutulur.
CHAR(n) bpchar belirtilen uzunluða kadar sonuna boþluk eklenir.
TEXT text uzunlukta herhangi bir üst sýnýr yoktur.
BYTEA bytea variable-length byte array (null-byte safe)
"char" char bir karakter
</pre>
<p>Ýç adlarý (<i>internal name</i>) sistem kataloglarýný ve
bazý hata mesajlarýný incelerken göreceksiniz.</p>
<p>Ýlk dört veri tipi "<i>varlena</i>" tipidir (yani, diskteki ilk 4 bayt uzunluktur;
devamý da veridir.) Dolayýsýyla, kullanýlan gerçek alan, belirtilen alandan biraz
daha büyüktür. Ancak, bu veri tipleri, sýkýþtýrýlmaya tabi tutulabilir; dolayýsýyla
disk alaný beklenilenden küçük olabilir. <code>VARCHAR(<i>n</i>)</code> büyüklüðü
artabilen ama en büyük uzunluðu sýnýrlý olan verileri saklamak için en uygun yöntemdir.
<code>TEXT</code>, 1 GB büyüklüðe kadar olan verileri tutmak için kullanýlýr.</p>
<p><code>CHAR(<i>n</i>)</code>, ayný uzunluktaki dizilerin saklanmasý için kullanýmýr.
<code>CHAR(<i>n</i>)</code> belirtilen uzunluða kadar boþluk ile doldurur; ancak
<code>VARCHAR(<i>n</i>)</code> sadece verilen karakterleri saklar. <code>BYTEA</code>
binary veri saklamak içindir; ayrýca "<code>NULL</code>" bayt içeren deðerleri de saklar.
Burada anlatýlan üç veri tipi de benzer baþarým karakteristiklere sahiptir.</p>
<h4><a name="4.15.1">4.15.1</a>) Nasýl <i>serial</i>/otomatik artan
(<i>auto-incrementing</i>) bir alan yaratabilirim?</h4>
<p>PostgreSQL'de <code>SERIAL</code> veri tipi vardýr. Bu veri tipi bir
<i>sequence</i> ve kolon üzerinde bir <i>index</i> yaratýr.</p>
<p>Örnek, aþaðýdaki sorgu:</p>
<pre>
CREATE TABLE person (
id SERIAL,
name TEXT
);
</pre>
<p>buna çevrilir:</p>
<pre>
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT
);
CREATE UNIQUE INDEX person_id_key ON person ( id );
</pre>
<p><i>Sequenceler</i> hakkýnda daha fazla bilgi için <i>create_sequence</i>
yardým sayfasýna bakabilirsiniz. Her satýrýn <code>OID</code> alanýný tekil bir sayý
olarak alabilirsiniz. Ancak, veritabanýnýzýn <i>dump</i>'ýný alýp yeniden yüklerseniz,
<code>OID</code> deðerlerini koruyabilmek için <code>pg_dump</code>'ýn <code>-o</code>
parametresini ya da "<code>COPY WITH OIDS</code>" seçeneðini kullanmanýz gerekecektir.</p>
<h4><a name="4.15.2">4.15.2</a>) <code>SERIAL</code> giriþinin degerini nasýl alabilirim?</h4>
<p>Bir yaklaþým, sequence nesnesindeki SERIAL deðerini, veriyi girmeden önce nextval() ile alýp,
aldýðýnýz deðeri kendinizin girmesidir. 4.15.1'deki örnek tabloyu kullanarak bir örnek verelim:</p>
<pre>new_id = execute("SELECT nextval('person_id_seq')");<BR>
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");</pre>
<P>Diðer sorgular için new_id'de yeni deðerin saklanmasý gerekir. Otomatik olarak yaratýlan SEQUENE nesnesinin adý,
<tablo adý>_<serial kolonu adý>_seq þeklinde olacaktýr (< > iþaretleri olmadan).</p>
<p>Alternatif olarak, atanmýþ SERIAL deðerini, deðer girildikten sonra currval()
fonksiyonu ile alabilirsiniz:</p>
<pre>
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");
</pre>
<p>Son olarak, ön tanýmlý deðeri bulmak için <code>INSERT</code> ifadesinden
dönen <code>OID</code> deðerini kullanabilirsiniz; ancak bu en az taþýnabilir
çözüm olacaktýr. Perl'de, Edmund Mergl'in <i>DBD:Pg</i> mödülü ile birlikte
<i>DBI</i> kullanarak, <code>OID</code> deðeri <code>$sth->execute()</code>
çalýþtýrýldýktan sonra <code>$sth->(pg_oid_status)</code> ile alýnabilir.</p>
<h4><a name="4.15.3">4.15.3</a>) <code>currval()</code> ve <code>nextval()</code>
diðer kullanýcýlara sorun yaratmaz mý?</h4>
<p>Hayýr. <code>curval()</code>, tüm kullanýcýlar deðil, backend
tarafýndan atanan geçerli deðeri döndürür.</p>
<h4><a name="4.15.4">4.15.4</a>) Neden <i>sequence</i> sayýlarý <i>transaction</i>
iþleminin iptalinden sonra yeniden kullanýlýyor? Neden <i>sequence/SERIAL</i>
kolonumdaki sayýlarda atlamalar oluyor?</h4>
<p>Uyumluluðu arttýrmak için, <i>sequence</i> deðerleri çalýþan
<i>transaction</i>'lara gerektiði þekilde aktarýlýr ve <i>transaction</i>
bitene kadar o deðer kilitlenmez. Bu, iptal edilen <i>transaction</i>
iþlemleri nedeniyle boþluklara neden olur.</p>
<h4><a name="4.16">4.16</a>) OID nedir? TID nedir?</h4>
<p>OIDler, tekil satýr numaralarýna PostgreSQL'in yanýtýdýr. PostgreSQL'de yaratýlan
her sayý, tekil bir OID alýr. initdb iþlemi sýrasýnda yaratýlan tüm OID'ler 16384'ten küçüktür
(backend/access/transam.h). Kullanýcýlar tarafýndan yaratýlan tüm OID'ler bu sayýya eþit ya da bu
sayýdan büyüktür. Varsayýlan durumda, tüm bu OIDler sadece bir tablo ya da veritabanýnda deðil, tüm
PostgreSQL kurulumunda tekildir.</p>
<p> PostgreSQL OIDleri, tablolar arasýnda satýrlarý iliþkilendirmek için kendi iç tablolarýnda
kullanýr. Bu OIDler belirli kullanýcý satýrlarýný belirtmek için kullanabilir ve join iþlemlerinde
kullanýlýr. OID deðerlerini saklamak için OID kolon tipini kullanmanýz önerinir. Daha hýzlý bir
eriþim için, OID alanýnda bir index yaratabilirsiniz.</p>
<p>OID'ler yeni satýrlara, tüm veritabanlarý tarafýnda kullanýlan ortak bir alandan atanýrlar. Eðer
OID'i baþka bir deðere eþitlemek isterseniz ya da tablonun bir kopyasýný orijinal OIDler ile
çýkarmak isterseniz, bu mümkündür:</p>
<pre>
CREATE TABLE new_table(old_oid oid, mycol int);
SELECT old_oid, mycol INTO new FROM old;
COPY new TO '/tmp/pgtable';
DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable';
</pre>
<p>OIDler 4-bit tamsayý olarak saklanýrlar ve 4 milyarda overflow olacaktýr. Kimse
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>
<p>TIDler, belirli fiziksel satýrlar block ve offset deðerleri ile belirtmekte kullanýlýr. TIDler,
satýrlar deðiþtiðinde ya da yeniden yüklendiðinde deðiþirler. Index girdileri tarafýndan fiziksel
satýrlarý göstermek için kullanýlýrlar.</p>
<h4><a name="4.17">4.17</a>) PostgreSQL'de kullanýlan bazý
terimlerin anlamlarý nelerdir?</h4>
<p>Kaynak kodun bir kýsmý ve eski belgeler, daha geniþ kullaným alaný olan terimleri
kullanýrlar. Bunlarýn bazýlarý:</p>
<ul><li>table, relation, class</li>
<li>row, record, tuple</li>
<li>column, field, attribute</li>
<li>retrieve, select</li>
<li>replace, update</li>
<li>append, insert</li>
<li>OID, serial value</li>
<li>portal, cursor</li>
<li>range variable, table name, table alias</li></ul>
<p>Genel veritabaný terimleri,
<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>
adresinde bulunabilir.</p>
<h4><a name="4.18">4.18</a>) Neden "<i>ERROR: Memory exhausted in AllocSetAlloc()</i>"
hatasýný alýyorum?</h4>
<p>Sisteminizde sanal belleðinizi tüketmiþ olabilirsiniz, ya da çekirdeðiniz
belli kaynaklar icin düþük bir sýnýra sahip olabilir. <i>postmaster</i>
baþlatmadan önce aþaðýdakileri deneyebilirsiniz:</p>
<pre>
ulimit -d 262144
limit datasize 256m
</pre>
<p>Kabuðunuza baðlý olarak, bunlardan sadece biri olumlu sonuç verecektir, ama
bu iþlem veri segment sýnýrýnýzý arttýracak, ve belki de sorgunuzun tamamlanmasýný
saðlayacaktýr. Bu komut, varolan iþleme (<i>current process</i>) ve komut çalýþtýrýldýktan
sonraki tüm alt iþlemlere uygulanýr. Eðer SQL istemcinizle, <i>backend</i>'in çok
fazla veri döndürmesi nedeniyle bir sorun yaþýyorsanýz, bunu istemciyi baþlatmadan
önce deneyiniz.</p>
<h4><a name="4.19">4.19</a>) Hangi PostgreSQL sürümünü çalýþtýrdýðýmý nasýl görebilirim?</h4>
<p>psql arabiriminde, <code>select version();</code> yazýnýz.</p>
<h4><a name="4.20">4.20</a>) Neden <i>large-object</i> iþlemlerim, "<i>invalid large obj
descriptor</i>" hatasýný veriyor?</h4>
<p><i>Large object</i> iþlemlerinizin uçlarýna, yani <code>lo_open</code> ...
<code>lo_close</code> komutlarýnýn çevresine, <code>BEGIN WORK</code> ve
<code>COMMIT</code> koymanýz gerekmektedir;</p>
<p>Þu anda, PostgreSQL kurallarý large objectleri transaction commit edildiðinde kapatarak
uygulamaktadýr. Dolayýsýyla handle ile yapýlacak ilk þey <i>invalid large obj descriptor</i> hatasý
ile sonuçlanacaktýr.Dolayýsýyla çalýþan kodunuz eðer transaction kullanmazsanýz hata mesajlarý
üretecektir.</p>
<p>Eðer ODBC gibi bir istemci arabirimi kullanýyorsanýz, <i>auto-commit</i>'i
kapatmanýz gerekebilir.</p>
<h4><a name="4.21">4.21</a>) Þu andaki zamaný öntanýmlý deðer olarak
kabul eden <b>How do I create a column that will default to the current time?</b></h4>
<p>Alttakini kullanabilirsiniz:</p>
<pre>
CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
</pre>
<h4><a name="4.22">4.22</a>) Neden <code>IN</code> kullanan <i>subquery</i>'lerim
çok yavas?</h4>
<p>7.4 sürümünden önce, subqueryler. Eðer subquery sadece birkaç satýr ve outer query bol
sayýda satýr döndürüyorsa, IN en hýzlýsýdýr. Sorgularý hýzlandýrmak için IN yerine EXISTS
kullanýn:</p>
<pre>
SELECT *
FROM tab
WHERE col1 IN (SELECT col2 FROM TAB2)
</pre>
<p>sorgusunu, aþaðýdaki ile deðiþtirin:</p>
<pre>
SELECT *
FROM tab
WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
</pre>
<p>Bu iþlemin hýzlý olmasý için, subcol'un indexlenmiþ bir kolon olmasý gerekmektedir.</p>
<p>7.4 sürümü ve sonrasýnda, IN aslýnda normal sorgularla ayný karmaþýk join tekniklerini kullanýr ve
EXISTS'e tercih edilir.</p>
<h4><a name="4.23">4.23</a>) <i>Outer join</i> iþlemini nasýl yapabilirim?</h4>
<p>PostgreSQL outer joins islemlerini SQL standartlarýný kullanarak
gerçekleþtirmektedir. Aþaðýda 2 örnek bulunmaktadýr:</p>
<pre>
SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
</pre>
<p>ya da</p>
<pre>
SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
</pre>
<p>Bu özdeþ sorgular t1.col' i t2.col'ye <i>join</i> ederler ve ayný zamanda t1'deki
<i>unjoined</i> satýrlarý (t2'de eþlenmemiþ olanlarla) döndürürler. <code>RIGHT
JOIN t2</code>'nin <i>unjoined</i> satýrlarýný ekleyecektir. Bir FULL join, eþleþmiþ
bütün satýrlarý ve t1 ile t2'den tüm baðlanmamýþ (<i>unjoined</i>) satýrlarý alýr.
<code>OUTER</code> sözcüðü seçimseldir ve <code>LEFT</code>, <code>RIGHT</code> ve
<code>FULL</code> <i>join</i> iþlemlerinde olduðu kabul edilir. Sýradan <i>join</i>
iþlemleri <code>INNER JOIN</code> olarak adlandýrýlýr.</p>
<p>Önceki sürümlerde, <code>OUTER JOIN</code>ler <code>UNION</code> ve <code>NOT IN</code>
kullanýlarak simüle edilebiliyordu. Örneðin, tab1 ve tab2'yi birleþtirirken, aþaðýdaki
sorgu iki tablonun dýþtan baðlanmasýný saðlar:</p>
<pre>
SELECT tab1.col1, tab2.col2
FROM tab1, tab2
WHERE tab1.col1 = tab2.col1
UNION ALL
SELECT tab1.col1, NULL
FROM tab1
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1
</pre>
<h4><a name="4.24">4.24</a>) Ayný andan birden fazla veritabanýnda nasýl
iþlem yapabilirim?</h4>
<p>Mevcut veritabanýnýz dýþýndaki baþka bir veritabanýnýzý sorgulamanýzýn
bir yolu bulunmamaktadýr. Bunun nedeni, PostgreSQL'in veritabanýna özel sistem
kataloglarý yüklemesidir. Bu nedenle, cross-database bir sorgunun nasýl
davranacaðýný kestirmek zordur.</p>
<p>contrib/dblink fonksiyon çaðrýlarýný kullanarak cross-database sorgulara
izin verir. Tabii ki, bir istemci deðiþik veritabanlarýna ayný anda eriþim
saðlayabilir ve bilgiyi bu þekilde birleþtirebilir.</p>
<h4><a name="4.25">4.25</a>) Bir fonksiyondan nasýl çoklu satýr ya da
kolon döndürebilirim?</h4>
<p>7.3 sürümünde, bir fonksiyondan kolaylýkla çoklu satýr ya da sütun
döndürebilirsiniz.
(<i><a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a></i>)</p>
<h4><a name="4.26">4.26</a>) Neden Pl/PgSQL fonksiyonlarý içinden
güvenli bir þekilde tablo yaratma/kaldýrma iþlemlerini yapamýyoruz?</h4>
<p>PL/PgSQL fonksiyon içerikleri <i>cache</i>'ler. Bunun istenmeyen bir tarafý,
eðer bir PL/PgSQL fonksiyonu geçici bir tabloya eriþiyorsa ve bu tablo ileride
kaldýrýlýp yeniden oluþturulduktan sonra fonksiyon yeniden çaðrýlýrsa, fonksiyon
çalýþmayacaktýr; çünkü <i>cache</i>'lenmiþ fonksiyon hala eski geçici tabloyu
gösteriyor olacaktýr. Çözüm, geçici tablo eriþimleri için PL/PgSQL'de
<code>EXECUTE</code> kullanmaktýr. Bu, sorgunun her seferinde yeniden iþlenmesini
saðlayacaktýr.</p>
<h4><a name="4.27">4.27</a>) 4.28) Hangi þifreleme seçenekleri bulunmaktadýr?</h4>
<ul><li>contrib/pgcrypto SQL sorgularýnda kullanýlabilmesi için
þifreleme fonksiyonlarý içermektedir.</li>
<li> Ýstemciden sunucuya iletiþimi þifrelemek için, sunucuda ssl seçeneði postgresql.conf içinde
açýk olmalýdýr. Ayrýca,pg_hba.conf dosyasý içinde host ya da hostssl kaydý mutlaka olmalýdýr ve
istemci sslmode kapatýlmamalýdýr. (Ayný zamanda,PostgreSQL'in doðal SSL baðlantýlarý dýþýnda ssh ya
da ssl gibi 3.parti þifrelenmiþ veri iletimi de mümkündür.)</li>
<li>Veritabaný kullanýcý adý ve þifreleri 7.3 sürümü ile birlikte
otomatik olarak þifrelenirler. Önceki sürümlerde, postgresql.conf
içindeki PASSWORD_ENCRYPTION seçeneðini aktif hale getirmeniz gerekmektedir.</li>
<li>Sunucunun kendisini þifreli dosya sistemi üzerinde çalýþtýrabilirsiniz.</li></ul>
<hr>
<h2 align="center">PostgreSQL Özelliklerini Geniþletmek</h2>
<h4><a name="5.1">5.1</a>) Kullanýcý-tanýmlý bir fonksiyon yazdým.
psql'de çalýþtýrdýðým zaman neden core dump ediyor?</h4>
<p>Sorunun nedeni birden fazla þey olabilir. Kullanýcý-tanýmlý fonksiyonunuzu
stand-alone bir programda çalýþtýrmayý deneyiniz.</p>
<h4><a name="5.2">5.2</a>) PostgreSQL'e nasýl yeni tipler/fonksiyonlar ekleyebilirim?</h4>
<p>Çalýþmalarýnýzý pgsql-hackers e-posta listesine gönderiniz. Kodunuz
incelendikten sonra /contrib dizinine konacaktýr.</p>
<h4><a name="5.3">5.3</a>) Bir <i>tuple</i> dondürmek icin bir C fonksiyonunu nasil yazarým?</h4>
<p>PostgreSQL 7.3 sürümü ile birlikte, C, PL/PgSQL ve SQL kullanýlarak tablo-döndüren
fonksiyonlar tamamen desteklenmektedir. Ayrýntýlý bilgi için
<i><a href="http://www.postgresql.com/docs/7.3/interactive/user.html">PostgreSQL 7.3.2
Kullanýcý Rehberi</a></i>'ne bakabilrisiniz. Bir örneði contrib/tablefunc
içinde bulabilirsiniz.</p>
<h4><a name="5.4">5.4</a>) Bir kaynak dosyasýnda deðiþiklik yaptým. Yeniden derlememe
raðmen deðiþiklik geçerli olmuyor. Neden?</h4>
<p>Makefile'lar include dosyalarý için tam bir baðýmlýlýk içermezler.
Öncelikle make clean, ardýndan da baska bir make iþlemi yapmanýz gerekir.
GCC kullanýyorsanýz, configure betiðinin --enable-depend seçeneðini, derleyicinin
baðýmlýlýklarý otomatik olarak hesaplamasý için kullanabilirsiniz.</p>
</body></html>