From f3f45c87d23b800913fb8ea88fe2d713f6b9dd74 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 21 Jul 2009 19:20:33 +0000 Subject: Remove translated FAQs The English FAQ has been moved to the wiki, so the translated versions should have been removed at that point as well. The FAQ_MINGW.html should have been removed when the platform FAQs were integrated into the documentation (or earlier). applied to both 8.4 and 8.5 --- doc/src/FAQ/FAQ_turkish.html | 1019 ------------------------------------------ 1 file changed, 1019 deletions(-) delete mode 100644 doc/src/FAQ/FAQ_turkish.html (limited to 'doc/src/FAQ/FAQ_turkish.html') diff --git a/doc/src/FAQ/FAQ_turkish.html b/doc/src/FAQ/FAQ_turkish.html deleted file mode 100644 index 6327029c75d..00000000000 --- a/doc/src/FAQ/FAQ_turkish.html +++ /dev/null @@ -1,1019 +0,0 @@ - - - - - PostgreSQL Sıkça Sorulan Sorular - Türkçe - - - - -

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?

- -

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:

- - - -

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ı:

- -

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?

- - -
- -

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.

- - -- cgit v1.2.3