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