Běh & Instalace nativní PostgreSQL ve Windows FAQ Naposledy aktualizováno: $Date: 2005/01/22 21:25:31 $ Aktuální správce: Dave Page (dpage@postgresql.org) Nejnovější verzi tohoto dokumentu naleznete na adrese http://pginstaller.projects.postgresql.org/FAQ_windows.html FAQ ohledně samotného překladu nativní PostgreSQL ve Windows je na http://www.postgresql.org/files/documentation/faqs/FAQ_MINGW.html Tento dokument se týká pouze nativního přenesení PostgreSQL pro Windows. Ještě existuje port PostgreSQL do prostředí Cygwin, který má vlastní FAQ na adrese: http://www.postgresql.org/files/documentation/faqs/text/FAQ_CYGWIN Překlad: Pavel Stěhule (stehule@kix.fsv.cvut.cz) Podporované platformy ===================== 1.1) Na kterých verzích Windows poběží PostgreSQL? PostgreSQL je podporována ma Windows 2000, XP a 2003. Zatím byla testována pouze na 32 bitových systémech. 1.2) Slyšel jsem, že NT4 jsou podporovány. Je to pravda? Ačkoliv nejsou oficiálně podporovány, PostgreSQL poběží na Windows NT4 s několika drobnými problémy: o Instalátor nefunguje korektně, je nutný manuální překlad a instalace. o PostgreSQL používá vlastnost 'reparse points' souborového systému NTFS k implemtaci jmenných prostorů (tablespaces). tato vlastnost není na NT4 dostupná, a tudíž i jmenné prostory nelze na NT4 používat. o Windows NT4 nemají standardně příkaz runas.exe. Tím je obtížnější spuštění PostgreSQL z administrátorského účtu. Dále je třeba zmínit, že PostgreSQL nebyla na NT4 příliš testována. 1.3) A co Windows 95/96/ME? PostgreSQL vyžaduje funkcionalitu, která na těchto systémech není dostupná a nepoběží na nich. Pokud potřebujete spouštět PostgreSQL na těchto platformách, můžete zkusit port Cygwin, kde je základní podpora platforem 9x. Instalace ========= 2.1) Co je potřeba pro instalaci PostgreSQL na Windows? Nejjednodušší instalace PostgreSQL je instalace z Windows Installer package (z instalačního souboru) dostupného na PostgreSQL FTP archivu a jeho zrcadlech. Tento balík obsahuje přeloženou verzi PostgreSQL včetně aplikace pgAdmin (GUI administrační rozhraní), Vámi vybrané rozšiřující (contrib) moduly a některý z procedurálních jazyků. Instalátor vyžaduje Windows 2000, XP, nebo 2003, kde je k dispozici služba Windows Installer. Instalátor vytvoří, pokud je třeba, pro službu účet a inicializuje databázový klastr. Zde si můžete stáhnout instalátor a post-release hotfixy naleznete zde. 2.2) Co je potřeba pro překlad PostgreSQL ze zdrojových kódů? FAQ (Překlad na Windows) na adrese http://www.postgresql.org/files/documentation/faqs/FAQ_MINGW.html obsahuje všechny podrobnosti překladu PostgreSQL na systémech Windows. 2.3) Proč PostgreSQL běží pouze pod neadministrátorským účtem? Když hacker, díky chybě aplikace, získá přístup do počítače, získá oprávnění účtu pod kterým aplikace běží. Ačkoliv nevíme o žádných chybách PostgreSQL, trváme na používání neadministrátorského účtu, tak abychom minimalizovali možné škody, kterých je hacker schopen pokud najde a využije chybu v PostgreSQL k napadnutí systému. Používání speciálních účtů je běžná praxe ve světě Unix systémů, která se prosazuje i ve světě Windows, tak jak firma Microsoft, i další dodavatelé, zvyšuje bezpečnost svých systémů. 2.4) Lze nainstalovat PostgreSQL na FAT oddíl? Hlavní prioritou PostgreSQL je integrita dat. Souborové systémy FAT a FAT32 jednoduše nejsou schopny nabídnout požadovanou spolehlivost. Navíc, neexistence bezpečnostních prvků neumožňuje zabezpečení datových souborů před neautorizovanou modifikací. Konečně, PostgreSQL používá vlastnost 'reparse points' pro implementaci jmenných prostorů. Tato vlastnost není dostupná na oddílech FAT. Souborový systém NTFS je žurnálovací souborový systém s mnohem lepší stabilitou a možností obnovení po pádu. Navíc obsahuje úplný systém řízení přístupových práv a nabízí funkci 'reparse points' použitou v PostgreSQL. Z těchto důvodů instalátor PostgreSQL neprovede inicializaci databázového klastru na jiném než NTFS oddíle. Server a pomocné aplikace mohou být nainstalováný na libovolný souborový systém, který je k dispozici. Existují systémy (např. vývojářská PC), kde jsou k dispozici pouze oddíly typu FAT. Potom, nainstalujte PostgreSQL, ale bez automatické inicializace tb. klastru. Po dokončení instalace, ručně spusťe příkaz 'initdb.exe' na FAT oddílu. Toto řešení je úkor spolehlivosti a bezpečnosti, a jakýkoliv pokus na vytvoření jmenného prostoru skončí neúspěchem. 2.5) Jaká práva k souborovému systému PostgreSQL potřebuje? Účet pod kterým běží služba PostgreSQL vyžaduje právo ke čtení ke všem podadresářům aplikačního adresáře PostgreSQL. Právo zápisu je nezbytné pouze k adresáři s samotnými daty. Adresáře obsahující binární data by něměly dovolovat jakkýkoliv způsob přístupu než čtení (práva ke všem adresářům v instalačním adresáři nastaví instalátor, takže dokud nic nezměníte, neměly by být problémy). PostgreSQL vyžaduje práva ke čtení systémových DLL souborů jako např. kernel32.dll, user32.dll (a dalších), která jsou však obyčejně přednastavena. Občas může být nutné odemknout binární soubor CMD.EXE. Pokud spouštíte PostgreSQL na víceuživatelském systému, měli byste odstranit práva všem neadministrátorským účtům k adresářům PostgreSQL. Žádný uživatel nikdy nepotřebuje práva k souborům PostgreSQL, veškerá komunikace probíhá skrze libpq spojení. Přímý přístup k datovým souborům může vést k odkrytí údajů v databázi případně nestabilitě systému! 2.6) Proč nemohu vybrat Unicode jako kódování? windows nepodporuje úplný rozsah kódování Unicode. Instalátor tedy povolí pouze ta kódování, která jsou podporována jak PostgreSQL, tak i Windows. Problém popsal Aleksander Kmetec v konferenci pgsql-hackers: PostgreSQL používá některé systémové funkce pro operace s řetězci. Proto musí OS podporovat stejné kódování jaké je použito pro databázi. Naneštěstí, Windows nepodporuje některá kódování, která jsou dostupná na straně serveru PostgreSQL. Pro názornost uvedu malý příklad: Mám UNICODE databázi (konkrétně UTF8). V mém případě odpovídající národní podpora (pro initdb) je sl_SI.utf8 (na Linuxu) nebo Slovenian_Slovenia.65001 (na Windows). 65001 je kódovací stránka Windows pro utf8, až na to, že to není vlastně skutečná a správná kódovací stránka. Dokument, který byl původně na adrese http://www.sharmahd.com/tm/codepages.html, nyní ke vší smůle zrušený, konstatuje, že: 65000 (UTF-7) a 65001 (UTF-8) jsou pseudo kódovací stránky. Neexistují k nim korespondující NLS soubory. Identifikátor kódové stránky může být použit pouze ve API funkcích WideCharToMultiByte() a MultiByteToWideChar(). Což znamená, že UPPER(), LOWER() a ORDER BY nebudou korektně pracovat v databázích v kódování UNICODE. V současné době nelze spustit initdb s národní podporou, které používá kódování 65001. Malou úpravou initdb jsem nastavil LC_COLLATE na Slovenian_Slovenia.65001. Přez toto nastavení třídění nebylo korektní, což je pochopitelné, viz zmíněné omezení. Testováním jsem se dostal k následujícímu seznamu kódování, které jsou podporovány PG, ale nikde není zmíňka, že by byly podporovány Windows: o UTF8 o EUC_CN o EUC_TW o LATIN6 (ISO 8859-10/ECMA 144) o LATIN7 (ISO 8859-13) o LATIN8 (ISO-8859-14) o LATIN10 (ISO 8859-16/ASRO SR 14111). 2.7) Instaloval jsem jiný než anglický jazyk, přesto všechna hlášení jsou v angličtině! Zvolený jazyk během instalace je platný pouze pro instalátor. Pokud nechcete dostávat hlášení v angličtině, nainstalujte si Natural Language Support. Pak v postgresql.conf parametrem lc_messages určete jazyk, který požadujete. Časté chyby při instalaci ========================= 3.1) PostgreSQL a/nebo instalátor při startu zhavaruje, nedokončí nebo zůstane viset Nejčastější příčinnou je antivirus nebo firewall. Pokud máte nějaký firewall na vašem počítači nainstalovaný, zkuste jej pozastavit nebo odinstalovat. Pokud máte nejaký antivirus, zkuste jej nastavit tak, že nekontroluje adreáře používané PostgreSQL. Pokud to nepomůže, je dost možné, že bude nezbytné tento software úplně odinstalovat z vašeho počítače. Specifické problémy byly hlášeny ve spojení s antivirem nod32. Pokud jej používáte, přidejte 'postmaster.exe' do seznamu vyloučených procesů (excluded processes). Tato volba je v rozšířených nastaveních (advenced option). Mělo by to pomoci. Specifické problémy byly dále hlášeny s antiviry McAfee a Panda a monitorovacím software NetLimiter. Ačkoliv někteří uživatelé používají PostgreSQL dohromady s tímto softwarem, neexistuje univerzální řešení problémů. Zdá se, že problémy jsou instalace od instalace různé, a skutečně je někdy nezbytná odinstalace. Další známý problém se objeví pokud používáte cygwin a systémová proměnná PATH obsahuje cestu k cygwin\bin adresáři. Zde jsou DLL soubory interpretovaných jazyků (TCL, perl, python) obsahující chybu, která může být příčinou pádu nebo ztuhnutí instalátoru nebo nainstalované verzi PostgreSQL. Před spuštěním instalátoru odtraňte cygwin\bin z PATH proměnné! 3.2) Instalátor hlásí, že specifikovaný účet je administrátor, ale to není! Pravděpodobně, specifikovaný účet je administrátor nebo power user, aniž by si toho byl vědom. Instalátor ověřuje členství účtu ve skupinách Administrator a Power Users. Podívejte se, kdo všechno je členem skupiny Administrators. Pak zkontrolujte všechny skupiny (lokální nebo doménové), které jsou také členy skupiny Administrators, a všechny jejich skupiny, atd. PostgreSQL kontroluje všechny úrovně vnořených skupin. 3.3) Dostal jsem chybu "the user has not been granted the requested logon type at this computer" nebo jí podobnou Ověřte si, že účet pro PostgreSQL má práva "Log on as a service" a "Log on locally". "Log on locally" je nutné pouze pro instalaci, a po instalaci může být odstraněno, pokud by to vyžadovala bezpečnostní politika (Práva se přidělují a odebírají v "Local Security Policy" MMC snapinu. "Log on locally" je výchozí a "Log on as a service" bude obyčejně přiděleno instalátorem). Pokud stále zůstávají problémy, povolte auditing (také v "Local Security Policy" snapinu) a dejte vědět, která další práva byla u vás byla nezbytná. Poznámka: Pokud je váš počítač v doméně, pak nastavení bezpečnostní politiky může být řízeno na úrovni domény použitím Group Policy. 3.4) Instalace/spouštění initdb skončilo chybou permission error Zkontrolujte si, že účet pod kterým je spouštěná služba PostgreSQL má skutečně přístup do instalačního adreáře a všech jeho rodičovských adreářů. Instalátor nastaví práva pouze v instalačním adresáři, o rodiče se nestará. Viz otázka 2.5 na seznam potřebných práv. 3.5) Dostal jsem chybové hlášení, které říká, že PostgreSQL nemůže být instalováno z Terminal Services Bohužel. PostgreSQL backend nemůže běžet z TS. Při inicializaci klastru instalátor musí spustit backend. Instalace tedy musí být spuštěna z konzole. Pokud používáte Windows Server 2003, použijte remote access místo administrátorského přihlášení (administrative session). Spusťe Remote Desktop Connection spuštěním příkazu mstsc /console. Připojte se jako obvykle. Tento postup zamkne lokální konzoli serveru a umožní vám řízení sezení. Potom by se PostgreSQL měl nainstalovat bezproblémů. 3.6) Změnil jsem adresář. Přesto se PostgreSQL nainstaloval do přednastaveného adresáře. Zkontrolujte si, že jste změnili adresář kořene PostgreSQL. Instalátor PostgreSQL umožňuje změnu adreáře pro každý individuální prvek. Pokud změníte kořen ("PostgreSQL") pak všechny závislé prvky (např. "Databázový server") automaticky tuto hodnotu podědí, ale když modifikujete závislý prvek, pak zbytek instalace použije výchozí hodnotu.