PostgreSQL'i doğal olarak Windows altında çalıştırma ve kurma SSS

Son güncelleme: 2005/02/05 15:40:26 $

Current maintainer: Dave Page (dpage@postgresql.org)

Çevirenler : Devrim Gündüz (devrim@tdmsoft.com)
Nicolai Tufar (ntufar@tdmsoft.com)

Bu belgenin en güncel hali, http://pginstaller.projects.postgresql.org/FAQ_windows.html ve http://www.gunduz.org/seminer/pg/FAQ_windows_turkish.html adreslerinde görülebilir.

PostgreSQL'i doğal olarak Windows altında derlemek için SSS'yi http://www.postgresql.org/files/documentation/faqs/FAQ_MINGW.html adresinde bulabilirsiniz.

Bu SSS sadece PostgreSQL'in doğal Windows sürümü ile ilgilidir. Aynı zamanda, kendi SSS'si olan bir Cygwin portu da bulunmaktadır: http://www.postgresql.org/files/documentation/faqs/text/FAQ_CYGWIN.


Desteklenen platformlar

1.1) PostgreSQL Windows'un hangi sürümlerinde çalışmaktadır?
1.2) NT4'ün desteklendiğini duydum. Doğru mu?
1.3) Ya Windows 95/98/ME?

Kurulum

2.1) PostgreSQL Windows sürümünü kurmak için neler gereklidir?
2.2) PostgreSQL 'i kaynak kodundan derlemek için neler gereklidir?
2.3) PostgreSQL'i çalıştırmak için neden yönetici (administrator) olmayan bir kullanıcıya gereksinmem var?
2.4) PostgreSQL'i FAT disk bölümüne kurabilir miyim?
2.5) PostgreSQL hangi dosya sistemleri izinlere gereksinim duyar?
2.6) Dil kodlaması için neden Unicode'u seçemiyorum?
2.7) İngilizce dışındaki bir dilde kurdum; ama tüm iletiler İngilizce gözüküyor!

Ortak kurulum hataları

3.1) PostgreSQL ve/ve ya kurulum programı başlancıçta çakılıyor, başlarken hata veriyor ya da başlangıçta duraklıyor
3.2) Seçtiğim kullanıcı hesabı administrator olmadığı halde, kurulum onun administrator olduğunu söylüyor!
3.3) "the user has not been granted the requested logon type at this computer" hatasını ya da benzerini alıyorum
3.4) initdb'yi kurarken/çalıştırırken izinlerle ilgili hatalar alıyorum
3.5) PostgreSQL'in Terminal Servisleri oturumundan kurulamayacağına dair bir hata alıyorum.
3.6) Dizini değiştirdim ama PostgreSQL yine de öntanımlı dizine kuruldu


Desteklenen Platformlar

1.1) PostgreSQL Windows'un hangi sürümlerinde çalışmaktadır?

PostgreSQL Windows 2000, XP ve 2003 üzerinde desteklenmektedir. Bu yazının yazıldığı ana kadar sadece 32 bit sistemlerde denenmiştir.

1.2) NT4'ün desteklendiğini duydum. Doğru mu?

Resmi olarak desteklenmemekle beraber, PostgreSQL aşağıdaki birkaç küçük konuya dikkat edildiğinde Windows NT üzerinde çalışabilir:

Ayrıca bilinmelidir ki NT4 üzerinde çok az deneme yapılmıştır.

1.3) Ya Windows 95/98/ME?

PostgreSQL bu platformlarda olmayan özelliklere gereksinim duyar ve bu platformlarda çalışmayacaktır. Eğer PostgreSQL'e bu platformlarda çalıştırmanız gerekiyorsa, Cygwin belgesine bakabilirsiniz. Bu belgede 9x platformları için temel destek bulunmaktadır.

Kurulum

2.1) PostgreSQL Windows sürümünü kurmak için neler gereklidir?

PostgreSQL'i Windows üzerine kurmak için en kolay yol, PostgreSQL FTP sitesi ve yansılarından indirebileceğiniz Windows Kurulum programıdır (pginstaller). Bu yazılım, PostgreSQL'in daha önceden derlenmiş bir sürümünü, pgAdmin'i (grafiksel yönetim aracı), ek özellikler getiren 'contrib' modüllerinden bir bölümünü ve bazı yordamsal dilleri kurar.

Kurulum programımı kurmak için Windows Installer Service yüklü Windows 2000, XP ya da 2003 çalışan bir bilgisayar gereklidir. Bu kurulum programı, eğer istenirse bir servis hesabı yaratacaktır ve veritabanı kümesini ilklendirecektir.

Kurulum programı buradan, ve sürüm sonrası yamalar da buradan indirilebilir.

2.2) PostgreSQL 'i kaynak kodundan derlemek için neler gereklidir?

http://www.postgresql.org/files/documentation/faqs/FAQ_MINGW.html adresindeki windows derleme SSS'si PostgreSQL kaynak kodunun Windows sistemler üzerinde derlenmesi ile ilgili tüm ayrıntıları içermektedir.

2.3) PostgreSQL'i çalıştırmak için neden yönetici (administrator) olmayan bir kullanıcıya gereksinmem var?

Bir saldırgan bir paketteki bir yazılımdaki açığı kullanıp bir bilgisayara giriş izni kazanırsa, o servisin çalıştırıldığı kullanıcı hesabının haklarını kazanır. PostgreSQL'de bu şekilde bir açık bilinmemekle beraber, bir saldırganın PostgreSQL'de bulabileceği bir açık nedeniyle verebileceği zararın en az olabilmesi için yönetici olmayan bir hesabın kullanılmasını istiyoruz.

Bu Unix dünyasında yaygın olarak yapılan bir uygulamadır ve Microsoft ve diğer üreticilerin kendi sistemlerindeki güvenliği arttırabilmek için yapmaya başladıkları çalışma ile Windows dünyasında da standart bir uygulama olmaya başlamıştır.

2.4) PostgreSQL'i FAT disk bölümüne kurabilir miyim?

PostgreSQL'in bir numaralı önceliği verinin bütünlüğüdür. FAT ve FAT32 dosya sistemleri buna izin verecek güvenilirliği sunmazlar. Ek olarak, FAT'in sunamadığı birtakım güvenlik özellikleri veri dosyalarını yetkisiz düzenlemeye karşı korumasız bırakır. Son olarak da PostgreSQL tablespaceler için 'reparse points' özelliğini kullanmaktadır. Bu özellik FAT dosya sisteminde bulunmamaktadır.

NTFS dosya sistemi hata kurtarma ve daha fazla güvenilirlik özelliklerini barındıran bir journalled dosya sistemidir. Ek olarak, gelişmiş bir erişim kontrol sistemi bulunmaktadır ve PostgreSQL tarafından kullanılan 'reparse point' özelliğini barındırmaktadır.

Bu nedenle, PostgreSQL kurulum paketi NTFS dışındaki dosya sistemlerinde PostgreSQL veritabanı kümesini ilklendirmeyecektir. Sunucu ve yardımcı programlar farklı disk bölümlerine kurulabilirler.

Ancak, geliştirici PC'leri gibi bazı PC'lerde FAT disk bölümlerinin tek ve zorunlu bir seçim olduğu gözlemlenmektedir. Bu durumlarda, PostgreSQL'i normal ama veritabanını ilklendirmeden basitçe kurabilirsiniz. Kurulum bittikten sonra, 'initdb.exe' yazılımını FAT disk bölümünde elle çalıştırın . Güvenlik ve kararlılık zarar görebilir; ayrıca tüm tablespace yaratma işlemleri başarısız olacaktır.

2.5 PostgreSQL hangi dosya sistemleri izinlere gereksinim duyar?

PostgreSQL servis hesabı servis dizinine kadarki tüm dizinler için okuma iznine gereksinim duyar. Sadece veri dizini içinse yazma iznine gereksinim duyar. Özel olarak, ikili (binary) dosyaların olduğu dizinlere okuma izninden başka izin verilmemelidir. (Kurulum dizininin altındaki tüm dizinler kurulum programı tarafından ayarlanır; dolayısıyla birşey değiştirmediğiniz sürece, bununla ilgili bir sorununuz olmamalı).

PostgreSQL aynı zamanda kernel32.dll ve user32.dll gibi sistem DLL dosyalarında ve CMD.EXE ikili dosyasında okuma iznine gereksinim duyar. Bu izinler normalde öntanımlı olarak verilmiştir; ancak bazı senaryolarda bu dosyalar kilitlenmiş olabilir ve açılmaları gerekebilir.

Eğer PostgreSQL'i çoklu kullanıcılı bir ortamda çalıştırıyorsanız, PostgreSQL dizinlerinden yönetici olmayan tüm kullanıcıların izinlerini silmeniz gereklidir. Hiçbir kullanıcı hiçbir zaman PostgreSQL dosyaları üzerinde izinlere gereksinim duymaz -- tüm iletişim libpq bağlantısı aracılığı ile yapılır. Veri dosyalarına direk erişim bilgilerin açığa çıkmasına ve sistemin kararsız hale gelmesine neden olabilir!

2.6) Dil kodlaması için neden Unicode'u seçemiyorum?

Unicode Windows üzerinde düzgün olarak desteklenmez ve bu nedenle kullanılamaz. Kurulum programı PostgreSQL ve Windows sürümünüz tarafından aynı anda desteklenmeyen bir dil kodlamasının seçilmesine izin vermeyecektir.

Unicode sorunu Aleksander Kmetec tarafından pgsql-hackers e-posta listesine atılan bir iletide açıklanmıştır:

Because Postgres relies on the operating system for some string related functions, the OS needs to support the same encoding as the one that is used as the database encoding. Unfortunately, Windows does not support some encodings that are available as server-side encodings for PG.

Here is a short example in case the previous paragraph doesn't make much sense: with a UNICODE database (actually UTF8) you need to use a compatible locale when running initdb; in my case that's "sl_SI.utf8" (on Linux) or "Slovenian_Slovenia.65001" (on Windows).

65001 is Windows codepage number for utf8; except it's not a really a valid codepage. The document originally at http://www.sharmahd.com/tm/codepages.html, but unfortunately now removed, stated that:

"65000 (UTF-7) and 65001 (UTF-8) are pseudo codepages. There are no corresponding NLS files. The code page IDs can only be used with WideCharToMultiByte( ) and MultiByteToWideChar( ) API calls."

This means that UPPER(), LOWER() and ORDER BY do not work correctly for unicode databases. Currently it's not even possible to run initdb with a locale which uses 65001 encoding. A small change to initdb enabled me to set LC_COLLATE to Slovenian_Slovenia.65001, but the sort order was still badly messed up, which makes sense considering the above quote.

After some checking I came up with this list of encodings which are supported by PG, but not mentioned anywhere as supported by Windows:

2.7) İngilizce dışındaki bir dilde kurdum; ama tüm iletiler İngilizce gözüküyor!

Kurulum sırasında yapılan dil seçimi sadece kurulum sırasında hangi dilin kullanılacağını belirtir. Kurulu ürünün iletilerinin dilini değiştirmek için, Doğal dil desteği(Naturanl language support) özelliğinin kurulu olduğuna emin olun. Ardından postgresql.conf dosyanızı düzenleyin ve lc_messages parametresinin değerini istediğiniz dile değiştirin.

Ortak kurulum hataları

3.1) PostgreSQL ve/ve ya kurulum programı başlancıçta çakılıyor, başlarken hata veriyor ya da başlangıçta duraklıyor

Bunun genel nedenleri, antivirüs yazılımları ve güvenlik duvarlarıdır. Eğer makinanızda herhangi bir güvenlik duvarı yazılımı kurulu ise ya bunu devre dışı bırakmayı ya da kaldırmayı deneyin. Eğen antivirüs yazılımı kurulu ise, PostgreSQL tarafından kullanılan dizinler için yazılımı mutlaka devre dışı bırakmalısınız. Eğer bu yeterli olmazsa yazılımı bilgisayarınızdan tamamen kaldırmanız gerekebilir.

nod32 antivirüs yazılımı ile bazı sorunlar bildirilmiştir. Eğer bu ürünü kullanıyorsanız, "postmaster.exe" dosyasını "gelişmiş seçenekler (advanced options)" bölümünü kullanarak kontrol edilmeyecek süerçlerin arasına (excluded processes) alın. Bu, sorunu düzeltebilmek için bildirilmiştir.

Ayrıca McAfee ve Panda antivirüs yazılımı ile NetLimiter ağ denetleme yazılımı ile bazı sorunların çıktını raporlanmıştır. Bu yazılımları ile PostgreSQL kurulumu ve çalıştırılması mümkün iken bunu yapmak için tavsiye edilen yöntem yoktur. Bazı durumlarda, bu yazılımlar sitemde aktif iken, PostgreSQL kurulur ancak çalışmaz. Bazı dırımlarda PostgreSQL'in yeniden kurulması gerekir.

Ayrıca cygwin kurulmuş ve cygwin\bin klasörün sistemin PATH ortam değişkeninde bulunması PostgreSQL'in düzgün çalışmamasına yol açabilir. Cygwin klasöründe, PostgreSQL'in düzgün kurulmasını engelleyecek betik dilleri (TCL, perl, python) ile ilgili DLL gosyaları var. Bu dosyalar, kurulumun başarısız olması veya PostgreSQL'in düzgün çalışmamasına yol açabilir. Kuruluma başlamadan önce sistem PATH değişkeninden cygwin\bin klasörünü kaldırın!

3.2) Seçtiğim kullanıcı hesabı administrator olmadığı halde, kurulum onun administrator olduğunu söylüyor!

Büyük itimalle belirttiğiniz kullanıcı hesabı haberiniz olmadan Administrator veya Power User haklarına sahiptir. PostgreSQL kurulumu hesabın Administrator veya Power User grubuna dahil olup olmadığını tespit ediyor. Local Users ve Groups arayüzünden Administrators grubunun üyeleri inceleyin. Sonra, diğer (domain veya yerel) gruplarına bakın ve Administrators grubuna ait hesapları tespit edin. PostgreSQL kurulumu tüm alt gruplarıı da kontrol ediyor.

3.3) "the user has not been granted the requested logon type at this computer" hatasını ya da benzerini alıyorum

PostgreSQL kurulumunda belirttiğiniz kullanıcının "Log on as a service" ve "Log on locally" haklarına sahip olup olmadığını kontrol edin. "Log on locally" izni sadece kurulum esnasında gerekli, kurulum bittikten sonra güvenlik kuralları bunu gerektiriyorsa kaldırılabilir. (Haklar, "Local Security Policy" MMC ekranından verilir ve kaldırılır. "Log on locally" hakkı otomatik veriliyor, "Log on as a service" hakkı ise PostgreSQL kurulumu tarafından verilmektedir).

Bunları yaptıktan sonar sorunu hala yaşıyorsanız, auditing özelliği etkinleştirin ("Local Security Policy" ekranında) ve kurulumunuzda başka hangi hakların istenildiği bize haber verin.

Bilgisayarınız domain üyesi ise, yukarıda belirtilen güvenlik ayarları Group Policy kullanılarak domain düzeyinde ayarlamanız gerekiyor.

3.4) initdb'yi kurarken/çalıştırırken izinlerle ilgili hatalar alıyorum.

PostgreSQL'in kullanacağı kullanıcının, diskin ana dizininden kurulum yapılacak dizinine kadar tüm dizinlerine erişim haklarına sahip olup olmadığını kontrol edin. PostgreSQL kurulumu, yazılımın kurulacağı klasörüne gereken erişim haklarını verecek ancak üst klasörlerine dokunmayacaktır. Gerekli eriğim haklarının listesi için 2.5 sorusuna bakın.

3.5) PostgreSQL'in Terminal Servisleri oturumundan kurulamayacağına dair bir hata alıyorum.

Bu ne yazık kı böyledir. PostgreSQL backend'i TS oturumundan çalışmayacaktır ve initdb'nin çalıştırılması için kendi başına çalışan bir backendden başlamalıdır. Bu nedenle, kurulum konsoldan yapılmalıdır. Eğer Windows Server 2003 kullanıyorsanız, konsola uzaktan ve sadece yönetici olmayan bir şekilde erişim sağlayabileceğinizi unutmayın. Bunu yapmak için, mstsc /console komutu ile Uzak Masaüstü Bağlantısı'nı çalıştırın ve her zamanki gibi bağlanın. Bu, sunucunun yerel konsolunu kilitleyecek ve size o oturumda kontrolü verecektir. Bu senaryoda PostgreSQL düzgün şekilde kurulacaktır.

3.6) Dizini değiştirdim ama PostgreSQL yine de öntanımlı dizine kuruldu

root özellikli dizini değiştirdiğinize emin olunuz. PostgreSQL kurulum programı her bir tekil özellik için dizinin değiştirilmesine izin verir. Kök özelliği ("PostgreSQL") değiştirirseniz, herhangi bir alt özellik ("Veritabanı Sunucusu" gibi) öntanımlı olarak bu değeri üzerine alacaktır, ama eğer bu değişikliği sadece bir alt özellik için yaparsanız, o zaman kurulumumn geri kalanı öntanımlı dizinde kalacaktır.