PostgreSQL iin Ska Sorulan Sorular (SSS)

Son gncelleme : 15 Kasm 2004 Pazartesi - 14:47:20

Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)

evirenler : Devrim Gndz (devrim@tdmsoft.com)
Nicolai Tufar (ntufar@tdmsoft.com)
Volkan YAZICI (volkany@phreaker.net)

Bu belgenin en gncel hali, http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html ve 
http://www.gunduz.org/seminer/pg/FAQ_turkish.html adreslerinde grlebilir.

Platforma zel sorularnz, http://www.PostgreSQL.org/docs/index.html adresinde yantlanr.
Genel Sorular
1.1) PostgreSQL nedir? Nasl okunur?
1.2) PostgreSQL'in haklar nedir?
1.3) PostgreSQL, hangi Unix platformlarnda alr?
1.4) Hangi Unix olmayan uyarlamalar bulunmaktadr?
1.5) PostgreSQL'i nereden indirebilirim?
1.6) Destei nereden alabilirim?
1.7) En son srm nedir?
1.8) Hangi belgelere ulaabilirim?
1.9) Bilinen hatalar ya da eksik zelliklere nereden ulasabilirim?
1.10) Nasl SQL renebilirim?
1.11) PostgreSQL 2000 ylna uyumlu mudur?
1.12) Gelitirme takmna nasl katlabilirim??
1.13) Bir hata raporunu nasl gnderebilirim?
1.14) PostgreSQL, dier VTYS(DBMS) lerle nasl karlatrlabilir?
1.15) PostgreSQL'e maddi adan nasl destek olabilirim?
Kullanc/istemci Sorular
2.1) PostgreSQL iin ODBC srcleri var m?
2.2) PostgreSQL'i web sayfalarnda kullanabilmek iin hangi aralar bulunmaktadr?
2.3) PostgreSQL'in grafik kullanc arabirimi var mdr?
2.4) PostgreSQL ile iletiimi kurabilmek iin hangi dilleri kullanabilirim?
Ynetimsel Sorular
3.1) PostgreSQL'i /usr/local/pgsql dizininden baka dizinlere nasl kurabilirim?
3.2) Postmaster' balattmda Bad System Call ya da core dumped mesaj alyorum. Neden?
3.3) Postmaster' balattmda, IpcMemoryCreate hatas alyorum. Neden?
3.4) Postmaster', balattmda, IpcSemaphoreCreate hatas alyorum. Neden?
3.5) Dier bilgisayarlarn benim PostgreSQL veritaban sunucuma balantlarn nasl kontrol edebilirim?
3.6) Veritaban motorunu daha iyi baarm icin nasl ayarlayabilirim?
3.7) Hangi hata ayklama zellikleri bulunmaktadr?
3.8) Balanmaya alrken, neden "Sorry, too many clients" hatasn alyorum. Neden?
3.9) pgsql_tmpdizinin iindeki dosyalar nelerdir?
3.10) PostgreSQL srmlerini ykseltmek iin neden bir dump/reload ilemi gerekletirmek zorundaym?
3.11) Nasl bir donanm kullanmalym?br>
letimsel Sorular
4.1) Binary cursor ve normal cursor arasndaki fark nedr?
4.2) Sorgunun sadece ilk birka satrn nasl SELECT edebilirim?
4.3) psql'in iinde grdgm tablolarn ya da dier eylerin listesini nasl alabilirim?
4.4) Bir tablodan bir kolonu nasl kaldrabilirim?
4.5) Bir satr, tablo ve veritaban iin en fazla byklk nedir?
4.6) Tipik bir metin dosyasndaki veriyi saklamak iin ne kadar disk alan gereklidir?
4.7) Veritabannda hangi tablo ya da index'lerin tanmlandn nasl grebilirim?
4.8) Sorgularm cok yava, ya da index'lerimi kullanmyorlar. Neden?
4.9) Query-optimizer'n sorgularm nasl deerlendirdiini, ileme soktuunu nasl grebilirim?
4.10) R-tree index nedir?
4.11) Genetic Query Optimizer nedir?
4.12) Dzenli ifade (Regular Expression) aramalarn ve byk/kk harfe duyarsz aramalar nasl yapabilirim? Bu 
byk/kk harfe duyarl aramalar iin index'i nasl kullanabilirim?
4.13) Bir sorguda, bir alann NULL olduunu nasl ortaya karabilirim?
4.14) esitli karakter tipleri arasndaki farklar nelerdir?
4.15.1) Nasl serial/otomatik artan (auto-incrementing) bir alan yaratabilirim?
4.15.2) Serial giriinin deerini nasl alabilirim?
4.15.3) currval() ve nextval() dier kullanclara sorun yaratmaz m?
4.15.4) Neden sequence saylarn transaction ileminin iptalinden sonra yeniden kullanlyor? Neden sequence/SERIAL 
kolonumdaki saylarda atlamalar oluyor?
4.16) OID nedir? TID nedir?
4.17) PostgreSQL' de kullanlan baz terimlerin anlamlar nelerdir?
4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasn alyorum?
4.19) Hangi PostgreSQL srmn alstrdm nasl grebilirim?
4.20) Neden large-object ilemlerim, "invalid large obj descriptor" hatasn veriyor?
4.21) u andaki zaman ntanml deer olarak kabul eden kolonu nasl yaratrm?
4.22) Neden IN kullanan subquery'lerim ok yava?
4.23) Outer join ilemini nasl yapabilirim?
4.24) Ayn anda birden fazla veritabannda nasl ilem yapabilirim?
4.25) Bir fonksiyondan nasl oklu satr ya da kolon dndrebilirim?
4.26) Neden Pl/PgSQL fonksiyonlar iinden gvenli bir ekilde tablo yaratma/kaldrma ilemlerini yapamyoruz?
4.27) Hangi ifreleme seenekleri bulunmaktadr?
PostgreSQL zelliklerini Geniletmek
5.1) Kullanc-tanml bir fonksiyon yazdm. psql'de altrdm zaman neden core dump ediyor?
5.2) PostgreSQL'e nasl yeni veri tipleri/fonksiyonlar ekleyebilirim?
5.3) Bir tuple dndrmek iin bir C fonksiyonunu nasl yazarm?
5.4) Bir kaynak dosyasnda deiiklik yaptm. Yeniden derlememe ramen deiiklik geerli olmuyor. Neden?
Genel Sorular
1.1) PostgreSQL nedir? Nasl okunur?

PostgreSQL, Post-Gres-Q-L. olarak okunur

PostgreSQL, yeni-nesil VTYS aratrma prototipi olan POSTGRES veritaban ynetim sisteminin gelitirilmesidir. 
POSTGRES'in zengin veri tiplerini ve gl veri modelini tutarken, SQL'in gelitirilmi alt kmesi olan PostQuel dilini 
kullanr. PostgreSQL cretsizdir ve kaynak kodu ak datlr.

PostgreSQL, PostgreSQL gelitirme listesine ye olan bir Internet gelitirici takm tarafndan gelitirilir. u andaki 
koordinatr, Marc G. Fournier (scrappy@PostgreSQL.org). (Bu takma nasl katlacagnz renmek iin 1.6 numaral 
maddeyi okuyunuz.) Bu takm, tm PostgreSQL geliiminden sorumludur.

PostgreSQL 1.01 srmnn yazarlar Andrew Yu ve Jolly Chen idi. Bunlarn dnda bir ka kisi de uyarlama, hata 
ayklama ve kodun gelitirilmesi iin alsmt. PostgreSQL'in tredii orijinal Postgres kodu, lisans, lisansst ve 
akademisyenler tarafndan, Professor Michael Stonebraker (University of California, Berkeley) koordinatrlgnde 
yazlmtr.

Berkley'deki yazlmn ad Postgres idi. SQL uyumluluu 1995'te eklenince, ad Postgres 95 oldu. 1996 ylnn 
sonlarnda ad PostgreSQL olarak deitirildi.
1.2) PostgreSQL'in haklar nedir?

PostgreSQL Data Base Management System

Portions copyright (c) 1996-2002, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the 
University of California

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.

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.

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.

stteki metin klasik ak-kod lisans olan BSD lisansdr. Kaynak kodun nasl kullanlabileceine dair snrlamalar 
yoktur. Bu lisans seviyoruz. Deitirme niyetimiz bulunmamaktadr.
1.3) PostgreSQL, hangi Unix platforlarnda alr?

Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i altracaktr. Ayrntl bilgi iin kurulum belgelerine 
bakabilirsiniz.
1.4) Hangi Unix olmayan uyarlamalar bulunmaktadr?

PostgreSQL 8.0 srm ile , PostgreSQL artk Win2000, WinXP ve Win2003 gibi Microsoft Windows NT tabanl iletim 
sistemlerinde doal olarak almaya balamtr. Paketlenmi bir  kurulum program, http://pgfoundry.org/projects/pginstaller
adresinden indirilebilir.

Ayrca, http://forge.novell.com adresinde Novell Netware 6 portu bulunmaktadr.
1.5) PostgreSQL'i nereden indirebilirim?

PostgreSQL iin ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub adresidir. Yanslar iin, ana web sayfamza 
bakabilirsiniz.
1.6) Nereden destek alabilirim?

Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL konusundaki tartmalara aktr. ye olmak iin, 
aadaki satrlar e-postanzn body ksmna (konu ksmna deil) yazp, pgsql-general-request@PostgreSQL.org adresine 
gnderin:

subscribe
end

Ayn zamanda, bir digest listesi bulunmaktadr. Bu listeye ye olmak iin, pgsql-general-digest-request@PostgreSQL.org 
adresine, body ksmnda

subscribe
end

yazan bir e-posta atmanz yeterli olacaktr.

Digest postalar, ana liste 30k civarnda e-postaya ulatnda yelere gnderilmektedir.

Bug'lar iin bir e-posta listesi bulunmaktadr. Bu listeye ye olmak iin, pgsql-bugs-request@PostgreSQL.org adresine, 
body ksmnda

subscribe
end

yazan bir e-posta atmanz yeterli olacaktr.

Ayn zamanda, gelitiriciler iin tartma listesi bulunmaktadr. Bu listeye ye olmak iin, 
pgsql-hackers-request@PostgreSQL.org adresine, body ksmnda

subscribe
end

yazan bir e-posta atmanz yeterli olacaktr.

Bunun dndaki e-posta listelerine ve PostgreSQL hakknda bilgiye, PostgreSQL WWW ana sayfasndan ulasabilirsiniz: 
http://www.PostgreSQL.org

Ayn zamanda, EFNet zerinde, #PostgreSQL adl bir IRC kanal bulunmaktadr. Bunun iin, irc -c '#PostgreSQL' "$USER" 
irc.phoenix.net Unix komutunu kullanabilirsiniz.

Ticari destek veren firmalarn listesine

http://www.postgresql.org/users-lounge/commercial-support.html

adresinden ulabilirsiniz.
1.7) En son srm nedir?

PostgreSQL'in son srm 7.4.6'dr.

Her 6-8 ayda ana srm karlmas planlanmaktadr.
1.8) Hangi belgelere ulaabilirim?

Datmn iinde, kitapklar, kitapk sayfalar ve baz kk rnekler verilmektedir. /doc dizinine baknz. Ayrca, 
bu el kitapklarn online olarak http://www.PostgreSQL.org/docs/ adresinden inceleyebilirsiniz.

http://www.PostgreSQL.org/docs/awbook.html ve http://www.commandprompt.com/ppbook adreslerinde PostgreSQL kitaplar 
bulunmaktadr. PostgreSQL kitablarnn listesine, http://www.ca.PostgreSQL.org/books/ adresinden ulaaiblirsiniz. 
Ayrca, PostgreSQL konusundaki teknik makalelere de http://techdocs.PostgreSQL.org/ adresinden ulaabilirsiniz.

psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar, aggregate'ler, vb. ile ilgili gzel komutlar vardr.

Web sitemiz daha fazla belgeyi iermektedir.
1.9) Bilinen hatalar ya da eksik zelliklere nereden ulaabilirim?

PostgreSQL SQL-92 uyumluluu iindedir, standartlardan fazla da zellikleri bulunmaktadr. Bilinen hatalar, eksik 
zellikler ve gelecek ile ilgili planlar iin TODO listesine baknz.
1.10) Nasl SQL renebilirim?

http:/www.PostgreSQL.org/docs/awbook.html adresindeki kitap SQL gretecektir. http://www.commandprompt.com/ppbook 
adresinde de bir baska PostgreSQL kitab bulunmaktadr.

http://www.intermedia.net/support/sql/sqltut.shtm, 
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM http://sqlcourse.com ve http://sqlcourse2.com 
adreslerinde de gzel belgeler bulunmaktadr.

Bir bakas da, http://members.tripod.com/er4ebus/sql/index.htm adresinde bulunan "Teach Yourself SQL in 21 Days, 
Second Edition" kitabdr.

Baz kullanclarmz da u kitab nermektedirler: "The Practical SQL Handbook, Bowman, Judith S., et 
al.,Addison-Wesley". Bazlar ise "The Complete Reference SQL, Groff et al., McGraw-Hill" kitabn nermektedirler.
1.11) PostgreSQL 2000 ylna uyumlu mudur?

Evet.
1.12) Gelitirme takmna nasl katlabilirim?

ncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da datmn iindeki PostgreSQL Developer belgesini 
okuyun. Ardndan, pgsql-hackers ve pgsql-patches listelerine ye olun. nc olarak da, pgsql-pacthes listesine yksek 
kalitede yamalar gnderin.

PostgreSQL CVS arivine eriim izni olan, 10 kadar gelitirici bulunmaktadr. Hepsi defalarca, dier kiilerin 
yaptndan ok daha yksek-kaliteli yamalar gndermilerdir. Ayrca biz de bu gelitiricilerin ekledikleri yamalarn 
yksek kalitede olduuna gveniyoruz.
1.13) Bir hata raporunu nasl gnderebilirim?

PostgreSQL BugTool sayfasna gidiniz. O sayfada bir bug bildirmek iin neleri yapmanz gerektii anlatlmtr.

Ayrca, ftp://ftp.PostgreSQL.org/pub ftp adresimizde, yeni bir PostgreSQL srm ya da yamas olup olmadni kontrol 
ediniz.
1.14) PostgreSQL, diger DBMS'lerle nasl karlastrlabilir?

Bir yazlmn gcn lmek iin eitli yollar vardr: Yazlmn zellikleri, baarm, gvenilirlii, destei ve 
creti.

zellikler:

PostgreSQL mevcut byk ticari veritabanlarnn, transaction, subselect, trigger, view, foreign key referential 
integrity ve sophisticated locking gibi (user-defined types), rules, inheritance ve lock cakmalarn drmek iin 
multi-version uyumluluk zellikleri bulunmaktadr.

Performans (Baarm):

PostgreSQL, dier ticari ve ak kaynak kodlu veritabanlaryla yakn baarm salar. Baz alardan daha hzldr, 
dier alardan da yavatr. MySQL ya da daha zayf veritabanlar ile karlatrldnda, INSERT/UPDATE ilemlerinde, 
transaction bazl alstmz iin daha yavaz. MySQL, yukardaki "zellikler" ksmnda belirtilenlerden hi birine 
sahip deildir. Biz, baarmmz her srmde arttrsak da, esneklik ve gelimi zellikler iin yaplanm durumdayz. 
PostgreSQL'i MySQL ile karlatran u web sitesine bakabilirsiniz: http://openacs.org/why-not-mysql.html

Gvenilirlik:

DBMS'lerin gvenilir olmas gerketii, yoksa deerleri olmayacan dnyoruz. ok iyi test edilmi, dengeli alsan 
minimum sayda hata ieren kod sunmaya alyoruz. Her bir srm en az 1 aylk beta testlerinden geirilmektedir. 
Srm gemiine bakarsanz, retime hazr, dengeli ve kararl kodlar sunduumuzu grebilirsiniz. Bu alanda, dier 
veritaban yazlmlarna stnlmz olduuna inanmaktayz.

Destek:

E-posta listemiz, oluan herhangi bir sorunu zebilecek byk sayda kullanc ve gelitirici grubunu ierir. 
Sorununuz iin, en az bir ticari veritaban kadar rahat zm bulabilirsiniz. Gelistiricilere, kullanc grubuna, 
belgelere ve kaynak koda direk olarak eriebilme, PostgreSQL desteini, dier DBMS'lere gre daha nemli klar. 
Gereksinimi olanlara, ticari destek verilebilir. (Destek iin 1.6 blmne baknz.)

Fiyat:

Ticari ve ticari olmayan tm kullanmlarnz iin PostgreSQL cretsizdir. Kodumuzu, yukarda belirtilen BSD-stili 
lisanstaki snrlamalar hari, rnnzn iine ekleyebilirsiniz.
1.15) PostgreSQL'e maddi adan nasl destek olabilirim?

PostgreSQL, 1996 ylndan beri 1. snf altyapya sahiptir. Bunun iin, yllar boyu alp bu altyapy oluturup 
yneten Marc Fournier'e teekkrler.

Bir ak kaynak kodlu proje iin, kaliteli altyap ok nemlidir. Bu altyap, projenin kesilmesini nler ve projenin 
ilerlemesini hzlandrr.

Tabii ki bu altyap ucuz deildir. lerin yrmesi iin eitli ylk ve anlk harcamalarmz olmaktadr. Eer siz ya 
da irketinizin bu abamza bata bulunabilecek paras varsa, ltfen http://store.pgsql.com adresine gidiniz 
ve bata, hibede bulununuz.

Web sayfasnn 'PostgreSQL Inc.' den bahsetmesine ramen, "katkda bulunanlar" (contributors) maddesi sadece PostgreSQL 
projesini desteklemek iindir ve belirli bir irketin para kayna deildir. isterseniz, balant adresine bir ek 
gnderebilirsiniz.
Kullanc/stemci Sorular
2.1) PostgreSQL icin ODBC srcleri var m?

iki tane ODBC srcs bulunmaktadr: PsqlODBC ve OpenLink ODBC.

PsqlODBC'i http://gborg.postgresql.org/project/psqlodbc/projdisplay.php adresinden indirebilirsiniz.

OpenLink ODBC http://www.openlinksw.com adresinden alnabilir.Bu src, kendi standart ODBC istemci yazlm ile 
alstndan, destekledikleri her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC bulunmalidir.

cretsiz srm olmakla beraber, ticari kalitede destek almak isteyenlere satmak isteyeceklerdir. Sorularnz ltfen 
postgres95@openlink.co.uk adresine gnderiniz.
2.2) PostgreSQL'i web sayfalarnda kullanabilmek iin hangi aralar bulunmaktadr?

http://www.webreview.com/ adresinde, arka planda veritaban alstran Web sayfalar iin giri seviyesinde bilgi 
bulunmaktadr.

Web ile btnleme iin, PHP () mkemmel bir arabirim sunar.

Karmak sorunlar iin, ou kisi Perl arabirimini ve CGI.pm ya da mod_perl kullanr.
2.3) PostgreSQL'in grafik kullanc arabirimi var mdr?

eitli grafik arabirimlerimiz bulunmaktadr. Bunlarn arasnda, PgAccess (http://www.pgaccess.org/), PgAdmin II 
(http://www.pgadmin.org/, sadece Win32 iin), RHDB Admin (http://sources.redhat.com/rhdb/) ve Rekall 
(http://www.thekompany.com/products/rekall/) bulunmaktadr. Ayrca, PostgreSQL iin web tabanl bir arabirim olan 
PHPPgAdmin (http://phppgadmin.sourceforge.net/) bulunmaktadr.

Daha ayrntl liste iin http://techdocs.postgresql.org/guides/GUITools adresine bakabilirsiniz.
2.4) PostgreSQL ile iletiimi kurabilmek iin hangi dilleri kullanabilirim?

    * C (libpq)
    * Embedded C (ecpg)
    * Java (jdbc)
    * Python (PyGreSQL)
    * TCL (libpgtcl)

Dierleri iin, http://gborg.postgresql.org adresindeki Drivers/Interfaces blmne bakabilirsiniz.
Ynetimsel Sorular
3.1) PostgreSQL'i, /usr/local/pgsql dizininden baka dizinlere nasl kurabilirim?

configure betiini alstrrken, --prefix seeneini veriniz.
3.2) postmaster'i baslattgmda, a Bad System Call ya da core dumped mesaj alyorum. Neden?

Bunun birok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey, ekirdeginize System V uzantlarnn kurulu olup 
olmadgn kontrol etmek olabilir. PostgreSQL shared memory ve semaphores iin ekirdek destegine gereksinim duyar.
3.3) postmaster'i balattmda, pcMemoryCreate hatas alyorum. Neden?

Ya ekirdeinizde shared memory desteiniz dzgnce yaplandrlmamtr, ya da ekirdeinizdeki mevcut shared memory 
miktarn bytmeniz gerekecektir. Gereksinim duyacanz miktar, mimarinize ve postmaster iin ayarladgnz tampon 
ile backend ilemi saysna baldr. Tm sistemler iin, tamponlar ve ilemlerde ntanml saylarla, ~ 1MB kadar yere 
gereksinmeniz olacaktr. PostgreSQL 7.3.2 Sistem Yneticileri Rehberi'ne, shared memory ve semaphorelar hakkndaki 
ayrntl bilgi iin bakabilirsiniz.
3.4) postmaster' balattmda, pcSemaphoreCreate hatas alyorum. Neden?

Eer hata, "pcSemaphoreCreate: semget failed (No space left on device)" ise, ekirdeiniz yeterli semaphore ile 
yaplandrlmam demektir. Postgres, her bir potansiyel backend iin bir semaphore gereksinimi duyar. Geici bir 
zm, postmaster backend ilemleri iin daha az miktarda snrla balatmak olabilir. -N'i varsaylan deer olan 
32'den kk bir deerle balatnz. Daha kalc bir zm, ekirdeinizin SEMMNS ve SEMMNI parametrelerini ykseltmek 
olacaktr.

almayan semaphore'lar ar veritaban ilemlerinde kme yaratabilirler.

Eer hata mesajnz baka bir ey ise, ekirdeinizde semaphore desteini yaplandrmam olabilirsiniz. Shared memory 
ve semaphore'lar hakkndaki daha ayrntl bilgi iin PostgreSQL 7.3.2 Sistem Yneticileri Rehberi'ne bakabilirsiniz.
3.5) Diger bilgisayarlarn benim PostgreSQL veritaban sunucuma balantlarn nasl kontrol edebilirim?

n tanml olarak, PostgreSQL sadece yerel makineden Unix domain sockets kullanarak balanlmasna izin verir. Diger 
makineler, postmaster'a -i etiketini geirmezseniz ve $PGDATA/pg_hba.conf dosyasn dzenleyerek host-based 
authentication'a olanak vermezseniz, balant yapamayacaklardr.
3.6) Veritabani motorunu daha iyi baarm iin nasl ayarlayabilirim?

Index'ler sorgular hzlandrabilir. EXPLAIN komutu, PostgreSQL'in sorgunuzu nasl yorumladn ve hangi index'leri 
kullandn grmenize izin verir.

Eer cok fazla INSERT ilemi yapyorsanz, bunlar byk bir toplu ilem dosyaskullanp COPY komutu ile veritabanna 
girmeyi deneyiniz. Bu, tekil INSERT'lerden daha hzldr. kinci olarak, BEGIN WORK/COMMIT transaction blou iinde 
olmayan ifadeler kendi transaction'larndaym gibi dnlr. oklu ifadeleri tek bir transaction blou iinde 
yapabilirsiniz. Bu, transaction overhead'ini drecektir. Tek bir transaction blou iinde birden ok ifadeyi 
altrmay deneyebilirsiniz. Bu da ayn ekilde, transaction overhead'ini drr.

eitli ayarlama seenekleri mevcuttur. fsync() ilemini, postmaster' -o -F seenei ile balatarak devre d 
brakabilirsiniz. Bu ilem, fsync()'lerin her transactiondan sonra diski flush etmesini engelleyecektir.

Ayn zamanda, postmaster'i -B seenei ile balatp, backend ilemleri tarafndan kullanlan shared memory buffers 
saylarn arttrabilirsiniz. Eer bu parametreyi ok yksek tutarsanz, ekirdeinizin shared memory blgesindeki 
limiti ama olaslnz yznden postmaster balayamayabilir. Her bir tampon (buffer) 8K'dr. ntanml say ise 64 
tampondur.

Ayn ekilde, backend'in -S seeneini geici sralamalar iin backend sreleri tarafndan kullanlacak hafzay 
arttrmak amacyla kullanabilirsiniz. -S seenei kilobayt cinsinden deer alr ve n tanml deeri 512'dir (512 K)

Tablolardaki veriyi bir index'e elemek amacyla gruplama iin CLUSTER komutunu kullanabilirsiniz. Ayrntl bilgi iin 
CLUSTER komutunun yardm sayfasna bakabilirsiniz.
3.7) Hangi hata ayklama zellikleri bulunmaktadr?

PostgreSQL, hata ayklama amacyla kullanlabilecek durum bilgisi rapor eden eitli zeliklere sahiptir.

ncelikle, configure betiini --enable-cassert seeneiyle altrrsanz, bir ok assert() backend calmasn 
gzlemler ve beklenmeyen bir durumda program durdurur.

Postmaster ve postgres eitli hata ayklama seeneklerine sahiptir. ncelikle, postmaster' balattnzda, standart 
kty ve hatalar bir log dosyasna ynlendirdiinize emin olun:

cd /usr/local/pgsql
./bin/postmaster >server.log 2>&1 &

Bu ilem PostgreSQL ana dizinine server.log dosyas yerletirecektir. Bu dosya sunucunun yaad sorunlar ya da 
hatalar hakknda yararl bilgiler ierir. -d seenei, hata ayklama seviyesini belirten bir rakam ile kullanlr. 
Yksek hata ayklama seviyelerinin byk log dosyalar oluturacan unutmaynz.

Eer postmaster almyorsa, postgres backend'ini komut satrndan altrabilir ve SQL ifadenizi direk olarak 
yazabilirsiniz. Bu sadece hata ayklama amacyla nerilir. Burada, noktal virgln deil de yeni bir satrn sorguyu 
sonlandrdn unutmaynz. Eer hata ayklama sembolleri ile derlediyseniz, ne olduunu grmek iin bir hata 
ayklayc kullanabilirsiniz. backend postmaster'dan balatlmadndan, edeer bir ortamda almamaktadr ve 
locking/backend etkileim sorunlar artabilir.

Eer postmaster alyorsa, bir pencerede psql'i altrn ve psql tarafndan kullanlan postgres srecinin sre 
numarasn (PID) bulun. Postgres sreci ile ilikilendirmek iin bir hata ayklarc kullann. Sorgular psql aracl 
ile altrabilirsiniz. Eer postgres balangcnda hata ayklamak istiyorsanz, PGOPTIONS="-W n" seeneini 
ayarlayabilir ve psql'i balatabilirsiniz. Bu ilem, balangcn n saniye kadar gecikmesini salayacaktr; bylece hata 
ayklaycy srece ilikilendirdikten sonra balang srecinin devam etmesini salayabilirsiniz.

postgres program hata ayklama ve baarm lmleri iin -s, -A ve -t seeneklerine sahiptir.
3.8) Balanmaya alrken, neden "Sorry, too many clients" hatasn alyorum?

Postmaster'n ezamanl olarak balatabilecei backend sreleri snrlarn arttrmanz gerekmektedir.

n tanml deer 32 sretir. Bunu, postmaster' uygun -N deeri ile ya da postgresql.conf dosyasn dzenleyerek 
yeniden balatmakla arttrabilirsiniz.

Eer -N deerini 32'den byk yapacaksanz, ayn zamanda -B deerini de deitirmeniz gerektiini unutmayn. -B, -N'nin 
en az 2 kat kadar olmaldr; daha iyi baarm iin bu sayy daha da arttrmalsnz. Yksek saydaki backend 
sreleri iin, eitli ekirdek yaplandrma parametrelerini arttrmanz gerekecektir. Yaplmas gerekenler, SHMMAX, 
SEMMNS, SEMMNI, NPROC, MAXUPRC ve alabilecek dosyalarn maksimum says olan NFILE ve NINODE deerlerini 
kartrmaktr. Bunun nedeni, PostgreSQL'in izin verilen backend srelerinin says zerinde bir snr olmasdr. 
Bylelikle sistem kaynaklarnn dna klmayacaktr.

PostgreSQL'in 6.5 srmne kadar, en fazla backend says 64 idi ve bunu deitirmek iin include/storage/sinvaladt.h 
dosyas iindeki MaxBAckendid sabitini deitirdek sonra yazlm yeniden derlemek gerekiyordu.
3.9) pgsql_tmp dizinin iindeki dosyalar nelerdir?

Sorgu alstrc (query executer) tarafndan yaratlan geici dosyalardr. rnegin, bir sralama ORDER BY ile 
yaplacaksa ve sralama backend'in -s parametresinin izin verdiinden daha fazla alana gereksinim duyuyorsa, ekstra 
veriyi tutmak iin geici dosyalar yaratlr.

Geici dosyalar, eer sralama srasnda backend gmezse otomatik olarak silinecektir. Eer alan durumda bir 
backend'iniz yoksa, pg_tempNNN.NN dosyalarn silmeniz gvenlidir.
3.10) PostgreSQL srmlerini ykseltmek iin neden bir dump/reload ilemi gerekletirmek zorundaym?

PostgreSQL takm ara srmlerde sadece kk deiiklikler yapmaktadr; bu yzden 7.2 srmnden 7.2.1'e ykseltmek 
dump/restore ilemi gerekmemektedir. Ancak, esas srmlerde (rnek: 7.2'den 7.3'e) ounlukla sistem tablolarnn ve 
veri dosyalarnn i yaps deitirilir. Bu deiiklikler ounlukla karmaktr; dolaysyla veri dosyalarnn geriye 
dnk uyumluluu ilemlerini yapmyoruz. Dump ilemi, veriyi genel biimde alacandan yeniden ykleme esnasnda veri, 
yeni i biime uygun ekilde yerletirilecektir.

Disk biiminin deimedii srmlerde, pg_upgrade betii gncellemenin bir dump/restore gerektirmeden yaplmasn 
salayacaktr. pg_upgrade betiinin o srm iin bulunup bulunmadn srm notlar iinde bulabilirsiniz.
3.11) Nasl bir donanm kullanmalym?

PC donanm tamamen uyumlu olduu iin, insanlar tm PC donanmlarnn ayn kalitede olduunu dnrler. Oysa byle 
deildir. ECC RAM, SCSI ve kaliteli anakartlar daha ucuz donanmlara gre daha ok gvenilirlerdir ve baarmlar daha 
yksektir. PostgreSQL hemen hemen tm donanmda alabilmektedir, ancak gvenilirlik ve baarm nemli ise donanm 
seeneklerini ok iyi aratrmak gereklidir. E-posta listelerimi donanmlarla ilgili sorular ve de ticaret iin 
kullanlabilir.
letimsel Sorular
4.1) Binary cursor ve normal cursor arasndaki fark nedir?

DECLARE yardm sayfasna baknz.
4.2) Sorgunun sadece ilk birka satrn nasl SELECT edebilirim?

FETCH yardm sayfasna baknz, ya da SELECT ... LIMIT ... kullannz.

lk birka satr almak isteseniz bile, tm sorgu deerlendirilmek durumunda kalnabilir. ORDER BY ieren bir sorgu 
dnn. Eer ORDER BY ie eleen bir index varsa, PostgreSQL istenen ilk birka satr ileyebilir, ya da tm sorgu 
istenen satrlar retilene kadar ilenebilir.
4.3) psql'in iinde grdgm tablolarn ya da dier eylerin listesini nasl alabilirim?

pgsql/src/bin/psql/describe.c iindeki psql kaynak kodunu okuyabilirsiniz. Bu kod, psql'in \ ile balayan komutlarnn 
ktsn olusturan SQL komutlarn ierir. Ayn zamanda, psql'i -E seenei ile balatp, verdiiniz komutlar 
altrmak iin yapt sorgularn ktlarn grebilirsiniz.
4.4) Bir tablodan bir kolonu nasl kaldrabilirim?

Bu zellik (ALTER TABLE DROP COLUMN) 7.3 srm ile gelmitir. Eski srmlerde aadakileri uygulamalsnz:

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;		
		

4.5) Bir satr, tablo ve veritaban iin en fazla byklk nedir?

Snrlar:

Veritaban iin en fazla byklk nedir?
Snrsz (32 TB'lk veritaban bulunmaktadr)

Bir tablo iin en fazla byklk nedir?
32 TB

Bir satr iin en fazla byklk nedir?
1.6 TB

Bir alan iin en fazla byklk nedir?
1 GB

Tabloda en fazla satr says katr?
Snrsz

Bir tabloda olabilecek en fazla kolon says katr?
Kolon tiplerine bal olarak 250-1600

Bir tabloda olabilecek en fazla index says katr?
Snrsz

Tabii ki bunlar aslnda snrsz degildir. Burada belirtilen snrlar, fiziksel snrlarn haricindeki snrlardr. Bo 
disk alan, hafza/takas alan na bal snrlamalar vardr. Baarm, snr deerlere yaklatka, ya da deerler ok 
byk olduunda debilir.

Bir tablo iin byklk snr olan 32 TB, iletim sisteminin byk dosya destei olup olmamasndan bamszdr. Byk 
tablolar, 1 GB'lik dosyalarda sakland iin, dosya sistemi snrlarnin bir nemi yoktur.

Tablo ve kolon says byklkleri, n tanml blok bykl 32k ya karlarak arttrlabilir.
4.6) Tipik bir metin dosyasndaki veriyi saklamak iin ne kadar disk alan gereklidir?

Bir PostgreSQL veritaban, veriyi "flat" metin dosyasnda saklamak iin gereken alann 5 kat fazla disk alanna 
gereksinim duyabilir.

Her satrnda bir tamsay ve metin (text) ieren, 100.000 satrlk bir dosya dnn. Her satrn ortalama 20 byte 
olduunu farzedelim. Metin dosyas 2.8 MB olacaktr. Bu veriyi tutan PostgreSQL veritaban yaklak 6.4 MB yer 
kaplayacaktr.

  36 byte: Her bir satr bal (yaklak)
+ 24 byte: Bir tamsay (int) alan ve bir metin (text) alan 
+  4 byte: Sayfada tuple a pointer
----------------------------------------
  64 byte -> kayt bana

PostgreSQL'de veri sayfas (data page) bykl 8192 byte (8k)dr, dolaysyla:

8192 byte -> page bana
-------------------------  =  Her bir veritaban page' bana 128 satr (yaklak)
  Satr bana 64 byte
  
100000 veri satr
--------------------  =  782 veritaban sayfas
     128 satr

782 veritaban sayfas * sayfa bana 8192 byte = 6,406,144 bytes (6.4 MB)

Index'ler ok fazla yere gereksinim duymazlar, ama index'lenmi veriyi tutacaklarndan byk olabilirler.

NULL deerler bitmapler iinde tutulur; dolaysyla ok az yer kaplarlar.
4.7) Veritabannda hangi tablo ya da index'lerin tanmlandn nasl grebilirim?

psql, bu tr bilgileri gstermek iin, \ ile balayan bir ok komut sunmaktadr. \? komutu ile bu komutlar 
grebilirsiniz. Ayrca, bunlar aklayan ve pg_ ile balayan ok sayda sistem tablosu bulunmaktadr. Ayn zamanda, 
psql -l ile tm veritabanlarn listeyelebirsiniz.

Ayrca, pgsql/src/tutorial/syscat.source kodunu inceleyebilirsiniz. Bu dosya, veritaban sistem dosyalarndan bilgiyi 
almak iin gereksinim duyulan bir ok SELECT'leri gsterir.
4.8) Sorgularm cok yava, ya da index'lerimi kullanmyorlar. Neden?

Indexler her sorgu tarafndan otomatik olarak kullanlmazlar. Indexler eer bir tablonun bykl minimum bir 
byklkten fazla ise ve sorgu tablodaki satrlarn sadece kk bir yzdesini seiyorsa kullanlr. Bunun nedeni, 
index eriiminin neden olduu raslansal disk eriimi nin diskin ya da tablonun sral okunmasndan daha yavas 
olabilmesidir.

Bir index'in kullanlp kullanlmayacan belirlemek iin, PostgreSQL tablo hakkndaki istatistiklere gereksinmesi 
vardr. Bu istatistikler, VACUUM ANALYZE kullanlarak toplanrlar. Optimizer, istatistikleri kullanarak, tabloda ka 
satr olduunu ve bilir ve indexin kullanlp kullanlmayacana daha iyi karar verir. Istatistikler, ayn zamanda en 
uygun join srasn ve yntemini belirlemekte ok nemlidir. statistik toplanmas, tablo ierikleri deitike 
periyodik olarak yaplmaldr.

Indexler normalde ORDER BY sorgular ya da join ilemlerini gerekletirmek iin kullanlmazlar. Ak bir sralamay 
takip eden sral bir arama (sequential scan), byk bir tabloda index aramas yapmaktan genelde daha hzldr.
Ancak, ORDER BY ile birlemi LIMIT genellikle bir index kullanacaktr; nk tablonun sadece belirli bir miktar 
dndrlecektir. Aslnda, MAX() ve MIN() fonksiyonlarnn index kullanmamalarndan dolay, bu gibi deerleri ORDER BY 
ve LIMIT kullanarak da almak olasdr:

    SELECT col
    FROM tab
    ORDER BY col [ DESC ]
    LIMIT 1;

Eer optimizer'n sral arama yapmasnn yanl olduuna inanyorsanz, SET enable_seqscan TO 'off' kullann ve index 
kullanan aramalarn hala daha hzl olup olmadn grn.

LIKE ya da ~ gibi operatrler kullanyorsanz, index'ler sadece aadaki koullarda kullanlabilir:

    * Arama dizininin ba, dizinin ba ile balanmaldr. Yani,
          o LIKE sorgular % ile balamamaldr.
          o Dzenli ifade sorgular ^ ie balamamaldr.
    * Arama metni bir karakter snf ile balayamaz. rnek: [a-e]
    * ILIKE ve ~* gibi byk/kk harfe duyarsz aramalar index'lerden yararlanmazlar. Onun yerine, blm 4.12'de 
anlatlan fonksiyonel index'leri kullanabilirsiniz.
    * initdb srasnda ntanml C locale'i kullanlmaldr.

4.9) query-optimizer'n sorgularm nasl deerlendirdiini, ileme soktuunu nasl grebilirim?

EXPLAIN yardm sayfasna baknz.
4.10) R-tree index nedir?

R-tree index, uzaysal (spatial) verileri indexlemek iin kullanlr. Bir hash index, dizi aramalarnda (range search) 
kullanlamaz. B-tree index dizi aramalarnda sadece tek boyutlu almaktadr. R-tree, ok boyutlu veriyi destekler. 
rnein, eer bir R-tree index point veri tipi zerinde ina edililebilirse, sistem "select all points within a 
bounding rectangle" gibi sorgulara daha verimli yantlar verecektir.

Orijinal R-tree tasarmn aklayan belge:

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.

Bu belgeyi, Stonebraker'n "Readings in Database Systems" kitabnda bulabilirsiniz.

Gml R-tree indexleri poligon ve boxlar kullanabilir. Teorik olarak, R-tree indexlerin zelliklerini geniletmek bir 
miktar aba gerektirir ve bunun nasl yaplacana dair bir belgemiz henz bulunmamaktadr.
4.11) Genetic Query Optimizer nedir?

GEQO modl, Genetic Algorithm(GA) kullanlarak tablolar birletirildiinde sorgu optimizasyonunu hzlandrr.
4.12) Dzenli ifade (Regular Expression) aramalarn ve byk/kk harfe duyarsz aramalar nasl yapabilirim? Bu 
byk(kk harfe duyarl aramalar iin index'i nasl kullanabilirim?

~ operatr dzenli ifade elemesi ve ~* byk/kk harfe duyarsz dzenli ifade elemesi yapar. Byk/kk harfe 
duyarl olan LIKE'n byk/kk harfe duyarsz olan biimi ILIKE'tr ve PostgreSQL 7.1 srm ile birlikte gelmitir.

Byk-kk harfe duyarsz eitlik karlatrmalar aadaki gibi ifade edilir:

SELECT *
FROM tab
WHERE lower(col) = 'abc'
		

Bu standart bir index yaratmayacaktr. Ancak eer fonksiyonel bir index yaratrsanz; o kullanlacaktr:

CREATE INDEX tabindex on tab (lower(col));

4.13) Bir sorguda, bir alanin "NULL" olduunu nasl ortaya karabilirim?

Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz.
4.14) esitli karakter tipleri arasndaki farklar nelerdir?

Veri Tipi	     Ad              Not
--------------------------------------------------
VARCHAR(n)      varchar         boyut en byk uzunluu verir; sadece verilen kadar veri tutulur.
CHAR(n)         bpchar          belirtilen uzunlua kadar sonuna  boluk eklenir.
TEXT            text            uzunlukta herhangi bir st snr yoktur. 
BYTEA           bytea           variable-length byte array (null-byte safe)
"char"          char            bir karakter 
		

 adlar (internal name) sistem kataloglarn ve baz hata mesajlarn incelerken greceksiniz.

lk drt veri tipi "varlena" tipidir (yani, diskteki ilk 4 bayt uzunluktur; devam da veridir.) Dolaysyla, kullanlan 
gerek alan, belirtilen alandan biraz daha byktr. Ancak, bu veri tipleri, sktrlmaya tabi tutulabilir; 
dolaysyla disk alan beklenilenden kk olabilir. VARCHAR(n) bykl artabilen ama en byk uzunluu snrl olan 
verileri saklamak iin en uygun yntemdir. TEXT, 1 GB bykle kadar olan verileri tutmak iin kullanlr.

CHAR(n), ayn uzunluktaki dizilerin saklanmas iin kullanmr. CHAR(n) belirtilen uzunlua kadar boluk ile doldurur; 
ancak VARCHAR(n) sadece verilen karakterleri saklar. BYTEA binary veri saklamak iindir; ayrca "NULL" bayt ieren 
deerleri de saklar. Burada anlatlan  veri tipi de benzer baarm karakteristiklere sahiptir.
4.15.1) Nasl serial/otomatik artan (auto-incrementing) bir alan yaratabilirim?

PostgreSQL'de SERIAL veri tipi vardr. Bu veri tipi bir sequence ve kolon zerinde bir index yaratr.

rnek, aadaki sorgu:

CREATE TABLE person (
    id   SERIAL,
    name TEXT
);		
		

buna evrilir:

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 );		
		

Sequenceler hakknda daha fazla bilgi iin create_sequence yardm sayfasna bakabilirsiniz. Her satrn OID alann 
tekil bir say olarak alabilirsiniz. Ancak, veritabannzn dump'n alp yeniden yklerseniz, OID deerlerini 
koruyabilmek iin pg_dump'n -o parametresini ya da "COPY WITH OIDS" seeneini kullanmanz gerekecektir.
4.15.2) SERIAL giriinin degerini nasl alabilirim?

Bir yaklam, sequence nesnesindeki SERIAL deerini, veriyi girmeden nce nextval() ile alp, aldnz deeri 
kendinizin girmesidir. 4.15.1'deki rnek tabloyu kullanarak bir rnek verelim:

new_id = execute("SELECT nextval('person_id_seq')");

    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");

Dier sorgular iin new_id'de yeni deerin saklanmas gerekir. Otomatik olarak yaratlan SEQUENE nesnesinin ad, __seq 
eklinde olacaktr (< > iaretleri olmadan).

Alternatif olarak, atanm SERIAL deerini, deer girildikten sonra currval() fonksiyonu ile alabilirsiniz:

		execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
		new_id = execute("SELECT currval('person_id_seq')");	
		

Son olarak, n tanml deeri bulmak iin INSERT ifadesinden dnen OID deerini kullanabilirsiniz; ancak bu en az 
tanabilir zm olacaktr. Perl'de, Edmund Mergl'in DBD:Pg mdl ile birlikte DBI kullanarak, OID deeri 
$sth->execute() altrldktan sonra $sth->(pg_oid_status) ile alnabilir.
4.15.3) currval() ve nextval() dier kullanclara sorun yaratmaz m?

Hayr. curval(), tm kullanclar deil, backend tarafndan atanan geerli deeri dndrr.
4.15.4) Neden sequence saylar transaction ileminin iptalinden sonra yeniden kullanlyor? Neden sequence/SERIAL 
kolonumdaki saylarda atlamalar oluyor?

Uyumluluu arttrmak iin, sequence deerleri alan transaction'lara gerektii ekilde aktarlr ve transaction 
bitene kadar o deer kilitlenmez. Bu, iptal edilen transaction ilemleri nedeniyle boluklara neden olur.
4.16) OID nedir? TID nedir?

OIDler, tekil satr numaralarna PostgreSQL'in yantdr. PostgreSQL'de yaratlan her say, tekil bir OID alr. initdb 
ilemi srasnda yaratlan tm OID'ler 16384'ten kktr (backend/access/transam.h). Kullanclar tarafndan yaratlan 
tm OID'ler bu sayya eit ya da bu saydan byktr. Varsaylan durumda, tm bu OIDler sadece bir tablo ya da 
veritabannda deil, tm PostgreSQL kurulumunda tekildir.

PostgreSQL OIDleri, tablolar arasnda satrlar ilikilendirmek iin kendi i tablolarnda kullanr. Bu OIDler belirli 
kullanc satrlarn belirtmek iin kullanabilir ve join ilemlerinde kullanlr. OID deerlerini saklamak iin OID 
kolon tipini kullanmanz nerinir. Daha hzl bir eriim iin, OID alannda bir index yaratabilirsiniz.

OID'ler yeni satrlara, tm veritabanlar tarafnda kullanlan ortak bir alandan atanrlar. Eer OID'i baka bir deere 
eitlemek isterseniz ya da tablonun bir kopyasn orijinal OIDler ile karmak isterseniz, bu mmkndr:

			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';		
		

OIDler 4-bit tamsay olarak saklanrlar ve 4 milyarda overflow olacaktr. Kimse bu sayya ulatna dair bir bilgi 
iletmedi ve bu snr kimse bu snra ulamadan kaldracaz.

TIDler, belirli fiziksel satrlar block ve offset deerleri ile belirtmekte kullanlr. TIDler, satrlar deitiinde 
ya da yeniden yklendiinde deiirler. Index girdileri tarafndan fiziksel satrlar gstermek iin kullanlrlar.

4.17) PostgreSQL'de kullanlan baz terimlerin anlamlar nelerdir?

Kaynak kodun bir ksm ve eski belgeler, daha geni kullanm alan olan terimleri kullanrlar. Bunlarn bazlar:

    * table, relation, class
    * row, record, tuple
    * column, field, attribute
    * retrieve, select
    * replace, update
    * append, insert
    * OID, serial value
    * portal, cursor
    * range variable, table name, table alias

Genel veritaban terimleri, http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html 
adresinde bulunabilir.
4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasn alyorum?

Sisteminizde sanal belleinizi tketmi olabilirsiniz, ya da ekirdeiniz belli kaynaklar icin dk bir snra sahip 
olabilir. postmaster' balatmadan nce aadakileri deneyebilirsiniz:

ulimit -d 262144
limit datasize 256m		
		

Kabuunuza bal olarak, bunlardan sadece biri olumlu sonu verecektir, ama bu ilem veri segment snrnz 
arttracak, ve belki de sorgunuzun tamamlanmasn salayacaktr. Bu komut, varolan ileme (current process) ve komut 
altrldktan sonraki tm alt ilemlere uygulanr. Eer SQL istemcinizle, backend'in ok fazla veri dndrmesi 
nedeniyle bir sorun yayorsanz, bunu istemciyi balatmadan nce deneyiniz.
4.19) Hangi PostgreSQL srmn altrdm nasl grebilirim?

psql arabiriminde, select version(); yaznz.
4.20) Neden large-object ilemlerim, "invalid large obj descriptor" hatasn veriyor?

Large object ilemlerinizin ularna, yani lo_open ... lo_close komutlarnn evresine, BEGIN WORK ve COMMIT koymanz 
gerekmektedir;

u anda, PostgreSQL kurallar large objectleri transaction commit edildiinde kapatarak uygulamaktadr. Dolaysyla 
handle ile yaplacak ilk ey invalid large obj descriptor hatas ile sonulanacaktr.Dolaysyla alan kodunuz eer 
transaction kullanmazsanz hata mesajlar retecektir.

Eer ODBC gibi bir istemci arabirimi kullanyorsanz, auto-commit'i kapatmanz gerekebilir.
4.21) u andaki zaman ntanml deer olarak kabul eden How do I create a column that will default to the current 
time?

Alttakini kullanabilirsiniz:

CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
		

4.22) Neden IN kullanan subquery'lerim ok yavas?

7.4 srmnden nce, subqueryler. Eer subquery sadece birka satr ve outer query bol sayda satr dndryorsa, IN en 
hzlsdr. Sorgular hzlandrmak iin IN yerine EXISTS kullann:

SELECT *
    FROM tab
    WHERE col1 IN (SELECT col2 FROM TAB2)
		

sorgusunu, aadaki ile deitirin:

SELECT *
    FROM tab
    WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)		
		

Bu ilemin hzl olmas iin, subcol'un indexlenmi bir kolon olmas gerekmektedir.

7.4 srm ve sonrasnda, IN aslnda normal sorgularla ayn karmak join tekniklerini kullanr ve EXISTS'e tercih 
edilir.
4.23) Outer join ilemini nasl yapabilirim?

PostgreSQL outer joins islemlerini SQL standartlarn kullanarak gerekletirmektedir. Aada 2 rnek bulunmaktadr:

SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);		
		

ya da

SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);		
		

Bu zde sorgular t1.col' i t2.col'ye join ederler ve ayn zamanda t1'deki unjoined satrlar (t2'de elenmemi 
olanlarla) dndrrler. RIGHT JOIN t2'nin unjoined satrlarn ekleyecektir. Bir FULL join, elemi btn satrlar ve 
t1 ile t2'den tm balanmam (unjoined) satrlar alr. OUTER szc seimseldir ve LEFT, RIGHT ve FULL join 
ilemlerinde olduu kabul edilir. Sradan join ilemleri INNER JOIN olarak adlandrlr.

nceki srmlerde, OUTER JOINler UNION ve NOT IN kullanlarak simle edilebiliyordu. rnein, tab1 ve tab2'yi 
birletirirken, aadaki sorgu iki tablonun dtan balanmasn salar:

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		
		

4.24) Ayn andan birden fazla veritabannda nasl ilem yapabilirim?

Mevcut veritabannz dndaki baka bir veritabannz sorgulamanzn bir yolu bulunmamaktadr. Bunun nedeni, 
PostgreSQL'in veritabanna zel sistem kataloglar yklemesidir. Bu nedenle, cross-database bir sorgunun nasl 
davranacan kestirmek zordur.

contrib/dblink fonksiyon arlarn kullanarak cross-database sorgulara izin verir. Tabii ki, bir istemci deiik 
veritabanlarna ayn anda eriim salayabilir ve bilgiyi bu ekilde birletirebilir.

4.25) Bir fonksiyondan nasl oklu satr ya da kolon dndrebilirim?

7.3 srmnde, bir fonksiyondan kolaylkla oklu satr ya da stun dndrebilirsiniz. 
(http://techdocs.postgresql.org/guides/SetReturningFunctions)

4.26) Neden Pl/PgSQL fonksiyonlar iinden gvenli bir ekilde tablo yaratma/kaldrma ilemlerini yapamyoruz?

PL/PgSQL fonksiyon ierikleri cache'ler. Bunun istenmeyen bir taraf, eer bir PL/PgSQL fonksiyonu geici bir tabloya 
eriiyorsa ve bu tablo ileride kaldrlp yeniden oluturulduktan sonra fonksiyon yeniden arlrsa, fonksiyon 
almayacaktr; nk cache'lenmi fonksiyon hala eski geici tabloyu gsteriyor olacaktr. zm, geici tablo 
eriimleri iin PL/PgSQL'de EXECUTE kullanmaktr. Bu, sorgunun her seferinde yeniden ilenmesini salayacaktr.

4.27) Hangi ifreleme seenekleri bulunmaktadr?

    * contrib/pgcrypto SQL sorgularnda kullanlabilmesi iin ifreleme fonksiyonlar iermektedir.
    * stemciden sunucuya iletiimi ifrelemek iin, sunucuda ssl seenei postgresql.conf iinde ak olmaldr. 
Ayrca,pg_hba.conf dosyas iinde host ya da hostssl kayd mutlaka olmaldr ve istemci sslmode kapatlmamaldr. (Ayn 
zamanda,PostgreSQL'in doal SSL balantlar dnda ssh ya da ssl gibi 3.parti ifrelenmi veri iletimi de mmkndr.)
    * Veritaban kullanc ad ve ifreleri 7.3 srm ile birlikte otomatik olarak ifrelenirler. nceki srmlerde, 
postgresql.conf iindeki PASSWORD_ENCRYPTION seeneini aktif hale getirmeniz gerekmektedir.
    * Sunucunun kendisini ifreli dosya sistemi zerinde altrabilirsiniz.

PostgreSQL zelliklerini Geniletmek

5.1) Kullanc-tanml bir fonksiyon yazdm. psql'de altrdm zaman neden core dump ediyor?

Sorunun nedeni birden fazla ey olabilir. Kullanc-tanml fonksiyonunuzu stand-alone bir programda altrmay 
deneyiniz.

5.2) PostgreSQL'e nasl yeni tipler/fonksiyonlar ekleyebilirim?

almalarnz pgsql-hackers e-posta listesine gnderiniz. Kodunuz incelendikten sonra /contrib dizinine konacaktr.

5.3) Bir tuple dondrmek icin bir C fonksiyonunu nasil yazarm?

PostgreSQL 7.3 srm ile birlikte, C, PL/PgSQL ve SQL kullanlarak tablo-dndren fonksiyonlar tamamen 
desteklenmektedir. Ayrntl bilgi iin PostgreSQL 7.3.2 Kullanc Rehberi'ne bakabilrisiniz. Bir rnei 
contrib/tablefunc iinde bulabilirsiniz.

5.4) Bir kaynak dosyasnda deiiklik yaptm. Yeniden derlememe ramen deiiklik geerli olmuyor. Neden?

Makefile'lar include dosyalar iin tam bir bamllk iermezler. ncelikle make clean, ardndan da baska bir make 
ilemi yapmanz gerekir. GCC kullanyorsanz, configure betiinin --enable-depend seeneini, derleyicinin 
bamllklar otomatik olarak hesaplamas iin kullanabilirsiniz.

