diff --git a/doc/FAQ_czeck b/doc/FAQ_czeck new file mode 100644 index 0000000000..1fd6627b8a --- /dev/null +++ b/doc/FAQ_czeck @@ -0,0 +1,1189 @@ +Často kladené dotazy (FAQ) PostgreSQL +===================================== + +Obecné otázky +============= +1.1 Co je PostgreSQL? Jak se vyslovuje? +1.2 Jaká je licence na PostgreSQL? +1.3 Na kterých Unixex lze spustit PostgreSQL? +1.4 Které ne-unixové platformy jsou podporované? +1.5 Kde mohu získat PostgreSQL? +1.6 Kde mohu získat podporu? +1.7 Kde je poslední verze? +1.8 Jaká je dostupná dokumentace? +1.9 Kde najdu seznam známých chyb nebo nepodporovaných vlastností? +1.10 Jak se mohu naučit SQL? + +1.11 Nemá PostgreSQL problémy s rokem 2000? +1.12 Jak se připojit k vývojářskému týmu? +1.13 Kam podat report o chybě? +1.14 Jak je na tom PostgreSQL v porovnání s jinými databázemi? +1.15 Jak lze finančně pomoci PostgreSQL? + +User client dotazy +================== +2.1 Kde naleznu ODBC ovladače pro PostgreSQL? +2.2 Jaké nástroje lze použít pro PostgreSQL a web? +2.3 Existuje grafické rozhraní pro PostgreSQL? +2.4 Které programovací jazyky mají podporu pro PostgreSQL? + +Administrativní dotazy +====================== +3.1 Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql? +3.2 Při startu postmaster, dostanu chybové hlášení Bad System Call nebo +core dump. Proč? 3.3 Při startu postmastera dostanu hlášení o chybě +IpcMemoryCreate. Proč? 3.4 Při startu postmastera dostanu hlášení o +chybě IpcSemaphoreCreate. Proč? 3.5 Jak povolit nebo zakázat přístup z +jiných stanic? 3.6 Jak ladit databázový stroj na lepší výkon? + +3.7 Jaké jsou možnosti ladění? +3.8 Proč dostanu "Sorry, too many clients", když se zkouším připojit? +3.9 K čemu slouží adresář pgsql_tmp? + +3.10 Proč je požadováno dump a obnovení (load) databáze během upgrade +mezi velkými verzemi PostgreSQL? + +Provozní dotazy +=============== +4.1 Čím se liší binární a normální kurzor? +4.2 Jak získat pouze první řádek dotazu? Náhodný řádek? +4.3 Jak získám seznam tabulek nebo jinak jak jej získá psql? +4.4 Jak odstraním sloupec tabulky, jak změním jeho typ? +4.5 Jaká je maximální velikost řádku, tabulky a databáze? +4.6 Kolik diskového prostoru je potřeba k uložení dat z normálního +textového souboru? 4.7 Jak získám seznam vytvořených tabulek, indexů, +databází? 4.8 Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč? +4.9 Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz? + +4.10 Co to je R-tree index? +4.11 Co je Genetic Query Optimizer? +4.12 Jak provést vyhledávání regulárního výrazu case sensitiv, +insensitiv? Jak použít index pro case insensitive vyhledávání? 4.13 Jak +v dotazu detekovat, že položka je NULL? 4.14 Jaké jsou rozdíly mezi +různými znakovými typy? 4.15.1 Jak vytvořit serial/auto-increment pole? +4.15.2 Jak získat hodnotu SERIAL po vložení řádku? + +4.15.3 Nepovede currval() a nextval() k rozhození podmínek při souběhu s +jinými uživateli? 4.15.4 Proč není vygenerované číslo použito při +přerušení transakce? Proč vznikají díry v číslování vlastní +sekvencí/SERIAL sloupce? 4.16 Co to je OID? Co je to TID? + +4.17 Jaký je význam některých výrazů použitých v PostgreSQL? +4.18 Proč jsem získal chybové hlášení "ERROR: Memory exhausted in +AllocSetAlloc()"? 4.19 Jak se dozvím, kterou verzi PostgreSQL používám? +4.20 Proč operace s velkými objekty končí "invalid large obj +descriptor"? 4.21 Jak vytvořit sloupec obsahující implicitně aktuální +datum? 4.22 Proč jsou moje vnořené dotazy používající IN tak pomalé? +4.23 Jak provést vnější spojení (outer join)? + +4.24 Jak provést dotaz napříč několika databázemi? +4.25 Může funkce vrátit více řádků nebo sloupců? +4.26 Proč nelze spolehlivě vytvářet a rušit dočasné tabulky v PL/pgSQL +funkcích? 4.27 Jaké jsou možnosti replikace databází? + +4.28 Jaké jsou možnosti šifrování databází? + +Rozšiřování PostgreSQL +====================== +5.1 Napsal jsem UDF funkci, PostgreSQL však končí dump core? +5.2 Jak mohu přispět nějakými šikovnými datovými typy a funkcemi do +PostgreSQL? 5.3 Jak napsat funkci v C vracející ntici? + +5.4 Modifikoval jsem zdrojové soubory. Tato změna nebyla při rekompilaci +vzata v potaz. Proč? +------------------------------------------------------------------------ + +Obecné otázky +============= + +1.1 Co je PostgreSQL? Jak se vyslovuje? +--------------------------------------- + +PostgreSQL se vyslovuje Post-Gres-Q-L. + +PostgreSQL vychází z databáze POSTGRES - výzkumného prototypu DBMS nové +generace. Z postgresu byl převzat silný datový model a bohatý soubor +datových typů a jeho dotazovací jazyk PostQuel byl nahrazen rozšířenou +podmnožinou jazyka SQL. PostgreSQL lze používat bez omezení a jeho +zdrojové kódy jsou volně k dispozici. + +PostgreSQL vyvýjí tým vývojářů přihlášených do vývojářské konference +PostgreSQL. Současným koordinátorem je Marc G. Fournier. (Odpověď 1.6. - +jak se zapojit). Tento tým je zodpovědný za veškerý vývoj PostgreSQL. + +Autory první verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do +portace, testování, ladění a rozšiřování kódu se zapojilo mnoho dalších +vývojářů . Původni kód Postgresu, ze kterého PostgreSQL vychází, je +výsledkem úsilí mnoha studentů a programátorů pracujících pod vedením +prof. Michaela Stonebrakera na University of California v Berkley. + +Původní název software z Berkley byl Postgres. Po přidání jazyka SQL se +název změnil na Postgres95. Koncem roku 1996 byl RDBMS přejmenován na +PostgreSQL. + +1.2 Jaká je licence na PostgreSQL? +---------------------------------- + +PostgreSQL je předmětem následujících autorských práv: + +Dílčí copyright (c) 1996-2002, PostgreSQL Global Development Group + +Dílčí copyright (c) 1994-6, Regents of the University of California + +Uděluje se oprávnění k užití, rozmnožování, provádění úprav a +rozšiřování tohoto softwaru a dokumentace k němu, pro jakékoli účely, +bez licenčního poplatku a bez písemné licenční smlouvy, za podmínky, že +na všech jeho kopiích je uvedeno oznámení o výše uvedených právech, +jakož i obsah tohoto a dvou následujících odstavců. + +THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ŽÁDNÉM +PŘÍPADĚ ODPOVĚDNA ŽÁDNÉ TŘETÍ OSOBĚ ZA PŘÍMOU, NEPŘÍMOU, ZVLÁŠTNÍ, +NAHODILOU NEBO VýSLEDNOU ŠKODU, VČETNĚ UŠLÉHO ZISKU, ZPůSOBENOU UŽITÍM +TOHOTO SOFTWARU A DOKUMENTACE K NĚMU, A TO I V PŘÍPADĚ, ŽE THE +UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOŽNOSTI VZNIKU TAKOVÉ +ŠKODY. + +THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO +NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VýROBKU KE SPECIFICKýM +ÚČELůM. NÍŽE UVEDENý SOFTWARE JE POSKYTNUT "JAK STOJÍ A LEŽÍ" A THE +UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO ÚDRŽBU, PODPORU, +AKTUALIZACI, VYLEPŠENÍ NEBO MODIFIKACI. + +Výše uvedené je BSD licence, běžná licence otevřeného zdroje. Není zde +žádné omezení ohledně užití kódu zdroje. Jsme s tím spokojeni a nemáme v +úmyslu na této skutečnosti cokoli měnit. + +1.3 Na kterých Unixex lze spustit PostgreSQL? +--------------------------------------------- + +PostgreSQL běží na všech moderních unixových platformách. V instalačních +instrukcích naleznete aktuální seznam všech platforem na kterých byla +testováním ověřena funkcionalita PostgreSQL. + +1.4 Které ne-unixové platformy jsou podporované? +------------------------------------------------ + +Klient +------ + +Knihovna libpq, psql a některé další moduly byly přeloženy pro MS +Windows. Klienta lze provozovat na MS Windows, ten prostřednictvím +TCP/IP protokolu komunikuje se serverem běžícím na některé z +podporovaných Unixových platforem. K překladu lze použít win32.mak a +Win32 knihovny libpq a psql. K databázi PostgerSQL lze přistupovat skrze +rozhraní ODBC. + +Server +------ + +Server může být na WindowsNT a Win2k provozován pouze s knihovnou +Cygwin, Cygnus Unix/NT porting library. Na nativním portu pro MS Win +NT/2000/XP se pracuje. Existující port pro Novell Netware 6 naleznete na +http://forge.novell.com. + +1.5 Kde mohu získat PostgreSQL? +------------------------------- + +Primárním anonymním ftp serverem pro PostgreSQL je +ftp://ftp.PostgreSQL.org/pub . Seznam zrcadel naleznete na našich +webových stránkách. + +1.6 Kde mohu získat podporu? +---------------------------- + +Hlavním mailová konference je pgsql-general@PostgreSQL.org. Slouží k +diskuzím ohledně PostgreSQL. Přihlásíte se zasláním mailu obsahující +následující řádky v těle dopisu (nikoliv v záhlaví - subjectu) + +subscribe +end + +na adresu mailto:pgsql-general-request@PostgreSQL.org. + +Můžete si vyžádat denní přehled (diggest), který má zhruba 30K denně +zpráv. + +Konference psql-bugs je určena k zasílání zpráv o chybách. Pro +přihlášení pošlete mail se stejným obsahem jako v předchozím případě na +adresu mailto:pgsql-bugs-request@PostgreSQL.org. + +Do vývojářské konference se přihlásíte odesláním dopisu s již zmiňovaným +obsahem na mailto:pgsql-hackers-request@PostgreSQL.org. + +Seznam dalších konferencí naleznete na stránkách PostgreSQL +http://www.postgresql.org + +1.7 Kde je poslední verze? +-------------------------- + +Poslední verzí je PostgreSQL 7.4.. Plánujeme uvolnit velkou verzi +každých šest až osm měsíců. + +1.8 Jaká je dostupná dokumentace? +--------------------------------- + +Různé manuály, manuálové stránky a několik malých testovacích příkladů +jsou součásti distribuce. Podívejte se do adresáře /doc. Manuály jsou +přístupné online na http://www.PostgreSQL.org/docs. + +Na adresách http://www.PostgreSQL.org/docs/awbook.html a +http://www.commandprompt.com/ppbook/ naleznezte dvě online knihy o +PostgreSQL. Seznam dostupné literatury je na +http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor +technických článků s tematikou PostgresQL najdete na +http://techdocs.PostgreSQL.org/. + +psql má užitečný metapříkaz \d sloužící k zobrazení informací o typech, +operátorech, funkcí, agregačních funkcí atd. + +Více dokumentace naleznete na našich webových stránkách. + +1.9 Kde najdu seznam známých chyb nebo nepodporovaných vlastností? +------------------------------------------------------------------ + +PostgreSQL podporuje rozšířenou podmnožinu SQL-92. V našem TODO [1] +najdete seznam známých chyb, chybějících vlastností a seznam vlastností, +které budou do systému implementovány v budoucnu (včetně priorit). + +1.10 Jak se mohu naučit SQL? +---------------------------- + +V knize The PostgreSQL book na +http://www.PostgreSQL.org/docs/awbook.html je vysvětlen jazyk SQL (vyšla +česky). Další dostupnou knihou je http://www.commandprompt.com/ppbook. +Kvalitní návody naleznete na +http://www.intermedia.net/support/sql/sqltut.shtm, na +http://www.intermedia.net/support/sql/sqltut.shtm [2] , a na +http://sqlcourse.com. + +Další je Teach Yourself SQL in 21 days, Second Edition na +http://members.tripod.com/er4ebus/sql/index.htm. + +Mnoho uživatelů doporučuje The Practical SQL Handbook, Bowman, Judith +S., et al., Addison-Wesley. Jiní preferují The Complete Reference SQL, +Groff et al., McGraw-Hill. + +1.11 Nemá PostgreSQL problémy s rokem 2000? +------------------------------------------- + +Nemá, můžeme pracovat s datumy po roce 2000 našeho letopočtu i před +rokem 2000 př.n.l. + +1.12 Jak se připojit k vývojářskému týmu? +----------------------------------------- + +Nejdříve si stáhněte nejnovější zdroje a přečtěte si vývojářskou +dokumentaci na našem webu nebo v distribuci. Pak se přihlašte do +konferencí pgsql-hackers a pgsql-patches. Kvalitní záplaty posílejte do +pgsql-patches. + +Právo commit má v cvs archivu asi třinácti lidí. Každý z nich poslal +mnoho kvalitních záplat, takže tehdejší commiters měli jistotu, že budou +předkládat jenom kvalitní záplaty a mohli jim předělit větší práva. + +1.13 Kam podat report o chybě? +------------------------------ + +Navštivte naši PostgreSQL BugTool stránku na +http://www.PostgreSQL.org/bugs/bugs.php, která obsahuje návod a směrnice +jak podat chybový report. + +Ověřte si na našem ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li máte +nejnovější verzi PostgreSQL a zda-li k ní neexistují nějaké záplaty. + +1.14 Jak je na tom PostgreSQL v porovnání s jinými databázemi? +-------------------------------------------------------------- + +Existuje několik hledisek jak porovnávat software: vlastnosti, výkon, +spolehlivost, podpora a cena. + +Vlastnosti +---------- + +PostgreSQL má hodně společných vlastností s velkými komerčními DBMS, +např. transakce, vnořené dotazy, spouště, pohledy, kontrolu referenční +integrity a sofistikované zamykání. Podporuje některé vlastnosti, které +tyto systémy nemají, uživatelem definované typy, dědičnost, pravidla, +MVCC redukující zamykání. + +Výkon +----- + +Výkonnostně je na tom PostgreSQL podobně jako další komerční ale i open +source databáze, v něčem je rychlejší, jindy pomalejší. V porovnání s +MySQL a podobnými databázovými systémy je PostgreSQL rychlejší při +víceuživatelském přístupu, složitějších dotazech a zatížení read/write +dotazy. MySQL je rychlejší v jednodušších dotazech s malým počtem +uživatelů. Navíc, MySQL nepodporuje mnohé vlatnosti zmíněné v sekci +vlastnosti. Zapracovali jsme na spolehlivosti a podporovaných +vlastnostech, a výkon zvyšujeme v každé verzi. Zajímavou stránku +porovnávající PostgreSQL a MySQL naleznete na +http://openacs.org/philosophy/why-not-mysql.html. Za vývojem MySQL není +Open Source komunita, ale komerční společnost, přestože svoje produkty +distribuuje jako Open Source. + +Spolehlivost +------------ + +Jsme si vědomi, že databáze musí být spolehlivá, jinak je nepoužitelná. +Snažíme se zveřejňovat dobře otestovaný, stabilní kód s minimem chyb. +Každá verze je více než měsíc v beta testování, a naše historie verzí +ukazuje, že můžeme nabídnout stabilní, solidní verze, které jsou +připraveny pro reálné nasazení. V této oblasti jsme srovnatelní s +dalšími databázemi. + +Podpora +------- + +Na naší mailové konferenci můžete kontaktovat velkou skupinu vývojářů a +uživatelů.problémů. Nemůžeme garantovat opravu, nicméně komerční +databáze také ne vždy nabídnou opravu. Podle ohlasů je naše podpora +hodnocena lépe než u jiných DBMS a to díky přímému kontaktu s vývojáři, +velkou komunitou uživatelů, kvalitními manuály a přístupným zdrojovým +kódem. Pro uživatele, kteří vyžadují podporu ke konkrétním případům, +existuje placená podpora (FAQ sekce 1.6). + +Cena +---- + +PosgreSQL lze volně používat pro nekomerční i komerční použití. Můžete +do svých produktů přidat náš kód bez omezení, respektive v souladu s +podmínkami naší licenční smlouvy (v duchu BSD licence). + +1.15 Jak lze finančně pomoci PostgreSQL? +---------------------------------------- + +PosgreSQL má prvotřídní infrastrukturu od našeho začátku v roce 1996. +Vděčíme za to Marku Fournierovi, který založil a spravoval tuto +infrastrukturu několik let. + +Kvalitní infrastruktura je velice důležitá pro každý open source +projekt. Předchází nedorozuměním, která velice zdržují pokrok v +projektu. + +Tato infrastruktura není laciná. K jejímu zajištění je třeba stále +hradit určité měsíční a jednorázové částky. Pokud máte Vy nebo Vaše +společnost peníze, které nám můžete darovat, obraťe se na +http://store.pgsql.com/shopping/ a darujte je. + +Ačkoliv webová stránka zmiňuje PostgreSQL, Inc. vklady jsou určeny pouze +k podpoře projektu PostgreSQL a nepodporují žádnou existující +společnost. Pokud to vyžadujete, můžete poslat kontrolu na naši +kontaktní adresu. + +Pokud máte příklad úspěšného nasazení PostgreSQL, přihlaště se na náš +advocacy site na http://advocacy.postgresql.org. + +------------------------------------------------------------------------ + +User client dotazy +================== + +2.1 Kde naleznu ODBC ovladače pro PostgreSQL? +--------------------------------------------- + +Pro PostgreSQL existují dva ODBC ovladače - PsqlODBC a OpenLink ODBC. + +PsqlODBC je ke stažení na +http://gborg.postgresql.org/project/psqlodbc/projdisplay.php. + +OpenLink můžete získat na http://www.openlinksw.com. Spolupracuje s +jejich klientským programovým vybavením a je dostupný pro všechny jimi +podporované platformy (Win, Mac, Unix, VMS). + +Tento ovladač je určen pro ty, kteří vyžadují podporu komerční kvality, +nicméně freeware verze je dostupná a funkční. Dotazy zasílejte na +postgres95@openlink.co.uk. + +2.2 Jaké nástroje lze použít pro PostgreSQL a web? +-------------------------------------------------- + +Pěkný úvod do databázových technologií zabezpečujících chod webových +stránek najdete na http://www.webreview.com. + +Pro tvorbu webu existuje excelentní rozhraní PHP, které naleznete na +http://www.php.net. + +Pro složitější případy se často používá Perl a CGI.pm nebo mod_perl. + +2.3 Existuje grafické rozhraní pro PostgreSQL? +---------------------------------------------- + +Pro PostgreSQL existuje několik grafických rozhraní: PgAccess +(http://www.php.net), PgAdmin (http://www.php.net), RHDB Admin +(http://sources.redhat.com/rhdb/) a Rekall ( +http://www.thekompany.com/products/rekall/). Dále existuje PHPPgAdmin +(http://phppgadmin.sourceforge.net/) rozhraní PostgreSQL založené na web +technologii. + +Úplnější seznam najdete na +http://techdocs.postgresql.org/guides/GUITools. + +2.4 Které programovací jazyky mají podporu pro PostgreSQL? +---------------------------------------------------------- + +Většina programovacích jazyků obsahuje rozhraní pro PostgreSQL. +Podívejte se do rozšiřujících modulů Vašeho programovacího jazyka. + +Distribuce PostgreSQL obsahuje tato rozhraní: + + - C (libpq) + - Embbedded C (ecpg) + - Java (jdbc) + - Python (PyGreSQL) + - TCL (libpgtcl) + +Další rozhraní jsou dostupná na http://gborg.postgresql.org v sekci +Drivers/Interfaces. + +------------------------------------------------------------------------ + +Administrativní dotazy +====================== + +3.1 Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql? +-------------------------------------------------------------- + +Použijte volbu --prefix při spuštění configure + +3.2 Při startu postmaster, dostanu chybové hlášení Bad System Call nebo core dump. Proč? +---------------------------------------------------------------------------------------- + +Důvody mohou být různé, ale nejprve zkontrolujte, zda Váš systém +podporuje System V extensions. PostgreSQL vyžaduje v jádře podporu +sdílené paměti a semaforů. + +3.3 Při startu postmastera dostanu hlášení o chybě IpcMemoryCreate. Proč? +------------------------------------------------------------------------- + +Buďto nemáte správně nakonfigurovanou sdílenou paměť v jádře nebo musite +zvětšit její velikost. Potřebná velikost je závislá na architektuře a na +tom, kolik paměťových bufferů a backendů máte povoleno pro postmastera. +Pro většinu systémů s předdefinovaným počtem backendů a paměťových +bufferů je minimum zhruba 1MB. V +http://www.postgresql.org/docs/view.php?version=current&idoc=1&file=kern +el-resources.html [3] naleznete podrobnější informace o sdílené paměti a +semaforech. + +3.4 Při startu postmastera dostanu hlášení o chybě IpcSemaphoreCreate. Proč? +---------------------------------------------------------------------------- + +Pokud dostane chybovou zprávu IpcSemaphoreCreate: semget failed (No +space left on device), pak vaše jádro nemá dost volných semaforů. +PostgreSQL vyžaduje jeden semafor pro každý backend v pozadí. Dočasným +řešením je start postmastera s limitem backendů. Použijte přepínač -N s +hodnotou menší než 32. Úplným řešením je zvýšení hodnot SEMMNS a SEMMNI +jadra. + +Nefunkční semafory mohou způsobit pád během intenzivních databázových +operací. + +Pokud se tato chyba vyskytuje ještě někde jinde, možná nemáte vůbec +nakonfigurovány semafory ve vašem jádře. V PostgreSQL Administrator's +Guide najdete podrobnější popis požadavků na sdílenou pamět a semafory. + +3.5 Jak povolit nebo zakázat přístup z jiných stanic? +----------------------------------------------------- + +Při výchozím nastavení PostgreSQL odepře přístup z jiných stanic než +lokální s použitím UDP. Databáze se zpřístupní jiným stanicím nastavením +přepínače -i postmastera a povolením stanice a určením režimu +autentifikace v $PGDATA/pg_hba.conf. Tím se povolí TCP/IP spojení. +ZASTARALÉ + +3.6 Jak ladit databázový stroj na lepší výkon? +---------------------------------------------- + +Určitě pomohou indexy. Příkaz EXPLAIN zobrazí způsob interpretace Vašeho +dotazu a použití indexů. + +Při větší dávce INSERTů uvažujte o náhradě příkazem COPY. Ten je mnohem +rychlejší nežli samotný INSERT. Každý příkaz mimo blok BEGIN WORK/COMMIT +se provádí ve vlastní transakci. Zvažte, zda-li by se nedalo několik +příkazů spojit do jedné transakce. Tím se sníží režie na transakce. Před +provedením rozsáhlých změn zrušte indexy, které po dokončení změn opět +vytvořte. + +Máte několik dalších možností, jak zlepšit výkon. Můžete zakázat fsyn() +při startu postmastera přepínači -o -F. Tyto přepínače zabrání fsync(), +tj. zápisu na disk po každé transakci. + +Můžete zvýšit velikost paměťových bufferů použitých backendy tj. +parametr -B postmasteru. Pokud ale tato hodnota bude příliš velká, tak +možná nespustíte postmastera jelikož dosáhnete limitu sdílené paměti. +Každý buffer má 8K a implicitně je 64 bufferů. + +Dále můžete použít přepínač -S k zvýšení limitu paměti pro backendy na +dočasné třídění. Hodnota je míněna v kilobytech a výchozí nastavení je +512, tj. 512K. + +Můžete použít příkaz CLUSTER, který uspořádá fyzicky data v tabulkách +podle indexu. Více na manuálových stránkách příkazu CLUSTER. + +3.7 Jaké jsou možnosti ladění? +------------------------------ + +Máte několik možností jak se dostat k užitečným stavovým informacím. + +Zaprvé, při překladu použijte přepínač --enable-cassert, tím se zapne +monitorování a následné zastavení aplikace, když se proces v backendu +dostane do neočekávaného stavu. + +Jak postmaster tak postgres má několik přepínačů umožňujících ladění. +Postmaster nastartujte tak, abyste si byli jisti, že je standartní +výstup a standartní chybový výstup přesměrován do souboru logu, +například: + +cd /usr/local/pgsql +./bin/postmaster > server.log 2>&1 & + +Tím se vytvoří log v adresáři PostgreSQL, Tento soubor obsahuje užitečné +informace o problémech a chybách vyskytlých se na serveru. Postmaster má +přepínač -d určující, jak podrobné mají být reportované informace, tj. +debug level. Pozor, při velké hodnotě debug levelu rychle roste velikost +souboru logu. + +Pokud neběží postmaster, můžete spustit backend PostgreSQL z příkazové +řádky a napsat svůj SQL dotaz přímo v backendu (doporučeno pouze pro +ladění). Dotaz je v tomto případě ukončen novou řádkou, nikoliv +středníkem. Pokud máte aplikaci přeloženou s ladícími symboly, můžete +použít debbuger k monitorování procesu. Pokud není backend spuštěn +postmasterem, pak neběží ve svém obvyklém prostředí a tudíž některé +problémy dané interakcí mezi backendy nemohou být nasimulovány. + +Pokud běží postmaster, spusťe psql v jednom okně a pak si zjistěte PID +procesu postgres použitého psql. V debuggeru sepřipojte k postgresql +PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql. Pokud +ladíte startup postgresu, pak nastavte PGOPTIONS="-W n" a spusťe psql. +Tento přepínač způsobí pauzu n sekund, takže budete mít čas se připojit +k procesu, a nastavit breakpointy a pokračovat v startup posloupnosti. + +Pro ladění a měření výkonu mohou být užitečné přepínače -s, -A a -t +programu postgres (backend). + +Můžete provést překlad s profilací, tak abyste viděli kolik času +zabírají jednotlivé funkce. Soubory s profily backendů jsou uloženy v +adresáři pgsql/data/base/dbname. Profil klienta pak v jeho aktuálním +adresáři. Korektní profilace v prostředí Linux požaduje konfiguraci +systému s parametrem -DLINUX_PROFILE. + +3.8 Proč dostanu "Sorry, too many clients", když se zkouším připojit? +--------------------------------------------------------------------- + +Zvyšte limit postmastera na maximální počet současně spuštěných +backendů. + +Výchozí hodnota je 32 backendů. Tuto hodnotu zvýšíte zastavením a +opětovným spuštěním postmastera s parametrem -N nebo úpravou +postgresql.conf. + +Při zvýšení hodnoty -N nad 32 musíte zvýšit hodnotu -B nad výchozí 64, +-B musí být minimálně dvakrát větší, nebo ještě lépe více. Pravděpodobně +zjistíte, že pro velký počet procesů backendu je nutné zvýšit některé +parametry jádra. Jsou to především maximální velikost sdílené paměti +SHMMAX, maximální počet semafórů SEMMNS a SEMMNI, maximální počet +procesů NPROC, maximální počet procesů uživatele MAXUPRC a maximální +počet otevřených souborů NFILE a NINODE. Důvod pro omezení maximálního +počtu backendů je fakt, že by mohlo dojít k vyčerpání zdrojů Vašeho +systému. + +3.9 K čemu slouží adresář pgsql_tmp? +------------------------------------ + +Tento adresář obsahuje dočasné soubory vytvořené exekutorem dotazů. +Například, když je nutné třídění k zajištění ORDER BY a třídění má větší +nároky na prostor než povoluje parametr -S backendu, pak je vytvořen +dočasný soubor k uložení extra údajů. + +Dočasné soubory jsou obvykle mazány automaticky, ale může se stát, že +během třídění server spadne. Zastavení a další start postmastera zajistí +odstranění souborů s těchto adresářů. + +3.10 Proč je požadováno dump a obnovení (load) databáze během upgrade mezi velkými verzemi PostgreSQL? +------------------------------------------------------------------------------------------------------ + +PostgreSQL se minimálně mění během malých verzí, takže např. při upgrade +z 7.2 na 7.2.1 není nutné dump a load databáze. Ale velké verze často +mění interní formát systémových tabulek a datových souborů. Tyto změny +jsou natolik rozsáhlé, že nelze zajistit zpětnou kompatibilitu pro +datové soubory. Dump uloží data v obecném formátu, takže mohou být +načtena a používána v novém interním formátu. + +------------------------------------------------------------------------ + +Provozní dotazy +=============== + +4.1 Čím se liší binární a normální kurzor? +------------------------------------------ + +Popis najdete v manuálové stránce DECLARE + +4.2 Jak získat pouze první řádek dotazu? Náhodný řádek? +------------------------------------------------------- + +Podívejte se do man. stránky příkazu FETCH, nebo použijte SELECT ... +LIMIT ... + +Není nutné zpracovávat celý dotaz, když potřebujete pouze několik +prvních řádků. Pokud existuje index ORDER BY, PostgreSQL je schopen +přerušit zpracování dotazu po získání požadovaného počtu řádků. + +K získání náhodného řádku použijte: + +SELECT col FROM tab + ORDER BY random() LIMIT 1; + +4.3 Jak získám seznam tabulek nebo jinak jak jej získá psql? +------------------------------------------------------------ + +Podívejte se do zdrojových kódů psql do souboru +pgsql/src/bin/psql/describe.c. Ten obsahuje SQL příkazy, které se +používají v psql metapříkazech. Dále můžete spustit psql s přepínačem +-E, který způsobí zobrazení každého dotazu, které zpracování metapříkazu +vyvolá. + +4.4 Jak odstraním sloupec tabulky, jak změním jeho typ? +------------------------------------------------------- + +Počínaje verzí 7.3 můžete použít příkaz ALTER TABLE DROP COLUMN. Ve +starších verzích můžete použít následující postup: + +BEGIN; +LOCK TABLE old_table; +SELECT ... -- mimo sloupec, který chceme odstranit + INTO TABLE new_table; +DROP TABLE old_table; +ALTER TABLE new_table RENAME TO old_table; +COMMIT; + +Pro změnu typu sloupce je třeba provést: + +BEGIN; +ALTER TABLE tab ADD COLUMN new_col new_data_type; +UPDATE tab SET new_col = CAST(old_col AS new_data_type; +ALTER TABLE tab DROP COLUMN old_col; +COMMIT; + +Poté proveďte VACUUM FULL tab - uvolníte tím diskový prostor zabraný +nyní již neplatnými řádky. + +4.5 Jaká je maximální velikost řádku, tabulky a databáze? +--------------------------------------------------------- + +PostgreSQL má tato omezení: + + Maximální velikost databáze: neomezena (existují 32TB db) + + Maximálné velikost tabulky: 32 TB + + Maximální velikost řádky: 1.6 TB + + Maximální velikost položky 1 GB + + Maximální počet řádků v tabulce: neomezeno + + Maximální počet sloupců v tabulce: 250-1600 podle typů + + Maximální počet indexů na tabulce: neomezeno + +Ve skutečnosti nic není neomezeno, limitem bývá vždy dostupná disková +paměť nebo velikost operační paměti. Pokud máte některou z těchto hodnot +neobvykle velkou, může dojít ke snížení výkonu. + +Maximální velikost tabulky je 32 TB a nevyžaduje podporu velkých souborů +operačním systémem. Velké tabulky se ukládají do několika 1 GB souborů +takže limity souborového systému nejsou podstatné. + +Maximální velikost tabulky a maximální počet sloupců můžeme +zečtyřnásobit nastavením velikosti bloku na 32K. + +4.6 Kolik diskového prostoru je potřeba k uložení dat z normálního textového souboru? +------------------------------------------------------------------------------------- + +PostgreSQL vyžaduje až pětinásobek diskového prostoru k uložení dat z +textového souboru. + +Například, uvažujme soubor se 100 tisíci řádky obsahující na každé řádce +celé číslo a textový popis. Text je v průměru dvacet bytů dlouhý. +Textový soubor bude 2.8 MB dlouhý. Velikost databáze obsahující +odpovídající data bude zhruba 6.4 MB. + + 36 bytů: hlavička řádku (přibližně) + 24 bytů: jedna celočíselná položka a jedna textová + 4 byty: ukazatel na stránku k ntici +------------------------------------------------------ + 64 bytů na řádek + +Velikost datové stránky PostgreSQL je 8KB + + 8192 bytů na stránce +---------------------- = 128 řádek na stránku + 64 bytů za řádek + +100000 řádek +-------------------- = 782 stránek (zaokrouhleno nahoru) +128 řádek na stránce + +782 * 8192 = 6, 406, 144 bytů (6.4 MB) + +Indexy nemají tak velkou režii, ale mohou být také velké, protože +obsahují indexovaná data. + +Hodnoty NULL jsou uloženy v bitmapách, takže spotřebují jen velmi málo +diskového prostoru. + +4.7 Jak získám seznam vytvořených tabulek, indexů, databází? +------------------------------------------------------------ + +psql má sadu metapříkazů k zobrazení těchto informací. Jejich seznam +získáte příkazem \?. Dále se můžete podívat na obsah systémových tabulek +začínajících pg_. Spuštění psql s parametrem -l provede výpis názvů +všech databází. + +Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy přistupující k +systémovým tabulkámm. + +4.8 Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč? +----------------------------------------------------------- + +Každý dotaz nemusí nutně použít existující indexy. Index se použije +tehdy, když je tabulka větší než určitá minimální velikost, a dotaz +vybírá pouze procentuálně malou část řádků tabulky. To proto, že náhodný +přístup k disku daný čtením indexu může být pomalejší než lineární čtení +tabulky nebo sekvenční čtení, + +PostgreSQL rozhoduje o použití indexů na základě statistiky přístupů k +tabulce. Tyto statistiky se shromažďují příkazy VACUUM ANALYZE nebo +ANALYZE. Díky statistikám má optimizer informaci o počtu řádek v tabulce +a může lépe rozhodnout o použití indexů. Statistiky se uplatní při +určení optimálního pořadí a metody spojení tabulek. Statistiky by se +měli aktualizovat opakovaně, tak jak se mění obsah tabulek. + +Indexy nejsou obyčejně použity pro setřídění nebo spojení tabulek. +Sekvenční zpracování následované explicitním tříděním je obyčejně +rychlejší než indexní čtení na velké tabulce. + +Jinak je tomu v případě použití LIMIT a ORDER BY, při kterém se většinou +index použije, výsledkem je pouze malá část tabulky. Funkce MAX() a +MIN() nepoužívají indexy, ale je možné tutéž hodnotu získat + +SELECT col FROM tab + ORDER BY col [ DESC ] LIMIT 1; + +Pokud si myslíte, že optimizer mylně zvolil sekvenční prohledávání +tabulky, použijte příkaz SET enable_seqscan TO 'off' a zkuste zda je +indexní prohledávání rychlejší. + +Při vyhledávání na základě vzoru jako je např. operátor LIKE nebo ~ se +indexy použíjí pouze za určitých skutečností: + + - začátek hledaného vzoru musí být ukotven k začátku, tj. + + * vzor LIKE nesmí začínat % + * regulární výraz musí začínat ^ + + - vzor nesmí začínat intervalem, např. [a-e] + + - vyhledávaní, které není Case sensitiv nepoužívá indexy. + Můžete ale použít funkcionální indexy, které jsou posány v sekci + 4.12 + - při inicializaci databáze (initdb) musí být použito C locale + (pozn. překladatele - tudíž v našich podmínkách nepoužitelné, + nepracovalo by české třídění). + +4.9 Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz? +------------------------------------------------------------ + +Podívejte se do manuálové stránky příkazu EXPLAIN. + +4.10 Co to je R-tree index? +--------------------------- + +R-tree index se používá pro indexování prostorových dat. Hash index +nemůže obsloužit prohledávání oblastí. B-tree index může řídit vyhledání +oblastí v jedné dimenzi. R-tree index může podporovat hledání v +multidimenzionálních datech. Použijeme-li například R-tree index na +atributy typu point, pak systém může efektivně odpovědět na dotaz - +vyber všechny body uvnitř obdélníků. + +Původní návrh R-tree je 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 + +Tyto materiály naleznete v Stonebraker's "Readings in Database Systems". + +Vestavěné R-tree může sloužit k indexaci polygonů a oblastí. Teoreticky +můžeme R-tree použít i pro více dimenzí (jiné než 3D). Ve skutečnosti +ale takové rozšíření R-tree vyžaduje trochu práce a ve součastnosti +chybí dokumentace jak na to. + +4.11 Co je Genetic Query Optimizer? +----------------------------------- + +GEQO modul urychluje optimalizaci dotazů při spojování množství tabulek +metodou Genetických algoritmů (GA). To umožňuje získat velkého množství +variant spojení při neúplném prohledáváním. + +4.12 Jak provést vyhledávání regulárního výrazu case sensitiv, +insensitiv? Jak použít index pro case insensitive vyhledávání? + +Operátor ~ slouží k porování s regulárním výrazem, jeho modifikace *~ +představuje case insensitive vyhledávání. Jedná se o obdobu LIKE a +ILIKE. + +Pro vyhledávání bez ohledu na velká malá písmena použijeme + +SELECT * FROM tab + WHERE lower(col) = 'abc'; + +V tomto případě se nepoužije standardní index. Nicméně, použije se +funkcionální index, pokud jej vytvoříte + +CREATE INDEX tabindex ON tab (lower(col)); + +4.13 Jak v dotazu detekovat, že položka je NULL? +------------------------------------------------ + +Určíte pomocí IS NULL nebo IS NOT NULL + +4.14 Jaké jsou rozdíly mezi různými znakovými typy? +--------------------------------------------------- + +Typ Interní název Poznámka +-------------------------------------------------------------------------- +VARCHAR(n) varchar omezeno maximální délkou, bez doplnění mezerami +CHAR(n) bpchar řetězec je doplněn mezerami do dané délky +TEXT text bez horního limitu na délku +BYTEA bytea pole bytů (bezpečně lze uložit i znak NULL) +"char" char jeden znak + +S interními názvy se setkáte v systémovém katalogu a v některých +chybových hlášeních. + +První čtyři uvedené typy jsou tzv. varlena typy (tj. první čtyři byty na +disku nesou údaj o délce, následují samotná data). Proto skutečný +použitý prostor je vždy o něco málo větší než deklarovaná délka. Naopak, +tyto datové typy jsou komprimovánty TOASTem, takže prostor na disku může +být nižší než je očekáváno. + +VARCHAR(n) je vhodný pro ukládání textů promměné délky s pevně +stanovenou maximální délkou. TEXT je pro řetězce bez omezení délky s +maximem jeden gigabajt. + +CHAR(n) slouží k ukládání řetězců stejné délky. CHAR(n) doplní prázdné +znaky do specifikované délky, zatímco VARCHAR(n) uloží pouze předané +znaky. BYTEA je určeno pro ukládání binárních dat, včetně NULL byte. +Všechny zde popsané typy mají podobné výkonnostní charakteristiky. + +4.15.1 Jak vytvořit serial/auto-increment pole? +----------------------------------------------- + +PostgreSQL podporuje typ SERIAL. Při jeho použití se automaticky vytvoří +SEQUENCE a index na sloupci (Pro vyšší verze to neplatí OVĚŘIT). +Například: + +CREATE TABLE person ( + id SERIAL, + name TEXT +); + +je automaticky převedeno do + +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); + +Viz dokumentace create_sequence v manuálových stránkách. Dále můžete +použít unikátní hodnotu OID každého řádku. Potom ale musíte spouštět +pg_dump s přepínačem -o, tak aby zůstaly zachovány hodnoty OID (u +příkazu copy COPY WITH OIDS). + +4.15.2 Jak získat hodnotu SERIAL po vložení řádku? +-------------------------------------------------- + +Jednou z možností je získat budoucí hodnotu SERIAL funkcí nextval před +samotným vložením a pak ji vložit explicitně. Například v jakémsi +pseudojazyku + +newid = execute("SELECT nextval('person_id_seq')"); +execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); + +Můžete pak ještě použít hodnotu newid v dalších dotazech, např. jako +hodnotu cizího klíče. Název automaticky vytvořené sekvence je +tabulka_sloupec_seq. + +Alternativně můžete získat hodnotu posledně generovou sekvencí funkcí +currval() po vložení + +execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); +new_id = execute("SELECT currval('person_id_seq')"); + +Konečně můžete použít OID hodnotu vrácenou příkazem INSERT, ale to je +pravděpodobně nejméně přenositelné řešení. V Perlu při použití DBI +modulu Edmunda Mergleho DBD:Pg oid hodnotu získáme $sth->{pg_oid_status} +po každém $sth->execute(). + +4.15.3 Nepovede currval() a nextval() k rozhození podmínek při souběhu s jinými uživateli? +------------------------------------------------------------------------------------------ + +Nikoliv, currval() vrací hodnotu naposledy generovanou ve vašem +backendu, a ta tudíž není společná všem uživatelům. + +4.15.4 Proč není vygenerované číslo použito při přerušení transakce? +Proč vznikají díry v číslování vlastní sekvencí/SERIAL sloupce? + +K zajištění efektivnosti souběhu, jsou hodnoty posloupnosti, když se o +ně požádá, a sekvence není zamčena do ukončení transakce. To způsobuje +díry v číslování ze zrušených transakcí. + +4.16 Co to je OID? Co je to TID? +-------------------------------- + +Každý řádek vytvořený v PostgreSQL získá jedinečné OID. Všechna OID +generovaná během inicializace databáze jsou menší než 16384 +(include/access/transam.h). Všechna OID generovaná na požadavek +uživatele jsou rovna nebo vyšší této hodnotě. Normálně, všechna OID jsou +jedinečná nejen uvnitř tabulky nebo databáze, ale v rámci celé instalace +PostgreSQL + +PostgreSQL používá OID ve svém interním systému tabulek k vytvoření +relací. Tato OID mohou být použita k identifikaci konkrétního uživatele +a použita v spojení. Pro OID hodnoty je doporučen typ OID. Nad tímto +sloupcem můžete vytvořit index pro urychlení přístupu. + +OID jsou dána všem řádkům z centrální oblasti a jsou použita v každé +databázi. Pokud potřebujete změnit OID, nebo chcete zkopírovat tabulku s +původními OID, lze použít + +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'; + +OID jsou uložena jako 4bajtový integer a přetečou po čtyřech miliardách. +Nebylo hlášeno, že by se tak někdy stalo, přesto ale plánujeme odstranit +tento limit dřív než se tak stane. + +TID se používají i identifikaci fyzických řádků s hodnotou bloku a +offsetu. TIDs se mění modifikací řádků (používá se jako ukazatel indexu +fyzického řádku). + +4.17 Jaký je význam některých výrazů použitých v PostgreSQL? +------------------------------------------------------------ + +V některých zdrojových kódech nebo starší dokumentaci se můžete setkat s +následujícími výrazy, které mají širší význam. Zde je příklad nekterých: + + - tabulka, relace, třída (table, relation, class) + - řádek, záznam, ntice (row, record, tuple) + - sloupec, položka, atribut (column, field, attribute) + - vyhledání, výběr (retrieve, select) + + - náhrada, úprava (replace, update) + - přidání, vkládání (append, insert) + - OID, serial value (OID, serial value) + - portal, kurzor (portal, cursor) + - range variable, jméno tabulky, alias tabulky (range + variable, table name, table alias) + +seznam těchto výrazů můžete nalézt na +http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/g +lossary.html. + +4.18 Proč jsem získal chybové hlášení "ERROR: Memory exhausted in AllocSetAlloc()"? +----------------------------------------------------------------------------------- + +Pravděpodobně došlo k vyčerpání virtuální paměťi na Vašem systému, nebo +jádro má nízký limit pro určité zdroje. Vyzkoušejte před startem +posmatera + +ulimit -d 262144 +limit datasize 256m + +Záleží na Vašem shellu, zda budou tyto příkazy úspěšné, měly by zvýšit +limit datového segmentu pro Vaše procesy a umožnit tak dokončení dotazu. +Tyto příkazy se aplikují na aktuální proces a všechny synovské procesy +vytvořené po provedení příkazu. Pokud máte problémy s SQL klientem +protože backend vrací příliš mnoho dat, zkuste zvýšit limity před +startem klienta. + +4.19 Jak se dozvím, kterou verzi PostgreSQL používám? +----------------------------------------------------- + +V psql spusťte + +SELECT version(); + +4.20 Proč operace s velkými objekty končí "invalid large obj descriptor"? +------------------------------------------------------------------------- + +Všechny operace s velkými objekty - lo_open, lo_close, ... musíte +spouštět v transakci, tj. mezi příkazy BEGIN WORK a COMMIT. + +PostgreSQL uvolňuje handle velkých objektů při skončení transakce. Pokud +budete pracovat s velkými objekty mimo transakci, pravděpodobně +dostanete toto chybové hlášení, protože handle již budou neplatné. + +Pokud používáte interface podobné ODBC musíte nastavit set auto_commit +off + +4.21 Jak vytvořit sloupec obsahující implicitně aktuální datum? +--------------------------------------------------------------- + +Použijte CURRENT_TIMESTAMP + +CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); + +4.22 Proč jsou moje vnořené dotazy používající IN tak pomalé? +------------------------------------------------------------- + +Aktuálně spojujeme tabulky se sekvenčním skenováním výsledku pro každý +řádek vnějšího dotazu. Pokud vnořený dotaz má pouze několik řádků a +vnější dotaz vrací hodně řádek, IN je rychlé. V jiných případech +nahraďte IN EXISTS: + +SELECT * FROM tab + WHERE col IN (SELECT subcol FROM subtab); + +takto + +SELECT * FROM tab + WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); + +Pro urychlení vytvořete index pro subcol. Tento výkonnostní problém byl +odstraněn ve verzi 7.4. + +4.23 Jak provést vnější spojení (outer join)? +--------------------------------------------- + +PostgreSQL podporuje vnější spojení tabulek standardními SQL příkazy. +Zde jsou dva příklady: + +SELECT * FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); + +nebo + +SELECT * FROM t1 LEFT OUTER JOIN USING (col); + +Tyto identické dotazy napojí t1.col na t2.col a ještě přidá nepřipojené +řádky z t1 (které nemají obdoby v t2). Pravé spojení (RIGHT JOIN) přidá +nepřipojené řádky z t2. FULL JOIN vrátí všechny řádky, včetně +nepřipojených z tbulek t1 a t2. Klíčové slovo OUTER je nepovinné a váže +se na LEFT, RIGHT a FULL join. Běžné spojení se nazývá INNER JOIN. + +V dřívějších verzích se vnější spojení tabulek mohlo simulovat pomocí +UNION a NOT IN. Například pro spojení tabulek tab1 a tab2, je +následující dotaz ekvivalentní k vnějšímu spojení dvou tabulek: + +SELECT tab1.col2, tab2.col2 FROM tab1, tab2 + WHERE tab1.col1 = tab2.col1 +UNION ALL +SELECT tab1.col2, NULL FROM tab1 + WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) +ORDER BY col1; + +4.24 Jak provést dotaz napříč několika databázemi? +-------------------------------------------------- + +PostgreSQL nenabízí žádný způsob, jak se dotázat do jiné databáze než do +aktuální. Doplněk contrib/dblink umožňuje dotaz do cizí databáze +prostřednictvím funkce. Na straně klienta není problém si otevřít více +simultálních přístupů do různých databází a spojovat výsledek na straně +klienta. + +4.25 Může funkce vrátit více řádků nebo sloupců? +------------------------------------------------ + +V PostgreSQL 7.3 můžete jednoduše vracet více řádků nebo sloupců z +funkce, viz: +http://techdocs.postgresql.org/guides/SetReturningFunctions. + +4.26 Proč nelze spolehlivě vytvářet a rušit dočasné tabulky v PL/pgSQL funkcích? +-------------------------------------------------------------------------------- + +Přeložený kód PL/pgSQL funkce je uložen ve vyrovnávací paměti, tj. +funkce je překládána pouze při změně kódu, nikoliv před každým voláním +funkce. Nechtěným vedlejším efektem je, že volání funkce selže, když se +funkce odkazuje na dočasnou tabulku, pokud tato tabulka byla od překladu +funkce zrušena (ačkoliv již byla znovu vytvořena a existuje). Jediným +řešením problému je přístup k dočasné tabulce pomocí EXECUTE, tj. +dynamické provádění dotazu. Tento příkaz zajistí opakovaný překlad +dotazu při každém volání funkce. + +4.27 Jaké jsou možnosti replikace databází? +------------------------------------------- + +Existuje několik dostupných řešení master/slave replikací. Ty povolují +modifikace master databáze a slave databázím umožňují pouze čtení. Na +konci http://gborg.PostgreSQL.org/genpage?replication_research najdete +jejich seznam. Na řešení multi-master replikaci se pracuje na +http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. + +4.28 Jaké jsou možnosti šifrování databází? +------------------------------------------- + - + + contrib/pgcrypto obsahuje šifrovací funkce použitelné v SQL + dotazech. + + - + + K šifrování přenosu dat z klienta na server, musí být server + přeložen s podporou ssl a přepínač sslv postgresql.conf musí být + nastaven na hodnotu true. Klient musí mít vytvořen záznam hostssl v + pg_hba.conf a také mít povolen režim ssl. Lze použít i jiné + prostředky, nejen nativní podporu ssl v PostgreSQL, např. stunel a + ssh. + + - + + Hesla uživatelů databáze jsou zašifrována počínaje verzí 7.3. Ve + starších verzích toto chování muselo být vynuceno volbou + PASSWORD_ENCRYPTION v postgresql.conf + + - + + Server může běžet na šifrovaném souborovém systému. + +------------------------------------------------------------------------ + +Rozšiřování PostgreSQL +====================== + +5.1 Napsal jsem UDF funkci, PostgreSQL však končí dump core? +------------------------------------------------------------ + +Problém může být způsoben mnoha okolnostmi. Vyzkoušejte si svoji funkci +nejdříve v nějaké jednoduché aplikaci. + +5.2 Jak mohu přispět nějakými šikovnými datovými typy a funkcemi do PostgreSQL? +------------------------------------------------------------------------------- + +Pošlete své rozšíření do konference pgsql-hackers, a ono pak možná +skončí v podadresáři contrib. + +5.3 Jak napsat funkci v C vracející ntici? +------------------------------------------ + +Funkce vracející tabulky jsou podporované PostgreSQL 7.3 a vyšší pro +jazyky C, PL/PgSQL a SQL. Více naleznete v The Programmer's Guide. +Příklady těchto funkcí pro C naleznete v contrib/tablefunc. + +5.4 Modifikoval jsem zdrojové soubory. Tato změna nebyla při rekompilaci vzata v potaz. Proč? +--------------------------------------------------------------------------------------------- + +Makefile nemá informace o závislostech mezi hlavičkovými soubory. Musíte +provést make clean a pak make. Pokud používáte gcc, můžete použít +přepínač --enable-depend příkazu configure k automatickému řešení +závislostí překladačem. + + +[1] http://developer.postgresql.org/todo.php +[2] http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM +[3] http://postgresql.ok.cz/PostgreSQL%20Administrator%27sGuide + diff --git a/doc/bug.template b/doc/bug.template index f30e759828..2a4177f536 100644 --- a/doc/bug.template +++ b/doc/bug.template @@ -25,7 +25,7 @@ System Configuration --------------------- Architecture (example: Intel Pentium) : - Operating System (example: Linux 2.0.26 ELF) : + Operating System (example: Linux 2.4.18) : PostgreSQL version (example: PostgreSQL-7.5): PostgreSQL-7.5 diff --git a/doc/src/FAQ/FAQ_czech.html b/doc/src/FAQ/FAQ_czech.html new file mode 100644 index 0000000000..9d2c43b5ff --- /dev/null +++ b/doc/src/FAQ/FAQ_czech.html @@ -0,0 +1,1088 @@ + + + + + + PostgreSQL FAQ cz + + + + + + +

Často kladené dotazy (FAQ) PostgreSQL

+ +

Obecné otázky

+1.1 Co je PostgreSQL? Jak se vyslovuje?
+1.2 Jaká je licence na PostgreSQL?
+1.3 Na kterých Unixex lze spustit PostgreSQL?
+1.4 Které ne-unixové platformy jsou podporované?
+1.5 Kde mohu získat PostgreSQL?
+1.6 Kde mohu získat podporu?
+1.7 Kde je poslední verze?
+1.8 Jaká je dostupná dokumentace?
+1.9 Kde najdu seznam známých chyb nebo nepodporovaných vlastností?
+1.10 Jak se mohu naučit SQL?
+1.11 Nemá PostgreSQL problémy s rokem 2000?
+1.12 Jak se připojit k vývojářskému týmu?
+1.13 Kam podat report o chybě?
+1.14 Jak je na tom PostgreSQL v porovnání s jinými databázemi?
+1.15 Jak lze finančně pomoci PostgreSQL?
+ +

User client dotazy

+ +2.1 Kde naleznu ODBC ovladače pro PostgreSQL?
+2.2 Jaké nástroje lze použít pro PostgreSQL a web?
+2.3 Existuje grafické rozhraní pro PostgreSQL?
+2.4 Které programovací jazyky mají podporu pro PostgreSQL?
+ +

Administrativní dotazy

+3.1 Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?
+3.2 Při startu postmaster, dostanu chybové hlášení Bad System Call nebo +core dump. Proč?
+3.3 Při startu postmastera dostanu hlášení o chybě IpcMemoryCreate. Proč?
+3.4 Při startu postmastera dostanu hlášení o chybě +IpcSemaphoreCreate. Proč?
+3.5 Jak povolit nebo zakázat přístup z jiných stanic?
+3.6 Jak ladit databázový stroj na lepší výkon?
+3.7 Jaké jsou možnosti ladění?
+3.8 Proč dostanu "Sorry, too many clients", když se zkouším připojit?
+3.9 K čemu slouží adresář pgsql_tmp?
+3.10 Proč je požadováno dump a obnovení (load) databáze během upgrade +mezi velkými verzemi PostgreSQL?
+

Provozní dotazy

+4.1 Čím se liší binární a normální kurzor?
+4.2 Jak získat pouze první řádek dotazu? Náhodný řádek?
+4.3 Jak získám seznam tabulek nebo jinak jak jej získá psql?
+4.4 Jak odstraním sloupec tabulky, jak změním jeho typ?
+4.5 Jaká je maximální velikost řádku, tabulky a databáze?
+4.6 Kolik diskového prostoru je potřeba k uložení dat z normálního +textového souboru?
+4.7 Jak získám seznam vytvořených tabulek, indexů, databází?
+4.8 Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?
+4.9 Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz?
+4.10 Co to je R-tree index?
+4.11 Co je Genetic Query Optimizer?
+4.12 Jak provést vyhledávání regulárního výrazu case sensitiv, +insensitiv? Jak použít index pro case insensitive vyhledávání?
+4.13 Jak v dotazu detekovat, že položka je NULL?
+4.14 Jaké jsou rozdíly mezi různými znakovými typy?
+4.15.1 Jak vytvořit serial/auto-increment pole?
+4.15.2 Jak získat hodnotu SERIAL po vložení řádku?
+4.15.3 Nepovede currval() a nextval() k rozhození podmínek při souběhu s jinými uživateli?
+4.15.4 Proč není vygenerované číslo použito při přerušení +transakce? Proč vznikají díry v číslování vlastní sekvencí/SERIAL +sloupce?
+4.16 Co to je OID? Co je to TID?
+4.17 Jaký je význam některých výrazů použitých v PostgreSQL?
+4.18 Proč jsem získal chybové hlášení "ERROR: Memory exhausted in +AllocSetAlloc()"?
+4.19 Jak se dozvím, kterou verzi PostgreSQL používám?
+4.20 Proč operace s velkými objekty končí "invalid large obj descriptor"?
+4.21 Jak vytvořit sloupec obsahující implicitně aktuální datum?
+4.22 Proč jsou moje vnořené dotazy používající IN tak pomalé?
+4.23 Jak provést vnější spojení (outer join)?
+4.24 Jak provést dotaz napříč několika databázemi?
+4.25 Může funkce vrátit více řádků nebo sloupců?
+4.26 Proč nelze spolehlivě vytvářet a rušit dočasné tabulky v +PL/pgSQL funkcích?
+4.27 Jaké jsou možnosti replikace databází?
+4.28 Jaké jsou možnosti šifrování databází?
+

Rozšiřování PostgreSQL

+5.1 Napsal jsem UDF funkci, PostgreSQL však končí dump core?
+5.2 Jak mohu přispět nějakými šikovnými datovými typy a funkcemi +do PostgreSQL?
+5.3 Jak napsat funkci v C vracející ntici?
+5.4 Modifikoval jsem zdrojové soubory. Tato změna nebyla při +rekompilaci vzata v potaz. Proč?
+ + + + +
+

Obecné otázky

+ +

1.1 Co je PostgreSQL? Jak se vyslovuje?

+ +

PostgreSQL se vyslovuje Post-Gres-Q-L.

+ +

PostgreSQL vychází z databáze POSTGRES - výzkumného prototypu DBMS +nové generace. Z postgresu byl převzat silný datový model a bohatý +soubor datových typů a jeho dotazovací jazyk PostQuel byl nahrazen +rozšířenou podmnožinou jazyka SQL. PostgreSQL lze používat bez +omezení a jeho zdrojové kódy jsou volně k dispozici.

+ +

PostgreSQL vyvýjí tým vývojářů přihlášených do vývojářské konference +PostgreSQL. Současným koordinátorem je Marc G. Fournier. (Odpověď +1.6. - jak se zapojit). Tento tým je zodpovědný za veškerý vývoj +PostgreSQL.

+ +

Autory první verze PostgreSQL 1.01 byli Andrew Yu and Jolly +Chen. Do portace, testování, ladění a +rozšiřování kódu se zapojilo mnoho dalších vývojářů . Původni kód Postgresu, ze kterého PostgreSQL +vychází, je výsledkem úsilí mnoha studentů a programátorů pracujících +pod vedením prof. Michaela Stonebrakera na University of California v +Berkley.

+ +

Původní název software z Berkley byl Postgres. Po přidání jazyka SQL +se název změnil na Postgres95. Koncem roku 1996 byl RDBMS +přejmenován na PostgreSQL.

+ +

1.2 Jaká je licence na PostgreSQL?

+ +

PostgreSQL je předmětem následujících autorských práv:

+ +

Dílčí copyright (c) 1996-2002, PostgreSQL Global Development Group

+ +

Dílčí copyright (c) 1994-6, Regents of the University of California

+ + +

Uděluje se oprávnění k užití, rozmnožování, provádění úprav a + rozšiřování tohoto softwaru a dokumentace k němu, pro jakékoli účely, + bez licenčního poplatku a bez písemné licenční smlouvy, za podmínky, že + na všech jeho kopiích je uvedeno oznámení o výše uvedených právech, + jakož i obsah tohoto a dvou následujících odstavců.

+ + +

THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ŽÁDNÉM + PŘÍPADĚ ODPOVĚDNA ŽÁDNÉ TŘETÍ OSOBĚ ZA PŘÍMOU, NEPŘÍMOU, ZVLÁŠTNÍ, + NAHODILOU NEBO VýSLEDNOU ŠKODU, VČETNĚ UŠLÉHO ZISKU, ZPůSOBENOU UŽITÍM + TOHOTO SOFTWARU A DOKUMENTACE K NĚMU, A TO I V PŘÍPADĚ, ŽE THE + UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOŽNOSTI VZNIKU TAKOVÉ ŠKODY.

+ + +

THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO + NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VýROBKU KE SPECIFICKýM + ÚČELůM. NÍŽE UVEDENý SOFTWARE JE POSKYTNUT "JAK STOJÍ A LEŽÍ" A THE + UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO ÚDRŽBU, PODPORU, + AKTUALIZACI, VYLEPŠENÍ NEBO MODIFIKACI.

+ +

Výše uvedené je BSD licence, běžná licence otevřeného zdroje. Není zde + žádné omezení ohledně užití kódu zdroje. Jsme s tím spokojeni a nemáme v + úmyslu na této skutečnosti cokoli měnit.

+ + +

1.3 Na kterých Unixex lze spustit PostgreSQL?

+ +

PostgreSQL běží na všech moderních unixových platformách. V instalačních +instrukcích naleznete aktuální seznam všech platforem na kterých byla +testováním ověřena funkcionalita PostgreSQL.

+ +

1.4 Které ne-unixové platformy jsou podporované?

+ +

Klient

+ +

Knihovna libpq, psql a některé další moduly byly přeloženy pro +MS Windows. Klienta lze provozovat na MS Windows, ten prostřednictvím +TCP/IP protokolu komunikuje se serverem běžícím na některé z podporovaných +Unixových platforem. K překladu lze použít win32.mak a +Win32 knihovny libpq a psql. K databázi PostgerSQL lze přistupovat skrze +rozhraní ODBC.

+ +

Server

+

Server může být na WindowsNT a Win2k provozován pouze s knihovnou Cygwin, +Cygnus Unix/NT porting library. Na nativním portu pro MS Win NT/2000/XP +se pracuje. Existující port pro Novell Netware 6 naleznete na +http://forge.novell.com.

+ +

1.5 Kde mohu získat PostgreSQL?

+ +

Primárním anonymním ftp serverem pro PostgreSQL je +ftp://ftp.PostgreSQL.org/pub +. Seznam zrcadel naleznete na našich +webových stránkách.

+ +

1.6 Kde mohu získat podporu?

+ +

Hlavním mailová konference je pgsql-general@PostgreSQL.org. Slouží +k diskuzím ohledně PostgreSQL. Přihlásíte se zasláním mailu +obsahující následující řádky v těle dopisu (nikoliv v záhlaví - subjectu)

+
subscribe
+end
+
+na adresu mailto:pgsql-general-request@PostgreSQL.org.

+ +

Můžete si vyžádat denní přehled (diggest), který má zhruba 30K denně zpráv. + +

Konference psql-bugs je určena k zasílání zpráv o chybách. Pro přihlášení +pošlete mail se stejným obsahem jako v předchozím případě na adresu +mailto:pgsql-bugs-request@PostgreSQL.org.

+ +

Do vývojářské konference se přihlásíte odesláním dopisu s +již zmiňovaným obsahem na mailto:pgsql-hackers-request@PostgreSQL.org.

+ +

Seznam dalších konferencí naleznete na stránkách PostgreSQL +http://www.postgresql.org

+ +

1.7 Kde je poslední verze?

+ +

Poslední verzí je PostgreSQL 7.4.. Plánujeme uvolnit velkou verzi +každých šest až osm měsíců.

+ +

1.8 Jaká je dostupná dokumentace?

+ +

Různé manuály, manuálové stránky a několik malých testovacích příkladů +jsou součásti distribuce. Podívejte se do adresáře /doc. Manuály jsou +přístupné online na http://www.PostgreSQL.org/docs.

+ +

Na adresách http://www.PostgreSQL.org/docs/awbook.html a +http://www.commandprompt.com/ppbook/ naleznezte dvě online knihy o +PostgreSQL. Seznam dostupné literatury je na +http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor +technických článků s tematikou PostgresQL najdete na +http://techdocs.PostgreSQL.org/.

+ +

psql má užitečný metapříkaz \d sloužící k zobrazení informací +o typech, operátorech, funkcí, agregačních funkcí atd.

+ +

Více dokumentace naleznete na našich webových stránkách.

+ +

1.9 Kde najdu seznam známých chyb nebo nepodporovaných vlastností?

+ +

PostgreSQL podporuje rozšířenou podmnožinu SQL-92. V našem TODO najdete +seznam známých chyb, chybějících vlastností a seznam vlastností, +které budou do systému implementovány v budoucnu (včetně priorit).

+ +

1.10 Jak se mohu naučit SQL?

+ +

V knize The PostgreSQL book na http://www.PostgreSQL.org/docs/awbook.html +je vysvětlen jazyk SQL (vyšla česky). Další dostupnou knihou je +http://www.commandprompt.com/ppbook. Kvalitní návody naleznete na +http://www.intermedia.net/support/sql/sqltut.shtm, na +http://www.intermedia.net/support/sql/sqltut.shtm, +a na http://sqlcourse.com.

+ +

Další je Teach Yourself SQL in 21 days, Second Edition na +http://members.tripod.com/er4ebus/sql/index.htm.

+ +

Mnoho uživatelů doporučuje The Practical SQL Handbook, Bowman, Judith +S., et al., Addison-Wesley. Jiní preferují The Complete Reference SQL, +Groff et al., McGraw-Hill.

+ +

1.11 Nemá PostgreSQL problémy s rokem 2000?

+ +

Nemá, můžeme pracovat s datumy po roce 2000 našeho letopočtu i před +rokem 2000 př.n.l.

+ +

1.12 Jak se připojit k vývojářskému týmu?

+ +

Nejdříve si stáhněte nejnovější zdroje a přečtěte si vývojářskou +dokumentaci na našem webu nebo v distribuci. Pak se přihlašte do +konferencí pgsql-hackers a pgsql-patches. Kvalitní záplaty +posílejte do pgsql-patches.

+ +

Právo commit má v cvs archivu asi třinácti lidí. Každý z nich +poslal mnoho kvalitních záplat, takže tehdejší commiters měli +jistotu, že budou předkládat jenom kvalitní záplaty a mohli jim +předělit větší práva.

+ +

1.13 Kam podat report o chybě?

+ +

Navštivte naši PostgreSQL BugTool stránku na +http://www.PostgreSQL.org/bugs/bugs.php, která obsahuje návod a +směrnice jak podat chybový report.

+ +

Ověřte si na našem ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li +máte nejnovější verzi PostgreSQL a zda-li k ní neexistují nějaké záplaty.

+ +

1.14 Jak je na tom PostgreSQL v porovnání s jinými databázemi?

+ +

Existuje několik hledisek jak porovnávat software: vlastnosti, výkon, +spolehlivost, podpora a cena.

+ +

Vlastnosti

+

PostgreSQL má hodně společných vlastností s velkými komerčními + DBMS, např. transakce, vnořené dotazy, spouště, pohledy, + kontrolu referenční integrity a sofistikované + zamykání. Podporuje některé vlastnosti, které tyto systémy + nemají, uživatelem definované typy, dědičnost, pravidla, MVCC + redukující zamykání.

+ +

Výkon

+

Výkonnostně je na tom PostgreSQL podobně jako další komerční + ale i open source databáze, v něčem je rychlejší, jindy + pomalejší. V porovnání s MySQL a podobnými databázovými + systémy je PostgreSQL rychlejší při víceuživatelském + přístupu, složitějších dotazech a zatížení read/write dotazy. MySQL + je rychlejší v jednodušších dotazech s malým počtem + uživatelů. Navíc, MySQL nepodporuje mnohé vlatnosti zmíněné v + sekci vlastnosti. Zapracovali jsme na spolehlivosti a podporovaných + vlastnostech, a výkon zvyšujeme v každé + verzi. Zajímavou stránku porovnávající PostgreSQL a MySQL + naleznete na + http://openacs.org/philosophy/why-not-mysql.html. Za vývojem MySQL + není Open Source komunita, ale komerční společnost, přestože + svoje produkty distribuuje jako Open Source.

+ +

Spolehlivost

+

Jsme si vědomi, že databáze musí být spolehlivá, jinak je + nepoužitelná. Snažíme se zveřejňovat dobře otestovaný, stabilní kód s + minimem chyb. Každá verze je více než měsíc v beta testování, + a naše historie verzí ukazuje, že můžeme nabídnout stabilní, + solidní verze, které jsou připraveny pro reálné nasazení. V + této oblasti jsme srovnatelní s dalšími databázemi.

+ +

Podpora

+

Na naší mailové konferenci můžete kontaktovat velkou skupinu + vývojářů a uživatelů.problémů. Nemůžeme garantovat opravu, + nicméně komerční databáze také ne vždy nabídnou opravu. Podle ohlasů + je naše podpora hodnocena lépe než u jiných DBMS a to díky + přímému kontaktu s vývojáři, velkou komunitou uživatelů, + kvalitními manuály a přístupným zdrojovým kódem. Pro uživatele, + kteří vyžadují podporu ke konkrétním případům, existuje placená podpora + (FAQ sekce 1.6).

+ +

Cena

+

PosgreSQL lze volně používat pro nekomerční i komerční + použití. Můžete do svých produktů přidat náš kód bez omezení, + respektive v souladu s podmínkami naší licenční smlouvy (v duchu BSD + licence).

+ +

1.15 Jak lze finančně pomoci PostgreSQL?

+ +

PosgreSQL má prvotřídní infrastrukturu od našeho začátku v roce +1996. Vděčíme za to Marku Fournierovi, který založil a spravoval tuto +infrastrukturu několik let.

+ +

Kvalitní infrastruktura je velice důležitá pro každý open source +projekt. Předchází nedorozuměním, která velice zdržují pokrok v projektu.

+ +

Tato infrastruktura není laciná. K jejímu zajištění je třeba stále hradit určité +měsíční a jednorázové částky. Pokud máte Vy nebo Vaše společnost +peníze, které nám můžete darovat, obraťe se na http://store.pgsql.com/shopping/ a darujte je.

+ +

Ačkoliv webová stránka zmiňuje PostgreSQL, Inc. vklady jsou určeny +pouze k podpoře projektu PostgreSQL a nepodporují žádnou existující +společnost. Pokud to vyžadujete, můžete poslat kontrolu na naši kontaktní +adresu.

+ +

Pokud máte příklad úspěšného nasazení PostgreSQL, přihlaště se na náš +advocacy site na http://advocacy.postgresql.org.

+
+ +

User client dotazy

+ +

2.1 Kde naleznu ODBC ovladače pro PostgreSQL?

+ +

Pro PostgreSQL existují dva ODBC ovladače - PsqlODBC a OpenLink ODBC.

+ +

PsqlODBC je ke stažení na http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.

+ +

OpenLink můžete získat na http://www.openlinksw.com. Spolupracuje +s jejich klientským programovým vybavením a je dostupný pro všechny jimi +podporované platformy (Win, Mac, Unix, VMS).

+ +

Tento ovladač je určen pro ty, kteří vyžadují podporu komerční kvality, +nicméně freeware verze je dostupná a funkční. Dotazy zasílejte +na postgres95@openlink.co.uk.

+ +

2.2 Jaké nástroje lze použít pro PostgreSQL a web?

+ +

Pěkný úvod do databázových technologií zabezpečujících chod +webových stránek najdete na http://www.webreview.com.

+ +

Pro tvorbu webu existuje excelentní rozhraní PHP, které naleznete na +http://www.php.net.

+ +

Pro složitější případy se často používá Perl a CGI.pm nebo mod_perl.

+ +

2.3 Existuje grafické rozhraní pro PostgreSQL?

+ +

Pro PostgreSQL existuje několik grafických rozhraní: +PgAccess (http://www.php.net), PgAdmin (http://www.php.net), RHDB +Admin (http://sources.redhat.com/rhdb/) a Rekall +(http://www.thekompany.com/products/rekall/). Dále existuje +PHPPgAdmin (http://phppgadmin.sourceforge.net/) rozhraní +PostgreSQL založené na web technologii.

+ +

Úplnější seznam najdete na http://techdocs.postgresql.org/guides/GUITools.

+ +

2.4 Které programovací jazyky mají podporu pro PostgreSQL?

+ +

Většina programovacích jazyků obsahuje rozhraní pro +PostgreSQL. Podívejte se do rozšiřujících modulů Vašeho programovacího +jazyka.

+ +

Distribuce PostgreSQL obsahuje tato rozhraní: +

+

Další rozhraní jsou dostupná na http://gborg.postgresql.org v sekci +Drivers/Interfaces.

+
+ +

Administrativní dotazy

+ +

3.1 Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?

+ +

Použijte volbu --prefix při spuštění configure

+ +

3.2 Při startu postmaster, dostanu chybové hlášení Bad System Call nebo +core dump. Proč?

+ +

Důvody mohou být různé, ale nejprve zkontrolujte, zda Váš systém +podporuje System V extensions. PostgreSQL vyžaduje v jádře podporu +sdílené paměti a semaforů.

+ +

3.3 Při startu postmastera dostanu hlášení o chybě IpcMemoryCreate. Proč?

+ +

Buďto nemáte správně nakonfigurovanou sdílenou paměť v jádře nebo +musite zvětšit její velikost. Potřebná velikost je závislá na +architektuře a na tom, kolik paměťových bufferů a backendů máte povoleno +pro postmastera. Pro většinu systémů s +předdefinovaným počtem backendů a paměťových bufferů je +minimum zhruba 1MB. V http://www.postgresql.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html +naleznete podrobnější informace o sdílené paměti a semaforech.

+ +

3.4 Při startu postmastera dostanu hlášení o chybě +IpcSemaphoreCreate. Proč?

+ +

Pokud dostane chybovou zprávu IpcSemaphoreCreate: semget failed (No +space left on device), pak vaše jádro nemá dost volných semaforů. PostgreSQL +vyžaduje jeden semafor pro každý backend v pozadí. Dočasným +řešením je start postmastera s limitem backendů. Použijte +přepínač -N s hodnotou menší než 32. Úplným řešením je zvýšení hodnot +SEMMNS a SEMMNI jadra.

+ +

Nefunkční semafory mohou způsobit pád během intenzivních databázových +operací.

+ +

Pokud se tato chyba vyskytuje ještě někde jinde, možná nemáte vůbec +nakonfigurovány semafory ve vašem jádře. V PostgreSQL +Administrator's Guide najdete podrobnější popis požadavků na sdílenou +pamět a semafory.

+ +

3.5 Jak povolit nebo zakázat přístup z jiných stanic?

+ +

Při výchozím nastavení PostgreSQL odepře přístup z jiných stanic než +lokální s použitím UDP. Databáze se zpřístupní jiným stanicím +nastavením přepínače -i postmastera a povolením stanice a určením +režimu autentifikace v $PGDATA/pg_hba.conf. Tím se povolí TCP/IP +spojení. ZASTARALÉ

+ +

3.6 Jak ladit databázový stroj na lepší výkon?

+ +

Určitě pomohou indexy. Příkaz EXPLAIN zobrazí způsob interpretace +Vašeho dotazu a použití indexů.

+ +

Při větší dávce INSERTů uvažujte o náhradě příkazem COPY. Ten je +mnohem rychlejší nežli samotný INSERT. Každý příkaz mimo blok +BEGIN WORK/COMMIT se provádí ve vlastní transakci. Zvažte, zda-li by +se nedalo několik příkazů spojit do jedné transakce. Tím se sníží +režie na transakce. Před provedením rozsáhlých změn zrušte indexy, +které po dokončení změn opět vytvořte.

+ +

Máte několik dalších možností, jak zlepšit výkon. Můžete zakázat fsyn() +při startu postmastera přepínači -o -F. Tyto přepínače zabrání +fsync(), tj. zápisu na disk po každé transakci.

+ +

Můžete zvýšit velikost paměťových bufferů použitých backendy +tj. parametr -B postmasteru. Pokud ale tato hodnota bude příliš +velká, tak možná nespustíte postmastera jelikož dosáhnete limitu +sdílené paměti. Každý buffer má 8K a implicitně je 64 bufferů.

+ +

Dále můžete použít přepínač -S k zvýšení limitu paměti pro backendy +na dočasné třídění. Hodnota je míněna v kilobytech a výchozí +nastavení je 512, tj. 512K.

+ +

Můžete použít příkaz CLUSTER, který uspořádá fyzicky data v +tabulkách podle indexu. Více na manuálových stránkách příkazu +CLUSTER.

+ +

3.7 Jaké jsou možnosti ladění?

+ +

Máte několik možností jak se dostat k užitečným stavovým informacím.

+ +

Zaprvé, při překladu použijte přepínač --enable-cassert, tím se zapne +monitorování a následné zastavení aplikace, když se proces v backendu +dostane do neočekávaného stavu.

+ +

Jak postmaster tak postgres má několik přepínačů umožňujících +ladění. Postmaster nastartujte tak, abyste si byli jisti, že je +standartní výstup a standartní chybový výstup přesměrován do souboru +logu, například:

+
cd /usr/local/pgsql
+./bin/postmaster > server.log 2>&1 &
+
+

Tím se vytvoří log v adresáři PostgreSQL, Tento soubor obsahuje +užitečné informace o problémech a chybách vyskytlých se na +serveru. Postmaster má přepínač -d určující, jak podrobné mají být +reportované informace, tj. debug level. Pozor, při velké hodnotě debug +levelu rychle roste velikost souboru logu.

+ +

Pokud neběží postmaster, můžete spustit backend PostgreSQL z příkazové +řádky a napsat svůj SQL dotaz přímo v backendu (doporučeno pouze pro +ladění). Dotaz je v tomto případě ukončen novou řádkou, nikoliv +středníkem. Pokud máte aplikaci přeloženou s ladícími symboly, můžete +použít debbuger k monitorování procesu. Pokud není backend spuštěn +postmasterem, pak neběží ve svém obvyklém prostředí a tudíž některé problémy +dané interakcí mezi backendy nemohou být nasimulovány.

+ +

Pokud běží postmaster, spusťe psql v jednom okně a pak si zjistěte PID +procesu postgres použitého psql. V debuggeru sepřipojte k postgresql +PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v +psql. Pokud ladíte startup postgresu, pak nastavte PGOPTIONS="-W n" a +spusťe psql. Tento přepínač způsobí pauzu n sekund, takže budete mít +čas se připojit k procesu, a nastavit breakpointy a pokračovat v +startup posloupnosti.

+ +

Pro ladění a měření výkonu mohou být užitečné přepínače -s, -A a -t +programu postgres (backend).

+ +

Můžete provést překlad s profilací, tak abyste viděli kolik času +zabírají jednotlivé funkce. Soubory s profily backendů jsou uloženy v +adresáři pgsql/data/base/dbname. Profil klienta pak v jeho aktuálním +adresáři. Korektní profilace v prostředí Linux požaduje konfiguraci +systému s parametrem -DLINUX_PROFILE.

+ +

3.8 Proč dostanu "Sorry, too many clients", když se zkouším připojit?

+ +

Zvyšte limit postmastera na maximální počet současně spuštěných backendů.

+ +

Výchozí hodnota je 32 backendů. Tuto hodnotu zvýšíte zastavením a +opětovným spuštěním postmastera s parametrem -N nebo úpravou postgresql.conf.

+ +

Při zvýšení hodnoty -N nad 32 musíte zvýšit hodnotu -B nad výchozí 64, +-B musí být minimálně dvakrát větší, nebo ještě lépe více. Pravděpodobně +zjistíte, že pro velký počet procesů backendu je nutné zvýšit některé +parametry jádra. Jsou to především maximální velikost sdílené paměti SHMMAX, +maximální počet semafórů SEMMNS a SEMMNI, maximální počet procesů NPROC, +maximální počet procesů uživatele MAXUPRC a maximální počet otevřených souborů +NFILE a NINODE. Důvod pro omezení maximálního počtu backendů je fakt, +že by mohlo dojít k vyčerpání zdrojů Vašeho systému.

+ +

3.9 K čemu slouží adresář pgsql_tmp?

+ +

Tento adresář obsahuje dočasné soubory vytvořené exekutorem +dotazů. Například, když je nutné třídění k zajištění ORDER BY a +třídění má větší nároky na prostor než povoluje parametr -S +backendu, pak je vytvořen dočasný soubor k uložení extra údajů.

+ +

Dočasné soubory jsou obvykle mazány automaticky, ale může se stát, že +během třídění server spadne. Zastavení a další start postmastera zajistí +odstranění souborů s těchto adresářů.

+ +

3.10 Proč je požadováno dump a obnovení (load) databáze během upgrade +mezi velkými verzemi PostgreSQL?

+ +

PostgreSQL se minimálně mění během malých verzí, takže např. při upgrade z +7.2 na 7.2.1 není nutné dump a load databáze. Ale velké verze často mění +interní formát systémových tabulek a datových souborů. Tyto změny jsou +natolik rozsáhlé, že nelze zajistit zpětnou kompatibilitu pro datové +soubory. Dump uloží data v obecném formátu, takže mohou být načtena a +používána v novém interním formátu.

+
+ +

Provozní dotazy

+ +

4.1 Čím se liší binární a normální kurzor?

+ +

Popis najdete v manuálové stránce DECLARE

+ +

4.2 Jak získat pouze první řádek dotazu? Náhodný řádek?

+ +

Podívejte se do man. stránky příkazu FETCH, nebo použijte SELECT ... +LIMIT ...

+ +

Není nutné zpracovávat celý dotaz, když potřebujete pouze několik prvních +řádků. Pokud existuje index ORDER BY, PostgreSQL je schopen přerušit +zpracování dotazu po získání požadovaného počtu řádků.

+ +

K získání náhodného řádku použijte:

+
SELECT col FROM tab
+  ORDER BY random() LIMIT 1;
+
+

4.3 Jak získám seznam tabulek nebo jinak jak jej získá psql?

+ +

Podívejte se do zdrojových kódů psql do souboru +pgsql/src/bin/psql/describe.c. Ten obsahuje SQL příkazy, které se +používají v psql metapříkazech. Dále můžete spustit psql s přepínačem +-E, který způsobí zobrazení každého dotazu, které zpracování +metapříkazu vyvolá.

+ +

4.4 Jak odstraním sloupec tabulky, jak změním jeho typ?

+ +

Počínaje verzí 7.3 můžete použít příkaz ALTER TABLE DROP COLUMN. Ve +starších verzích můžete použít následující postup:

+
BEGIN;
+LOCK TABLE old_table;
+SELECT ... -- mimo sloupec, který chceme odstranit
+  INTO TABLE new_table;
+DROP TABLE old_table;
+ALTER TABLE new_table RENAME TO old_table;
+COMMIT;
+
+

Pro změnu typu sloupce je třeba provést:

+
BEGIN;
+ALTER TABLE tab ADD COLUMN new_col new_data_type;
+UPDATE tab SET new_col = CAST(old_col AS new_data_type;
+ALTER TABLE tab DROP COLUMN old_col;
+COMMIT;
+
+

Poté proveďte VACUUM FULL tab - uvolníte tím diskový prostor zabraný +nyní již neplatnými řádky.

+ +

4.5 Jaká je maximální velikost řádku, tabulky a databáze?

+ +

PostgreSQL má tato omezení:

+ +
Maximální velikost databáze: neomezena (existují 32TB db) +
Maximálné velikost tabulky: 32 TB +
Maximální velikost řádky: 1.6 TB +
Maximální velikost položky 1 GB +
Maximální počet řádků v tabulce: neomezeno +
Maximální počet sloupců v tabulce: 250-1600 podle typů +
Maximální počet indexů na tabulce: neomezeno +
+

Ve skutečnosti nic není neomezeno, limitem bývá vždy dostupná disková +paměť nebo velikost operační paměti. Pokud máte některou z těchto +hodnot neobvykle velkou, může dojít ke snížení výkonu.

+ +

Maximální velikost tabulky je 32 TB a nevyžaduje podporu velkých souborů +operačním systémem. Velké tabulky se ukládají do několika 1 GB souborů +takže limity souborového systému nejsou podstatné.

+ +

Maximální velikost tabulky a maximální počet sloupců můžeme +zečtyřnásobit nastavením velikosti bloku na 32K.

+ +

4.6 Kolik diskového prostoru je potřeba k uložení dat z normálního +textového souboru?

+ +

PostgreSQL vyžaduje až pětinásobek diskového prostoru k uložení dat z +textového souboru.

+ +

Například, uvažujme soubor se 100 tisíci řádky obsahující na každé +řádce celé číslo a textový popis. Text je v průměru dvacet bytů +dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost +databáze obsahující odpovídající data bude zhruba 6.4 MB.

+
 36 bytů: hlavička řádku (přibližně)
+ 24 bytů: jedna celočíselná položka a jedna textová
+  4 byty: ukazatel na stránku k ntici
+------------------------------------------------------
+ 64 bytů na řádek
+
+

Velikost datové stránky PostgreSQL je 8KB

+
 8192 bytů na stránce
+---------------------- = 128 řádek na stránku
+  64 bytů za řádek
+
+100000 řádek
+-------------------- = 782 stránek (zaokrouhleno nahoru)
+128 řádek na stránce
+
+782 * 8192 = 6, 406, 144 bytů (6.4 MB)
+
+

Indexy nemají tak velkou režii, ale mohou být také velké, +protože obsahují indexovaná data.

+ +

Hodnoty NULL jsou uloženy v bitmapách, takže spotřebují jen velmi málo +diskového prostoru.

+ +

4.7 Jak získám seznam vytvořených tabulek, indexů, databází?

+ +

psql má sadu metapříkazů k zobrazení těchto informací. Jejich seznam +získáte příkazem \?. Dále se můžete podívat na obsah systémových +tabulek začínajících pg_. Spuštění psql s parametrem -l provede +výpis názvů všech databází.

+ +

Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy přistupující +k systémovým tabulkámm.

+ +

4.8 Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?

+ +

Každý dotaz nemusí nutně použít existující indexy. Index se použije tehdy, +když je tabulka větší než určitá minimální velikost, a dotaz vybírá +pouze procentuálně malou část řádků tabulky. To proto, že náhodný +přístup k disku daný čtením indexu může být pomalejší než lineární +čtení tabulky nebo sekvenční čtení,

+ +

PostgreSQL rozhoduje o použití indexů na základě statistiky přístupů k +tabulce. Tyto statistiky se shromažďují příkazy VACUUM ANALYZE nebo +ANALYZE. Díky statistikám má optimizer informaci o počtu řádek v +tabulce a může lépe rozhodnout o použití indexů. Statistiky se uplatní +při určení optimálního pořadí a metody spojení tabulek. Statistiky by +se měli aktualizovat opakovaně, tak jak se mění obsah tabulek.

+ +

Indexy nejsou obyčejně použity pro setřídění nebo spojení +tabulek. Sekvenční zpracování následované explicitním tříděním je +obyčejně rychlejší než indexní čtení na velké tabulce.

+ +

Jinak je tomu v případě použití LIMIT a ORDER BY, při kterém se +většinou index použije, výsledkem je pouze malá část tabulky. Funkce +MAX() a MIN() nepoužívají indexy, ale je možné tutéž hodnotu získat

+
SELECT col FROM tab
+  ORDER BY col [ DESC ] LIMIT 1;
+
+

Pokud si myslíte, že optimizer mylně zvolil sekvenční prohledávání +tabulky, použijte příkaz SET enable_seqscan TO 'off' a zkuste zda je +indexní prohledávání rychlejší.

+ +

Při vyhledávání na základě vzoru jako je např. operátor LIKE nebo ~ se +indexy použíjí pouze za určitých skutečností:

+ + +

4.9 Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz?

+ +

Podívejte se do manuálové stránky příkazu EXPLAIN.

+ +

4.10 Co to je R-tree index?

+ +

R-tree index se používá pro indexování prostorových dat. Hash index +nemůže obsloužit prohledávání oblastí. B-tree index může řídit +vyhledání oblastí v jedné dimenzi. R-tree index může podporovat hledání v +multidimenzionálních datech. Použijeme-li například R-tree index na +atributy typu point, pak systém může efektivně odpovědět na dotaz - +vyber všechny body uvnitř obdélníků.

+ +

Původní návrh R-tree je 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

+ +

Tyto materiály naleznete v Stonebraker's "Readings in Database Systems".

+ +

Vestavěné R-tree může sloužit k indexaci polygonů a +oblastí. Teoreticky můžeme R-tree použít i pro více dimenzí (jiné než 3D). +Ve skutečnosti ale takové rozšíření R-tree vyžaduje trochu práce a +ve součastnosti chybí dokumentace jak na to.

+ +

4.11 Co je Genetic Query Optimizer?

+ +

GEQO modul urychluje optimalizaci dotazů při spojování množství +tabulek metodou Genetických algoritmů (GA). To umožňuje získat +velkého množství variant spojení při neúplném prohledáváním.

+ +

4.12 Jak provést vyhledávání regulárního výrazu case sensitiv, +insensitiv? Jak použít index pro case insensitive vyhledávání?

+ +

Operátor ~ slouží k porování s regulárním výrazem, jeho modifikace *~ +představuje case insensitive vyhledávání. Jedná se o obdobu LIKE a +ILIKE.

+ +

Pro vyhledávání bez ohledu na velká malá písmena použijeme

+
SELECT * FROM tab
+  WHERE lower(col) = 'abc';
+
+

V tomto případě se nepoužije standardní index. Nicméně, použije se +funkcionální index, pokud jej vytvoříte

+
CREATE INDEX tabindex ON tab (lower(col));
+
+

4.13 Jak v dotazu detekovat, že položka je NULL?

+ +

Určíte pomocí IS NULL nebo IS NOT NULL

+ +

4.14 Jaké jsou rozdíly mezi různými znakovými typy?

+
Typ         Interní název       Poznámka
+--------------------------------------------------------------------------
+VARCHAR(n)  varchar		omezeno maximální délkou, bez doplnění mezerami
+CHAR(n)	    bpchar		řetězec je doplněn mezerami do dané délky
+TEXT	    text		bez horního limitu na délku 
+BYTEA	    bytea		pole bytů (bezpečně lze uložit i znak NULL)
+"char"	    char		jeden znak
+
+

S interními názvy se setkáte v systémovém katalogu a v některých +chybových hlášeních.

+ +

První čtyři uvedené typy jsou tzv. varlena typy (tj. první čtyři byty +na disku nesou údaj o délce, následují samotná data). Proto skutečný +použitý prostor je vždy o něco málo větší než deklarovaná délka. Naopak, +tyto datové typy jsou komprimovánty TOASTem, takže prostor na disku +může být nižší než je očekáváno.

+ +

VARCHAR(n) je vhodný pro ukládání textů promměné délky s pevně +stanovenou maximální délkou. TEXT je pro řetězce bez omezení délky s +maximem jeden gigabajt.

+ +

CHAR(n) slouží k ukládání řetězců stejné délky. CHAR(n) doplní prázdné +znaky do specifikované délky, zatímco VARCHAR(n) uloží pouze předané +znaky. BYTEA je určeno pro ukládání binárních dat, včetně NULL +byte. Všechny zde popsané typy mají podobné výkonnostní +charakteristiky.

+ +

4.15.1 Jak vytvořit serial/auto-increment pole?

+ +

PostgreSQL podporuje typ SERIAL. Při jeho použití se automaticky +vytvoří SEQUENCE a index na sloupci (Pro vyšší verze to neplatí +OVĚŘIT). Například:

+
CREATE TABLE person (
+  id SERIAL,
+  name TEXT
+);
+
+je automaticky převedeno do +
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);
+
+

Viz dokumentace create_sequence v manuálových stránkách. Dále můžete použít +unikátní hodnotu OID každého řádku. Potom ale musíte spouštět pg_dump +s přepínačem -o, tak aby zůstaly zachovány hodnoty OID (u příkazu +copy COPY WITH OIDS).

+ +

4.15.2 Jak získat hodnotu SERIAL po vložení řádku?

+ +

Jednou z možností je získat budoucí hodnotu SERIAL funkcí nextval před +samotným vložením a pak ji vložit explicitně. Například v jakémsi +pseudojazyku

+
newid = execute("SELECT nextval('person_id_seq')");
+execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
+
+

Můžete pak ještě použít hodnotu newid v dalších dotazech, např. jako +hodnotu cizího klíče. Název automaticky vytvořené sekvence je +tabulka_sloupec_seq.

+ +

Alternativně můžete získat hodnotu posledně generovou sekvencí funkcí +currval() po vložení

+
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
+new_id = execute("SELECT currval('person_id_seq')");
+
+

Konečně můžete použít OID hodnotu vrácenou příkazem INSERT, ale to je +pravděpodobně nejméně přenositelné řešení. V Perlu při použití DBI +modulu Edmunda Mergleho DBD:Pg oid hodnotu získáme +$sth->{pg_oid_status} po každém $sth->execute().

+ +

4.15.3 Nepovede currval() a nextval() k rozhození podmínek při souběhu s jinými uživateli?

+ +

Nikoliv, currval() vrací hodnotu naposledy generovanou ve vašem +backendu, a ta tudíž není společná všem uživatelům.

+ +

4.15.4 Proč není vygenerované číslo použito při přerušení +transakce? Proč vznikají díry v číslování vlastní sekvencí/SERIAL +sloupce?

+ +

K zajištění efektivnosti souběhu, jsou hodnoty posloupnosti, když se o ně +požádá, a sekvence není zamčena do ukončení transakce. To způsobuje +díry v číslování ze zrušených transakcí.

+ +

4.16 Co to je OID? Co je to TID?

+ +

Každý řádek vytvořený v PostgreSQL získá jedinečné OID. Všechna OID +generovaná během inicializace databáze jsou menší než 16384 +(include/access/transam.h). Všechna OID generovaná na požadavek +uživatele jsou rovna nebo vyšší této hodnotě. Normálně, všechna OID +jsou jedinečná nejen uvnitř tabulky nebo databáze, ale v rámci celé +instalace PostgreSQL

+ +

PostgreSQL používá OID ve svém interním systému tabulek k vytvoření +relací. Tato OID mohou být použita k identifikaci konkrétního +uživatele a použita v spojení. Pro OID hodnoty je doporučen typ +OID. Nad tímto sloupcem můžete vytvořit index pro urychlení přístupu.

+ +

OID jsou dána všem řádkům z centrální oblasti a jsou použita v každé +databázi. Pokud potřebujete změnit OID, nebo chcete zkopírovat tabulku +s původními OID, lze použít

+
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';
+
+

OID jsou uložena jako 4bajtový integer a přetečou po čtyřech +miliardách. Nebylo hlášeno, že by se tak někdy stalo, přesto ale plánujeme +odstranit tento limit dřív než se tak stane.

+ +

TID se používají i identifikaci fyzických řádků s hodnotou bloku a +offsetu. TIDs se mění modifikací řádků (používá se jako ukazatel +indexu fyzického řádku).

+ +

4.17 Jaký je význam některých výrazů použitých v PostgreSQL?

+ +

V některých zdrojových kódech nebo starší dokumentaci se můžete setkat +s následujícími výrazy, které mají širší význam. Zde je příklad +nekterých:

+ +

seznam těchto výrazů můžete nalézt na +http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html.

+ +

4.18 Proč jsem získal chybové hlášení "ERROR: Memory exhausted in +AllocSetAlloc()"?

+ +

Pravděpodobně došlo k vyčerpání virtuální paměťi na Vašem systému, nebo +jádro má nízký limit pro určité zdroje. Vyzkoušejte před startem +posmatera

+
ulimit -d 262144
+limit datasize 256m
+
+

Záleží na Vašem shellu, zda budou tyto příkazy úspěšné, měly by zvýšit +limit datového segmentu pro Vaše procesy a umožnit tak dokončení +dotazu. Tyto příkazy se aplikují na aktuální proces a všechny synovské +procesy vytvořené po provedení příkazu. Pokud máte problémy s SQL +klientem protože backend vrací příliš mnoho dat, zkuste zvýšit limity +před startem klienta.

+ +

4.19 Jak se dozvím, kterou verzi PostgreSQL používám?

+ +

V psql spusťte

+
SELECT version();
+
+

4.20 Proč operace s velkými objekty končí "invalid large obj descriptor"?

+ +

Všechny operace s velkými objekty - lo_open, lo_close, ... musíte +spouštět v transakci, tj. mezi příkazy BEGIN WORK a COMMIT.

+ +

PostgreSQL uvolňuje handle velkých objektů při skončení transakce. Pokud +budete pracovat s velkými objekty mimo transakci, pravděpodobně dostanete +toto chybové hlášení, protože handle již budou neplatné.

+ +

Pokud používáte interface podobné ODBC musíte nastavit set auto_commit off

+ +

4.21 Jak vytvořit sloupec obsahující implicitně aktuální datum?

+ +

Použijte CURRENT_TIMESTAMP

+
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
+
+

4.22 Proč jsou moje vnořené dotazy používající IN tak pomalé?

+ +

Aktuálně spojujeme tabulky se sekvenčním skenováním výsledku pro každý +řádek vnějšího dotazu. Pokud vnořený dotaz má pouze několik řádků a +vnější dotaz vrací hodně řádek, IN je rychlé. V jiných případech +nahraďte IN EXISTS:

+
SELECT * FROM tab
+  WHERE col IN (SELECT subcol FROM subtab);
+
+takto +
SELECT * FROM tab
+  WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
+
+

Pro urychlení vytvořete index pro subcol. Tento výkonnostní problém +byl odstraněn ve verzi 7.4.

+ +

4.23 Jak provést vnější spojení (outer join)?

+ +

PostgreSQL podporuje vnější spojení tabulek standardními SQL +příkazy. Zde jsou dva příklady:

+
SELECT * FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
+
+nebo +
SELECT * FROM t1 LEFT OUTER JOIN USING (col);
+
+

Tyto identické dotazy napojí t1.col na t2.col a ještě přidá +nepřipojené řádky z t1 (které nemají obdoby v t2). Pravé spojení +(RIGHT JOIN) přidá nepřipojené řádky z t2. FULL JOIN vrátí všechny +řádky, včetně nepřipojených z tbulek t1 a t2. Klíčové slovo OUTER je +nepovinné a váže se na LEFT, RIGHT a FULL join. Běžné spojení se +nazývá INNER JOIN.

+ +

V dřívějších verzích se vnější spojení tabulek mohlo simulovat pomocí +UNION a NOT IN. Například pro spojení tabulek tab1 a tab2, je +následující dotaz ekvivalentní k vnějšímu spojení dvou tabulek:

+
SELECT tab1.col2, tab2.col2 FROM tab1, tab2
+  WHERE tab1.col1 = tab2.col1
+UNION ALL
+SELECT tab1.col2, NULL FROM tab1
+  WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
+ORDER BY col1;
+
+

4.24 Jak provést dotaz napříč několika databázemi?

+ +

PostgreSQL nenabízí žádný způsob, jak se dotázat do jiné databáze než +do aktuální. Doplněk contrib/dblink umožňuje dotaz do cizí databáze +prostřednictvím funkce. Na straně klienta není problém si otevřít více +simultálních přístupů do různých databází a spojovat výsledek na +straně klienta.

+ +

4.25 Může funkce vrátit více řádků nebo sloupců?

+ +

V PostgreSQL 7.3 můžete jednoduše vracet více řádků nebo sloupců z +funkce, viz: +http://techdocs.postgresql.org/guides/SetReturningFunctions.

+ +

4.26 Proč nelze spolehlivě vytvářet a rušit dočasné tabulky v +PL/pgSQL funkcích?

+ +Přeložený kód PL/pgSQL funkce je uložen ve vyrovnávací paměti, tj. funkce +je překládána pouze při změně kódu, nikoliv před každým voláním funkce. +Nechtěným vedlejším efektem je, že volání funkce selže, když se funkce +odkazuje na dočasnou tabulku, pokud tato tabulka byla od překladu funkce +zrušena (ačkoliv již byla znovu vytvořena a existuje). +Jediným řešením problému je přístup k dočasné tabulce pomocí +EXECUTE, tj. dynamické provádění dotazu. Tento příkaz zajistí opakovaný +překlad dotazu při každém volání funkce.

+ +

4.27 Jaké jsou možnosti replikace databází?

+ +

Existuje několik dostupných řešení master/slave replikací. Ty povolují +modifikace master databáze a slave databázím umožňují pouze čtení. Na +konci http://gborg.PostgreSQL.org/genpage?replication_research +najdete jejich seznam. Na řešení multi-master replikaci se pracuje na +http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.

+ +

4.28 Jaké jsou možnosti šifrování databází?

+ +
+

Rozšiřování PostgreSQL

+ +

5.1 Napsal jsem UDF funkci, PostgreSQL však končí dump core?

+ +

Problém může být způsoben mnoha okolnostmi. Vyzkoušejte si svoji +funkci nejdříve v nějaké jednoduché aplikaci.

+ +

5.2 Jak mohu přispět nějakými šikovnými datovými typy a funkcemi +do PostgreSQL?

+ +

Pošlete své rozšíření do konference pgsql-hackers, a ono pak možná +skončí v podadresáři contrib.

+ +

5.3 Jak napsat funkci v C vracející ntici?

+ +

Funkce vracející tabulky jsou podporované PostgreSQL 7.3 a vyšší pro +jazyky C, PL/PgSQL a SQL. Více naleznete v The Programmer's +Guide. Příklady těchto funkcí pro C naleznete v contrib/tablefunc.

+ +

5.4 Modifikoval jsem zdrojové soubory. Tato změna nebyla při +rekompilaci vzata v potaz. Proč?

+ +

Makefile nemá informace o závislostech mezi hlavičkovými soubory. Musíte +provést make clean a pak make. Pokud používáte gcc, můžete použít +přepínač --enable-depend příkazu configure k automatickému řešení +závislostí překladačem.

+ \ No newline at end of file