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