summaryrefslogtreecommitdiff
path: root/doc/FAQ_turkish
diff options
context:
space:
mode:
Diffstat (limited to 'doc/FAQ_turkish')
-rw-r--r--doc/FAQ_turkish1192
1 files changed, 0 insertions, 1192 deletions
diff --git a/doc/FAQ_turkish b/doc/FAQ_turkish
deleted file mode 100644
index d1c886d2a91..00000000000
--- a/doc/FAQ_turkish
+++ /dev/null
@@ -1,1192 +0,0 @@
-
- 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-2009, 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.