From 5c996884a05ad62f00b8e4432beca1d7dd177d61 Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Thu, 1 Nov 2007 17:28:03 +0000 Subject: [PATCH] Update Czech FAQ. Pavel Stehule --- doc/FAQ_czech | 1818 +++++++++++++++--------------------- doc/src/FAQ/FAQ_czech.html | 1806 +++++++++++++---------------------- 2 files changed, 1417 insertions(+), 2207 deletions(-) diff --git a/doc/FAQ_czech b/doc/FAQ_czech index 78696bad58c..d065fa1f9c0 100644 --- a/doc/FAQ_czech +++ b/doc/FAQ_czech @@ -1,1117 +1,849 @@ - Často kladené dotazy (FAQ) PostgreSQL + Frequently Asked Questions - Poslední aktualizace: Středa 23. června 21:10:00 EST 2004 + Casto kladené dotazy (FAQ) PostgreSQL - Současný správce: Bruce Momjian (pgman@candle.pha.pa.us) + Poslední aktualizace: 29. ríjna 2007 (aktualizováno pro PostgreSQL + 8.3) - Přeloľil: Pavel Stěhule (stehule@kix.fsv.cvut.cz) + Soucasný správce: Bruce Momjian (bruce@momjian.us) - Aktuální verzi tohoto dokumentu naleznete na adrese: - http://www.PostgreSQL.org/docs/faqs/FAQ.html. Český překlad na adrese: - http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html. + Prelozil: Pavel Stehule (pavel.stehule@gmail.com) - Odpovědi na dotazy relevantní ke konkrétním platformám lze nalézt na - adrese: http://www.PostgreSQL.org/docs/index.html. + Nejaktuálnejsí verzi tohoto dokumentu naleznete na adrese + http://www.postgresql.org/files/documentation/faqs/FAQ.html + + Odpovedi na otázky vázané na konkrétní platformy naleznete na adrese + http://www.postgresql.org/docs/faq/. _________________________________________________________________ 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.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL? + 1.2) Kdo rídí vývoj PostgreSQL? + 1.3) Pod jakou licencí je PostgreSQL? + 1.4) Na kterých platformách lze provozovat PostgreSQL? 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 + 1.6) Jaká je poslední verze? + 1.7) Kde mohu získat podporu? + 1.8) Jak a kam hlásit chyby? + 1.9) Kde najdu informace o známých chybách nebo nepodporovaných + vlastnostech? + 1.10) Jaká je dostupná dokumentace? + 1.11) Jak se mohu naucit SQL? + 1.12) Jak se mohu pripojit k týmu vývojáru? + 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi? + 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v + nekterých zemích? + + Dotazy na klientská rozhraní - 2.1) Kde naleznu ODBC ovladače pro PostgreSQL? - 2.2) Jaké nástroje lze pouľít pro PostgreSQL a web? + 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL? + 2.2) Jaké nástroje lze pouzí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? + 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql? + 3.2) Jak nastavit pravidla pro prístup z jiných stanic? + 3.3) Jak vyladit databázi na vyssí výkon? + 3.4) Jaké mám ladící prostredky? + 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit? + 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu + PostgreSQL? + 3.7) Jaký hardware bych mel pouzívat? 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 + 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek? + 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných + uzivatelu. Mohu videt dotazy, které pouzívá psql pro zobrazení techto + informací? + 4.3) Jak zmenit datový typ sloupce? + 4.4) Jaká je maximální velikost rádku, tabulky a databáze? + 4.5) Kolik diskového prostoru je potreba k ulození 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 + 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc? + 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz? + 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index + pro case insensitive hledání? + 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit + dva retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli + je polozka NULL nebo ne? + 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy? + 4.11.1) Jak vytvorit serial/auto-increment polozku? + 4.11.2) Jak získat hodnotu SERIAL po vlození rádku? + 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském + prostredí? + 4.11.4) Proc není vygenerované císlo pouzito pri prerusení + transakce?Proc vznikají díry v císlování prostrednictvím sekvence nebo + typu SERIAL? + 4.12) Co to je OID? Co je to CTID? + 4.13) Co znamená chybové hlásení "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č? + 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám? + 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální + cas? + 4.16) Jak provést vnejsí spojení (outer join)? + 4.17) Jak provést dotaz napríc nekolika databázemi? + 4.18) Muze funkce vrátit více rádku nebo sloupcu? + 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"? + 4.20) Jaké jsou moznosti replikace databází? + 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? + Proc jsou velká písmena v názvech automaticky prevedena na malá + písmena? _________________________________________________________________ Obecné otázky - 1.1) Co je PostgreSQL? Jak se vyslovuje? - - PostgreSQL se vyslovuje Post-Gres-Q-L. Zvukový záznam je dostupný na - adrese . - - PostgreSQL vychází z databáze POSTGRES (a stále je někdy označován - zjednoduąeně jako 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 - (scrappy@PostgreSQL.org). (viz 1.6 - jak se zapojit). Tento tým je - zodpovědný za veąkerý vývoj PostgreSQL. Jedná se o veřejný projekt, - který není řízen ľádnou firmou. Pokud se chcete zapojit, přečtěte si - developer's FAQ na adrese - http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html - - 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-2007, 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. - - HE 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. Více pgsql/doc/FAQ_MSWIN v - distribuci nebo MS Windows FAQ na adrese - http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN. - - Na nativním portu pro MS Win NT/2000/XP se pracuje. Daląí informace o - aktuálním stavu PostgreSQL pro Windows naleznet na adrese - http://techdocs.postgresql.org/guides/Windows a - http://momjian.postgresql.org/main/writings/pgsql/win32.html. - - 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í 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 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 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) Jaká je poslední verze? - - Poslední verze PostgreSQL je 7.4.3. Plánujeme uvolnit významnou 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, 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. + 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL? + + Výslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres . + V rade jazyku je slovo PostgreSQL obtízne vyslovitelný, proto se v + hovoru casto pouzívá zjednodusená forma názvu. Pro ty, kterí by si + rádi poslechli výslovnost, je k dispozici audiozáznam v MP3 formátu. + + PostgreSQL je relacní databáze s nekterými objektovými rysy, která má + moznosti tradicních komercních databázových systému s nekolika + rozsíreními, které lze najít v DBMS systémech prístí generace. + Pouzívání PostgreSQL není omezené a veskeré zdrojové kódy jsou volne + dostupné. + + Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojáru + navzájem komunikujících prostrednictvím internetu. Tento projekt není + rízen zádnou obchodní organizací. Pokud se chcete pridat k projektu, + prectete si vývojárské FAQ na adrese + http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html . + + 1.2) Kdo rídí vývoj PostgreSQL? + + Pokud budete hledat organizaci rídící vývoj PostgreSQL, budete + zklamáni. Nic takového neexistuje. Existují pouze "core" a CVS skupiny + uzivatelu, ale ty existují více z administrátorských duvodu nez z + organizacních. Projekt je smerován komunitou vývojáru a uzivatelu, ke + které se kdokoliv muze pripojit. Jediné co potrebuje, je prihlásit se + do elektronické konference. Více ve vývojárském FAQ. + + 1.3) Pod jakou licencí je PostgreSQL? + + PostgreSQL je predmetem následujících autorských práv: + + Dílcí Copyright (c) 1996-2005, PostgreSQL Global Development Group + Dílcí Copyright (c) 1994-6, Regents of the University of California + + Udeluje se oprávnení k uzití, rozmnozování, provádení úprav a + rozsirování tohoto softwaru a dokumentace k nemu, pro jakékoli úcely, + bez licencního poplatku a bez písemné licencní smlouvy, za podmínky, + ze na vsech jeho kopiích je uvedeno oznámení o výse uvedených právech, + jakoz i obsah tohoto a dvou následujících odstavcu. + + THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ZÁDNÉM + PRÍPADE ODPOVEDNA ZÁDNÉ TRETÍ OSOBE ZA PRÍMOU, NEPRÍMOU, ZVLÁSTNÍ, + NAHODILOU NEBO VÝSLEDNOU SKODU, VCETNE USLÉHO ZISKU, ZPUSOBENOU UZITÍM + TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRÍPADE, ZE THE + UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOZNOSTI VZNIKU TAKOVÉ + SKODY. + + 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 ÚCELUM. NÍZE UVEDENÝ SOFTWARE JE POSKYTNUT "JAK STOJÍ A + LEZÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO + ÚDRZBU, PODPORU, AKTUALIZACI, VYLEPSENÍ NEBO MODIFIKACI. + + Výse uvedené je BSD licence, bezná licence otevreného zdroje. Není zde + zádné omezení ohledne uzití kódu zdroje. Jsme s tím spokojeni a nemáme + v úmyslu na této skutecnosti cokoli menit. + + 1.4) Na kterých platformách lze provozovat PostgreSQL? + + Strucne receno, PostgreSQL bezí na vsech moderních unixových + systémech. Seznam tech, u kterých probehlo testování, naleznete v + instalacních instrukcích. + + PostreSQL také bezí nativne na vsech Microsof Windows systémech + odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP + a Windows2003. Instalacní balícek naleznete na adrese + http://pgfoundry.org/projects/pginstaller. Na starsích systémech s + jeste MS-DOS jádrem lze spustit PostgreSQL s emulacním programem + Cygwin. + + Dále existuje port pro Novell Netware 6 port na adrese + http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese + http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre + SQL&stype=all&sort=type&dir=%2F . + + 1.5) Kde mohu získat PostgreSQL? + + Pomocí webového klienta z adresy http://www.postgresql.org/ftp/ nebo + klienta ftp z adresy ftp://ftp.postgresql.org/pub/. + + 1.6) Jaká je poslední verze? + + Nejnovejsí verzí PostgreSQL je verze 8.2.5 + + V plánu je uvolnovat kazdorocne jednu velkou verzi a kazdých nekolik + mesícu malé verze. + + 1.7) Kde mohu získat podporu? + + Nejcastejsí forma podpory uzivatelum PostgreSQL komunitou je + prostrednictvím e-mailu. Na nasem webovém serveru naleznete odkaz na + stránky,kde se muzete prihlásit do elektronické konference. Pro + zacátek jsou doporucené konference general nebo bugs. + + Dalsí cestou je IRC kanál #postgresql na Freenode (irc.freenode.net). + K pripojení pouzijte Unixový príkaz irc -x '#postgresql' "$USER" + irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti + existuje jeste spanelská (#postgresql-es) a francouzská + (#postgresqlfr) verze. Dalsí PostgreSQL kanál naleznete na EFNet. + + Seznam spolecností poskytující komercní podporu naleznete na adrese + http://techdocs.postgresql.org/companies.php. + + 1.8) Jak a kam hlásit chyby? + + Vyplnte formulár na adrese + http://www.postgresql.org/support/submitbug. Na nasem ftp serveru + ftp://ftp.postgresql.org/pub/ si overte, ze pouzíváte aktuální verzi + PostreSQL. + + Chyby reportované prostrednictvím chybového formuláre nebo zasláním + mailu do PostgreSQL konference obvykle generuje následující odezvu: + * Nejedná se o chybu, a proc + * Jedná se o známou chybu, která je jiz v seznamu úkolu TODO + * Tato chyba byla opravena v aktuální verzi + * Tato chyba byla jiz opravena ve verzi, která zatím nebyla + oficiálne uvolnena + * Pozadavek na dalsí doplnující informace: + + Operacní systém + + Verze PostgreSQL + + Test reprodukující chybu + + Ladící informace + + Backtrace výstup debuggeru + * Jedná se o zatím nezjistenou chybu, pak muzete cekat + + Záplatu odstranující chybu, která bude vlozena do dalsí velké + nebo malé verze + + Informaci, ze se jedná o chybu, kterou nelze okamzite resit a + je proto pridána do TODO + + 1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech? + + PostgreSQL podporuje rozsírenou podmnozinu SQL:2003. V nasem TODO + naleznete seznam známých chyb, chybejících vlastností, a plány do + budoucna. + + Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle: + * Pozadavek je jiz v TODO + * Pozadovaná funkce není chtená protoze + + Duplikuje jiz existující funkci, která respektuje SQL + standard + + Implementací funkce by se prílis zkomplikoval kód bez + relevantního prínosu + + Funkce by mohla být nebezpecná nebo nespolehlivá + * Pozadavek je pridán do TODO + + PostgreSQL nepozívá systém pro sledování chyb, protoze jsme zjistili, + ze je efektivnejsí prímo reagovat na maily a udrzovat aktuální TODO. V + praxi je snaha o co nejrychlejsí resení chyb, a chyby, které by se + mohly projevit u mnoha uzivatelu jsou opravovány velice rychle. Jediné + místo, kde lze dohledat vsechny zmeny, rozsírení a opravy v PostgreSQL + je CVS log. Poznámky k verzi "Release notes" nezachycují vsechny + zmeny, k nemz doslo. + + 1.10) Jaká je dostupná dokumentace? + + PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál, + manuálové stránky a testovací príklady. Podívejte se do adresáre /doc. + Manuál je prístupný online na http://www.postgresql.org/docs. + + K dispozici jsou zdarma dve online knihy na adresách + http://www.postgresql.org/docs/books/awbook.html a + http://www.commandprompt.com/ppbook/. Dalsí literaturu lze zakoupit. + Nejpopulárnejsí je od Kerryho Douglase. Seznam dostupné literatury je + na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je + kolekce technicky orientovaných clánku tematicky spojených s + PostgreSQL na adrese http://techdocs.postgresql.org/. + + Rádkový klient psql má \d príkazy pro zobrazení informací o typech, + operátorech, funkcích, agregacních funkcí, atd. Pouzijte \? pro + zobrazení dostupných príkazu. + + Dalsí dokumentaci najdete na nasem webu. + + 1.11) Jak se mohu naucit SQL? + + Podívejte se do výse uvedené dokumentace. Dalsí online knihou je + "Teach Yourself SQL in 21 Days, Second Edition" na adrese + http://members.tripod.com/er4ebus/sql/index.htm. Mnoho nasich + uzivatelu doporucuje knihu The Practical SQL Handbook, Bowman, Judith + S., et al., Addison-Wesley. Dalsí The Complete Reference SQL, Groff et + al., McGraw-Hill. + + Dalsí online tutoriály jsou dostupné na adresách: + * http://www.intermedia.net/support/sql/sqltut.shtm + * http://sqlcourse.com + * http://www.w3schools.com/sql/default.asp + * http://mysite.verizon.net/Graeme_Birchall/id1.html + + 1.12) Jak se mohu pripojit k týmu vývojáru? + + Prostudujte si Developer's FAQ. + + 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi? + + Software muzeme porovnávat z nekolika ruzných pohledu: vlastnosti, + výkon, spolehlivost, podpora a cena. + + Vlastnosti + + PostgreSQL nabízí vetsinu funkcí funkcionality velkých komercních DBMS + systému jako jsou: transakce, vnorené dotazy, spouste, referencní + integrita a sofistikovaný systém zamykání. Poskytujeme urcité funkce, + které ostatní systémy bezne nepodporují. Napr. uzivatelem definované + typy, dedicnost, pravidla (rules), a MVCC architekturu. + + Výkon + + Výkon PostgreSQL je srovnatelný s ostatními komercními nebo Open + Source databázemi. V nekterých prípadech je rychlejsí, jindy + pomalejsí. Nás výkon je obvykle +/-10% vuci ostatním databázím. + + Spolehlivost + + Uvedomujeme si, ze databáze musí být stoprocentne spolehlivá, jinak je + nepouzitelná. Snazíme se, aby kazdá verze byla dobre otestována a + obsahovala minimum chyb. Kazdá verze je minimálne nekolik mesícu v + beta testovacím rezimu. Do produkcního rezimu se dostane, az kdyz + nedochází k dalsím zmenám nebo opravám. Veríme, ze jsem více nez + srovnatelní s ostatními databázemi v této oblasti. + + Podpora + + Na nasich internetových konferencích se setkává velká skupina vývojáru + a uzivatelu pri resení vyskytujících se problému. Nase internetové + konference umoznují kontakt velké skupiny vývojáru a uzivatelu. + Nemuzeme garantovat opravu chyby, ale komercní DBMSs také vzdy + negarantují resení problému. Veríme ale, ze díky prímému kontaktu na + vývojáre, nasi uzivatelskou komunitu, manuálum, a dostupným zdrojovým + kódum máme lepsí podporu nez ostatní DBMSs. Pro ty, kterí preferují + komercní "per-incident" podporu, existuje spolecností, kterí ji + nabízejí (FAQ sekce 1.7.) + + Cena + + PostgreSQL lze pouzívat bezplatne (a to i pro komercní pouzití). Také + muzete neomezene pouzívat nás kód ve svých produktech s výjimkami + specifikovanými v nasí licenci (prebíráme BSD licenci). + + 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v nekterých + zemích? + + Pocínaje verzí 8.0.[4+] podporuje PostgreSQL letní cas také pro USA. + Podpora letního casu (daylight saving time) pro Kanadu a Západní + Austrálii je obsazena ve verzích 8.0.[10+] a 8.1.[6+] a vsech + následujících verzích. Starsí verze pouzívaly systémovou databázi + casových zón obsahující, krome jiného, informaci o tom, zda se pro + danou casovou zónu rozlisuje mezi letním a zimním casem. _________________________________________________________________ - 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 + Dotazy na klientská rozhraní - 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. + 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL? + + PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C. + Vsechna dalsí rozhraní predstavují nezávislé projekty, které je treba + stáhnout z internetu samostatne. Osamostatnení techto projektu + umoznuje nezávislost vývojových týmu a moznost vydávat nové verze bez + ohledu na vydání nové verze PostgreSQL. + + Nekteré programovací jazyky jako je napr. PHP obsahují rozhraní pro + PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho + dalsích jsou dostupné na adrese: http://gborg.postgresql.org v sekci + Drivers/Interfaces. - Pro sloľitějąí případy se často pouľívá Perl a CGI.pm nebo mod_perl. + 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web? + + Dobrým úvodem do problematiky databází v prostredí webových stránek + muze být web http://www.webreview.com. - 2.3) Existuje grafické rozhraní pro PostgreSQL? - - Pro PostgreSQL existuje několik grafických rozhraní: PgAccess - (http://www.php.net), PgAdmin III (http://www.php.net), RHDB Admin - (http://sources.redhat.com/rhdb/) a Rekall ( - http://www.thekompany.com/products/rekall/). Dále jeątě PhpPgAdmin - (http://phppgadmin.sourceforge.net/) coľ je rozhraní PostgreSQL - zaloľené na web technologii. + PHP (http://www.php.net) je vynikajícím rozhraním pro tvorbu webu. - Úplnějąí seznam najdete na - http://techdocs.postgresql.org/guides/GUITools. + Pro slozitejsí úlohy se casto pouzívá Perl a jeho BDB:Pg rozhraní s + podporou CGI - CGI.pm nebo mod_perl(u). - 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. + 2.3) Existuje grafické rozhraní pro PostgreSQL? + + K dispozici je rada grafických nástroju podporujících PostgreSQL a to + od komercních nebo open source vývojáru. Podrobný seznam naleznete na + adrese http://www.postgresql.org/docs/techdocs.54. _________________________________________________________________ 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 PostgreSQL - Administrator's Guide 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 postmaster 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. Přístup z jiných strojů není moľný dokud jej - nepovolíte nastavením tcpip_socket v postgresql.conf a určením způsobu - autentifikace v $PGDATA/pg_hba.conf. - - 3.6) Jak ladit databázový stroj na lepąí výkon? - - Určitě pomohou indexy. Příkaz EXPLAIN ANALYZE Vám umoľní sledovat jak - PostgreSQL interpretuje Váą dotaz a které indexy pouľívá. - - 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 výynamné - 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. + 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql? + + Pri spoustení configure nastavte parametr --prefix + + 3.2) Jak nastavit pravidla pro prístup z jiných stanic? + + Ve výchozí konfiguraci, PostgreSQL umoznuje pouze pripojení z + lokálního uzivatele prostrednictvím Unix domain sockets nebo TCP/IP + spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a + povolení adresy v souboru $PGDATA/pg_hba.conf se nelze pripojit k + PostgreSQL z ostatních stanic. Zmena výse zmínených parametru vyzaduje + restart databázového serveru. + + 3.3) Jak vyladit databázi na vyssí výkon? + + Výkon systému muzete ovlivnit ve trech oblastech: + + Zmeny dotazu + + * Pouzitím indexu vcetne cástecných a funkcionálních + * Pouzitím COPY místo opakovaných INSERTu + * Sloucením mnoha SQL príkazu do jedné transakce snízením rezie na + commit + * Pouzíváním CLUSTERU, pokud nacítáte vetsí pocet rádek podle indexu + * Pouzitím klauzule LIMIT v poddotazech + * Pouzitím predpripravených dotazu + * Pouzíváním ANALYZE. Tento príkaz aktualizuje statistiky, které se + pouzívají pri optimalizaci dotazu + * Pravidelné pouzití VACUUM nebo pouzívání pg_autovacuum + * Odstranením indexu pred rozsáhlými zmenami v datech + + Konfigurace serveru + + Urcité parametry v souboru postgresql.conf mají vliv na výkon serveru. + Detaily naleznete v prírucce Administrátora v Server Run-time + Environment/Run-time Configuration. Dalsí komentáre naleznete v + http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht + ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. + + Výber hardware + + Vliv hardware na výkon serveru je popsán v dokumentech + http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html + a http://www.powerpostgresql.com/PerfList/. + + 3.4) Jaké mám ladící prostredky? + + Nastavením log_* promenných v konfiguraci serveru si vynutíte logování + dotazu a procesních statistik, které Vám mohou pomoci pri ladení a + optimalizaci výkonu. + + 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit? + + Prekrocil jste výchozí limit, který je 100 soucasne pripojených + uzivatelu. V konfiguraci serveru v postgresql.conf tuto hodnotu muzete + zvetsit zmenou hodnoty max_connection. Nezapomente restartovat server. + + 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu PostgreSQL? + + Zpusob císlování je popsán v dokumentaci na + http://www.postgresql.org/support/versioning. Instrukce k provedení + migrace na vyssí verzi jsou taktéz v dokumentaci na adrese + http://www.postgresql.org/docs/current/static/install-upgrading.html. + + 3.7) Jaký hardware bych mel pouzívat? + + Jelikoz PC jsou vetsinou kompatibilní, lidé mají tendence verit, ze + vsechna PC jsou stejne kvalitní. Coz není pravda. Pameti ECC, SCSI a + kvalitní základní desky jsou mnohem spolehlivejsí a výkonnejsí nez + lacinejsí hardware. PostgreSQL pobezí na vetsine hardwaru, nicméne + pokud je pro Vás spolehlivost a výkon systému dulezitá, je dobré + venovat cas nalezení vhodné hardwarové konfigurace. Na nasich + elektronických konferencích muzete diskutovat o vhodných konfiguracích + a znackách. _________________________________________________________________ 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 ... - - I kdyľ potřebujete získat pouze prvních několik řádků, je třeba - zpracovat vąechna data, např. pokud dotaz má ORDER BY. Pokud vąak - existuje index, který odpovídá ORDER BY, PostgreSQL můľe získat pouze - prvních n řádků a ukončit zpracování dotazu. - - K získání náhodného řádku pouľijte: - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; + 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek? + + Pokud potrebujete pouze nekolik rádku a pokud víte kolik, pouzijte + SELECT LIMIT. Pokud bude mozné pouzít index shodující se s ORDER BY, + je mozné, ze se nebude provádet celý dotaz. Pokud neznáte pocet + záznamu, pouzijte kurzor a príkaz FETCH. + + Pro výber náhodného rádku pouzijte príkaz ve tvaru: +SELECT col +FROM tab +ORDER BY random() +LIMIT 1; - 4.3) Jak získám seznam tabulek nebo jinak jak jej získá psql? - - Příkaz \dt v psql zobrazí seznam tabulek. Úplný seznam příkazů psql - dostanete příkazem \?. Také se můľete podívat 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á. PostgreSQL nabízí SQLi INFORMATION - SCHEMA s tabulkami obsahující informace o databázi. - - 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; + 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných uzivatelu. + Mohu videt dotazy, které pouzívá psql pro zobrazení techto informací? + + V psql príkazem \dt získáte seznam tabulek. Úplný seznam príkazu psql + získáte príkazem \?. Alternativne si muzete prostudovat zdrojový kód + psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL + príkazy, které jsou generovány pro získání výstupu psql "backslash" + príkazu. Také muzete nastartovat psql s parametrem -E, který zpusobí + zobrazení vsech SQL príkazu, které se odesílají na server. PostgreSQL + také podporuje SQL standard INFORMACNÍ SCHÉMATA (standardní systémové + tabulky). Klasickým dotazem do systémových tabulek získáte pozadované + informace o strukture databáze. + + Systémové tabulky PostgreSQL (mimo rámec SQL standardu) pouzívají + prefix pg_. Pro zjistení struktury databáze je muzete pouzít také, i + kdyz preferovány jsou dotazy do informacního schématu. + + Seznam vsech databází získáte príkazem psql -l + + Dalsí inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. + Obsahuje ilustracní SELECTy potrebné k získání informací z systémových + tabulek databáze. + + 4.3) Jak zmenit datový typ sloupce? + + Ve verzích 8.0 a pozdejsích jednoduse: +ALTER TABLE ALTER COLUMN TYPE - 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; + V starsích verzích: +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. + Po zmene spustte príkaz VACUUM FULL, aby doslo k uvolnení diskového + prostoru pouzitého v tu chvíli jiz neplatnými záznamy. - 4.5) Jaká je maximální velikost řádku, tabulky a databáze? - + 4.4) Jaká je maximální velikost rá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 + Maximální velikost databáze: neomezena (existují 32TB db) + Maximální velikost tabulky: 32 TB + Maximální velikost rádky: 480GB + Maximální velikost polozky 1 GB + Maximální pocet rádku v tabulce: neomezeno + Maximální pocet sloupcu v tabulce: 250-1600 podle typu + Maximální pocet indexu na tabulce: neomezeno + + Ve skutecnosti nic není neomezeno, limitem bývá vzdy dostupná disková + pamet nebo velikost operacní pameti. Pokud máte nekterou z techto + hodnot neobvykle velkou, muze dojít ke snízení výkonu. + + Maximální velikost tabulky je 32 TB a nevyzaduje podporu velkých + souboru operacním systémem. Velké tabulky se ukládají do nekolika 1 GB + souboru takze limity souborového systému nejsou podstatné. + + Maximální velikost tabulky a maximální pocet sloupcu muzeme + zectyrnásobit nastavením velikosti bloku na 32K. + + Indexy jsou povolené pouze na sloupcích jejichz délka je mensí nez + 2000 znaku. Pokud tuto délku prekrocíme a index potrebujeme pro + zajistení jednoznacnosti, je vhodnejsí pouzít funkcionální index nad + MD5 funkcí nebo fulltextový index. + + 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního textového + souboru? + + PostgreSQL vyzaduje az petinásobek diskového prostoru k ulození 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ů + Napríklad, uvazujme soubor se 100 tisíci rádky obsahující na kazdé + rádce celé císlo a textový popis. Text je v prumerne dvacet bytu 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 + obsahující odpovídající data bude zhruba 5.2 MB. + 24 bytu: hlavicka rádku (priblizne) + 24 bytu: jedna celocíselná polozka a jedna textová + + 4 byty: ukazatel na stránku k entici ------------------------------------------------------ - 64 bytů na řádek - - Velikost datové stránky PostgreSQL je 8KB + 52 bytu na rádek - 8192 bytů na stránce - ---------------------- = 128 řádek na stránku - 64 bytů za řádek + Velikost datové stránky PostgreSQL je 8192 bytu (8KB) + 8192 bytu na stránce +---------------------- = 158 rádek na stránku + 52 bytu za rádek - 100000 řádek - -------------------- = 782 stránek (zaokrouhleno nahoru) - 128 řádek na stránce +100000 rádek +----------------------- = 633 stránek (zaokrouhleno nahoru) + 158 rádek na stránce - 782 * 8192 = 6, 406, 144 bytů (6.4 MB) +633 datových stránek * 8192 bytu na kazdou stránku = 5,185,536 bytu (5.2 MB) - Indexy nemají tak velkou reľii, ale mohou být také velké, protoľe + Indexy nemají tak velkou rezii, ale mohou být také velké, protoze obsahují indexovaná data. - Hodnoty NULL jsou uloľeny v bitmapách, takľe spotřebují jen velmi málo + Hodnoty NULL jsou ulozeny v bitmapách, takze zabírají 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] + 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc? + + Kazdý dotaz nemusí nutne pouzít existující indexy. Index se pouzije + tehdy, kdyz je tabulka vetsí nez urcitá minimální velikost, a dotaz + vybírá pouze procentuálne malou cást rádku tabulky. To proto, ze + náhodný prístup k disku daný ctením indexu muze být pomalejsí nez + lineární ctení tabulky nebo sekvencní ctení. + + PostgreSQL rozhoduje o pouzití indexu na základe statistiky prístupu k + tabulce. Tyto statistiky se shromazdují príkazy VACUUM ANALYZE nebo + ANALYZE. Díky statistikám má optimizer informaci o poctu rádek v + tabulce a muze lépe rozhodnout o pouzití indexu. Statistiky se uplatní + pri urcení optimálního poradí a metody spojení tabulek. Statistiky by + se meli aktualizovat opakovane, tak jak se mení obsah tabulek. + + Indexy nejsou obycejne pouzity pro setrídení nebo spojení tabulek. + Sekvencní zpracování následované explicitním trídením je obycejne + rychlejsí nez pouzití indexu na velké tabulce. + + Jinak je tomu v prípade pouzití LIMIT a ORDER BY, pri kterém se + vetsinou index pouzije, jelikoz je výsledkem pouze malá cást tabulky. + + Pokud si myslíte, ze optimizer mylne zvolil sekvencní prohledávání + tabulky, pouzijte príkaz SET enable_seqscan TO 'off' a zkuste zda je + prohledávání s indexem rychlejsí. + + Pri vyhledávání na základe vzoru jako je napr. operátor LIKE nebo ~ se + indexy pouzijí pouze za urcitých skutecností: + * zacátek hledaného vzoru musí být ukotven k zacátku, tj. + + vzor LIKE nesmí zacínat % + + ~ regulární výraz musí zacínat ^ + * vzor nesmí zacínat intervalem, napr. [a-e] * vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~* - 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í). + nepouzívá indexy. Muzete ale pouzít funkcionální indexy, které + jsou popsány v sekci 4.8 + * pri inicializaci databáze (initdb) musí být pouzito C locale nebo + vytvorte speciální text_pattern_index, který umozní, pri + respektování zmínených podmínek pouzití indexu operací LIKE. Pro + vyhledávání celých slov je mozné a výhodné pouzít fulltext. - 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'; + 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz? + + Podívejte se do nápovedy k príkazu EXPLAIN. + + 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index pro case + insensitive hledání? + + Vyhledávání prostrednictvím regulárních vzoru zajistuje operátor ~, + který je case-sensitive. Jeho case-insensitive varianta je operátor + ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE. + + Case-insensitive vyhledání se resí: +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)); + Tento dotaz nepouzije standardní index. Musíte pouzít tzv. + funkcionální index: +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 + Pokud index vytvoríme jako unikátní, tak muzeme ukládat retezce + obsahující malá i velká písmena, ale nikoliv retezce, které se od sebe + odlisují jen v malých a velkých písmenech. K zajistení zápisu retezce + obsahující pouze malá nebo pouze velká písmena pouzijte CHECK kontroly + nebo triggery. + + 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit dva + retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli je polozka + NULL nebo ne? + + Pokud chcete testovat hodnotu NULL pouzijte operátor IS: + SELECT * + FROM tab + WHERE col IS NULL; - 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. Například: - CREATE TABLE person ( - id SERIAL, - name TEXT - ); + K spojení retezcu, které mohou obsahovat hodnotu NULL, pouzívejte + funkci COALESCE(), napr.: + SELECT COALESCE(col1, '') || COALESCE(col2, '') + FROM tab - 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); + Pokud chcete trídit podle hodnoty NULL, pouzijte výraz IS NULL nebo IS + NOT NULL v klauzuli ORDER. Hodnota pravda má prednost pred hodnotou + false a tedy pokud pouzijete: + SELECT * + FROM tab + ORDER BY (col IS NOT NULL) - 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')"); + tak záznamy s NULL budou na zacátku setrídených dat. + + 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy? + + Typ Interní název Poznámky + VARCHAR(n) varchar n urcuje maximální délku + CHAR(n) bpchar retezec je do dané délky rozsíren mezerami + TEXT text bez omezení délky + BYTEA bytea pole bytu nespecifikované délky + "char" char jeden znak + + Na interní názvy muzete narazit v systémovém katalogu nebo v nekterých + chybových hláseních. + + Ctyri první typy jsou tzv. varlena typy (první ctyri byty na disku + jsou obsahují délku, ostatní obsahují vlastní data). Skutecne obsazený + prostor je tedy o neco málo vetsí nez deklarovaná velikost. Na druhou + stranu, delsí retezce jsou komprimovány, takze obsazený prostor na + disku muze být mensí nez se ceká. + + VARCHAR(n) je vhodný pro ukládání ruzne dlouhých retezcu u kterých + známe délkové omezení, TEXT pro retezce bez omezení délky (maximum je + jeden gigabyte). + + CHAR(n) se pouzívá pro ulození stejne dlouhých retezcu. CHAR(n) doplní + mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak + jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot. + Vsechny zmínené typy mají podobné výkonové charakteristiky. + + 4.11.1) Jak vytvorit serial/auto-increment polozku? + + V PostgreSQL muzete pouzít datový typ SERIAL. Jeho pouzitím se + automaticky vytvorí sekvence. Napríklad: +CREATE TABLE person ( + id SERIAL, + name TEXT +); - 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')"); + je automaticky transformováno na: +CREATE SEQUENCE person_id_seq; +CREATE TABLE person ( + id INT4 NOT NULL DEFAULT nextval('person_id_seq'), + name TEXT +); - 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'; + Podrobnejsí informace najdete v manuálu v popisu príkazu + create_sequence. + + 4.11.2) Jak získat hodnotu SERIAL po vlození rádku? + + Nejjednodussím zpusob, jak získat vygenerovanou hodnotu typu SERIAL, + je vyuzít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto: +INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; - 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 - /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 + Také muzete pouzít funkci nextvall() a její výsledek pouzít v príkazu + INSERT, nebo zavolat currval() po provedení príkazu INSERT. + + 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském + prostredí? + + Ne, currval vrací vzdy hodnotu, která byla vygenerována pro vás. + + 4.11.4) Proc není vygenerované císlo pouzito pri prerusení transakce?Proc + vznikají díry v císlování prostrednictvím sekvence nebo typu SERIAL? + + Poté co sekvence vygeneruje nové císlo, tak se nedochází k zamcení + sekvence a neceká se na úspesné nebo neúspesné dokoncení transakce. + Odvoláním transakce, která si vyzádala císla sekvence se tato císla + nenávratne ztratí. + + 4.12) Co to je OID? Co je to CTID? + + V prípade, ze tabulku nezalozíme s atributem WITHOUT OIDS, tak má + kazdý rádek unikátní identifikacní císlo OID. Toto císlo je 4 bajtové + celé císlo, které je jedinecné v celé instalaci. Pretece po 4 + miliardách rádku. PostgreSQL pouzívá OIDs jako interní linky v + interních systémových tabulkách. + + K získání unikátního císla v nesystémových tabulkách je vhodnejsí + pouzití typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzívá pouze + pro jednu tabulku a je tudíz méne náchylná na pretecení. Pokud byste + se toho obávali, pouzijte typ SERIAL8. + + CTID se pouzívá k identifikaci konkrétního fyzického rádku. CTID se + mení pokud je rádek modifikován nebo znovu nacten. Pouzívají ho indexy + jako adresaci fyzických rádku. + + 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in + AllocSetAlloc()"? + + Pravdepodobne jste vycerpal dostupnou virtuální pamet, nebo tvuj + kernel má prílis nízké limity u urcitých zdroju. Pred startem + PostgreSQL vyzkousejte: +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é? - - Dřívějąí verze (před 7.4) spojovali vnořené dotazy k vnějąím - sekvenčním čtením výsledku poddotazu pro kaľdý řádek vnějąího dotazu. - Pokud poddotaz vrátil několik málo řádků IN bylo rychlé. Pro ostatní - případy je vhodné nahradit IN EXISTS: - SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab); + Mozná, ze se projde pouze jeden príkaz - zálezí to na vasem shellu. + Mel by zvednout limity datových segmentu vasich procesu na dostatecne + velkou hodnotu a snad umoznit dokoncení dotazu. Zmena limitu se bude + aplikovat pouze na aktuální proces a na vsechny nove vytvorené + procesy. Jestlize máte problém s SQL klientem, protoze vám server + vrátil prílis dat, zkuste to pred startem klienta. + + 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám? + + V psql napiste: +SELECT version(); - na: - SELECT * - FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); + 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální cas? + + Pouzijte CURRENT_TIMESTAMP: +CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - Pro urychlení vytvořete index pro subcol. - - Ve verzi 7.4 a pozdějąích, IN pouľívá stejně sofistikovanou techniku - spojování tabulek jako ostatní dotazy a je preferovaný před EXISTS. - - 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); + 4.16) Jak provést vnejsí spojení (outer join)? + + PostgreSQL podporuje standardní SQL syntaxi pro vnejsí spojení. Zde + jsou dva prí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; +SELECT * +FROM t1 LEFT OUTER JOIN t2 USING (col); - 4.24) Jak provést dotaz z více databází? - - PostgreSQL nepodporuje dotazy do jiné neľ aktuální databáze. - - contrib/dblink nabízí funkce umoľňující provedení dotazu v jiné - databázi. Klient si můľe otevřít simultální připojení do různých db - bez omezení. - - 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í, tj umoľňují - 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č ssl v 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. + Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a jeste + vrátí vsechny nespárované rádky t2 (ty, které nedohledá v t2). RIGHT + JOIN by pripojil vsechny nespárované rádky z t2. FULL JOIN vrátí + vsechny spárované rádky i vsechny zbývající rádky z obou tabulek. + Klícové slovo OUTER je volitelné. Bezná operace JOIN se také oznacuje + jako vnitrní spojení. + + 4.17) Jak provést dotaz napríc nekolika databázemi? + + Neexistuje zádný zpusob, jak se v dotazu odkazovat na tabulky z jiné + nez aktuální databáze. A to protoze má systémové tabulky ulozené + nezávisle v kazdé databázi a není tak úplne zrejmé, jak by se dotaz + provedený napríc databázemi mel chovat. + + Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomocí + funkcí. Druhý zpusob je simultální pripojení klienta ke vsem + relevantním databázím a sloucení výsledku na strane klienta. + + 4.18) Muze funkce vrátit více rádku nebo sloupcu? + + Jde to jednoduse pomocí set-returning funkce. Více na + http://www.postgresql.org/docs/techdocs.17. + + 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"? + + Nechteným vedlejsím efektem kesování SQL dotazu v PL/pgSQL funkci je + problém s neplatnými odkazy na docasné tabulky, které byly od prvního + spustení funkce zruseny a znovu vytvoreny pred dalsím spustením + PL/pgSQL funkce. Resením je pouzít príkaz EXECUTE a to proto, ze + provádecí plán SQL príkazu spousteného príkazem EXECUTE se vytvárí + pokazdé znovu (neukládá se do cache). + + Tento problém by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssích + verzích. + + 4.20) Jaké jsou moznosti replikace databází? + + Replikaci databáze umoznuje nekolik technoligií. Kazdá má urcité + výhody a nevýhody. + + Master/Slave replikaci podporuje jeden hlavní server, který prijímá + pozadavky na zápis a ctení, a nekolik podrízených serveru, které + umoznují pouze ctení (SELECT). Nejrozsírenejsím volne dostupným + resením tohoto typu je Slony-I. + + Replikace typu Multi-master podporuje existenci nekolika serveru s + povoleným zápisem na více replikovaných serverech. Toto resení zvysuje + zátez serveru, protoze je nutná synchronizace serveru. + Nejrozsírenejsím volne dostupným resením je PGCluster. + + Jeste existuje nekolik komercních a hardware resení replikací + podporujících ruzné modely replikace. + + 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proc + jsou velká písmena v názvech automaticky prevedena na malá písmena? + + Nejcastejsím duvodem nerozpoznání názvu objektu bylo pouzití vlození + názvu sloupce nebo tabulky mezi uvozovky pri zakládání tabulky. Pokud + se název zapíse mezi uvozovky, pak je case sensitive, a v dusledku + toho je nutné názvy techto sloupcu nebo tabulek v SQL príkazech také + vkládat mezi uvozovky (pokud obsahují velká písmena). Nekteré + programy, jako je napríklad pgAdmin, automaticky pouzívají uvozovky. + Takze pokud chcete, aby systém identifikoval identifikátor, musíte: + * nepouzívat uvozovky v príkazu CREATE TABLE + * v identifikátoru pouzít pouze malá písmena + * v dotazech vkládat identifikátory do uvozovek diff --git a/doc/src/FAQ/FAQ_czech.html b/doc/src/FAQ/FAQ_czech.html index 7baa4c0dea9..3a485388eed 100644 --- a/doc/src/FAQ/FAQ_czech.html +++ b/doc/src/FAQ/FAQ_czech.html @@ -1,1167 +1,645 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<HTML> - <HEAD> - <META name="generator" content="HTML Tidy, see www.w3.org"> - <META http-equiv="Content-Type" content="text/html; charset="iso-8859-2"> - <META http-equiv="Content-language" content="cs"> - <META name="description" lang="en" content="Czech translation of FAQ for PostgreSQL"> - <META name="description" lang="cs" content="Český překlad FAQ PostgreSQL"> - - <TITLE>PostgreSQL FAQ</TITLE> - </HEAD> - - <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" - alink="#0000ff"> - - - <H1>Často kladené dotazy (FAQ) PostgreSQL</H1> - - <P>Poslední aktualizace: Středa 23. června 21:10:00 EST 2004</P> - - <P>Současný správce: Bruce Momjian (<A href= - "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)</P> - - <P>Přeloľil: Pavel Stěhule (<A href= - "mailto:stehule@kix.fsv.cvut.cz">stehule@kix.fsv.cvut.cz</A>)</P> - - <P>Aktuální verzi tohoto dokumentu naleznete na adrese: <A href= - "http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>. - Český překlad na adrese: <A href="http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html"> - http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html</A>.</P> - - <P>Odpovědi na dotazy relevantní ke konkrétním platformám - lze nalézt na adrese: <A href="http://www.PostgreSQL.org/docs/index.html"> - http://www.PostgreSQL.org/docs/index.html</A>.</P> - <HR> - <H2 align="center">Obecné otázky</H2> - - <A href="#1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?<BR> - <A href="#1.2">1.2</A>) Jaká je licence na PostgreSQL?<BR> - <A href="#1.3">1.3</A>) Na kterých Unixex lze spustit PostgreSQL?<BR> - <A href="#1.4">1.4</A>) Které ne-unixové platformy jsou podporované?<BR> - <A href="#1.5">1.5</A>) Kde mohu získat PostgreSQL?<BR> - <A href="#1.6">1.6</A>) Kde mohu získat podporu?<BR> - <A href="#1.7">1.7</A>) Kde je poslední verze?<BR> - <A href="#1.8">1.8</A>) Jaká je dostupná dokumentace?<BR> - <A href="#1.9">1.9</A>) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?<BR> - <A href="#1.10">1.10</A>) Jak se mohu naučit SQL?<BR> - <A href="#1.11">1.11</A>) Nemá PostgreSQL problémy s rokem 2000?<BR> - <A href="#1.12">1.12</A>) Jak se připojit k vývojářskému týmu?<BR> - <A href="#1.13">1.13</A>) Kam podat report o chybě?<BR> - <A href="#1.14">1.14</A>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?<BR> - <A href="#1.15">1.15</A>) Jak lze finančně pomoci PostgreSQL?<BR> - - <H2 align="center">User client dotazy</H2> - - <A href="#2.1">2.1</A>) Kde naleznu ODBC ovladače pro PostgreSQL?<BR> - <A href="#2.2">2.2</A>) Jaké nástroje lze pouľít pro PostgreSQL a web?<BR> - <A href="#2.3">2.3</A>) Existuje grafické rozhraní pro PostgreSQL?<BR> - <A href="#2.4">2.4</A>) Které programovací jazyky mají podporu pro PostgreSQL?<BR> - - <H2 align="center">Administrativní dotazy</H2> - - <A href="#3.1">3.1</A>) Jak nainstalovat PostgreSQL jinam neľ do /usr/local/pgsql?<BR> - <A href="#3.2">3.2</A>) Při startu postmaster, dostanu chybové hláąení Bad System Call nebo - core dump. Proč?<BR> - <A href="#3.3">3.3</A>) Při startu postmastera dostanu hláąení o chybě - IpcMemoryCreate. Proč?<BR> - <A href="#3.4">3.4</A>) Při startu postmastera dostanu hláąení o chybě IpcSemaphoreCreate. - Proč?<BR> - <A href="#3.5">3.5</A>) Jak povolit nebo zakázat přístup z jiných stanic?<BR> - <A href="#3.6">3.6</A>) Jak ladit databázový stroj na lepąí výkon?<BR> - <A href="#3.7">3.7</A>) Jaké jsou moľnosti ladění?<BR> - <A href="#3.8">3.8</A>) Proč dostanu "Sorry, too many clients", kdyľ se zkouąím připojit?<BR> - <A href="#3.9">3.9</A>) K čemu slouľí adresář pgsql_tmp?<BR> - <A href="#3.10">3.10</A>) Proč je poľadováno dump a obnovení (load) databáze během upgrade - mezi velkými verzemi PostgreSQL?<BR> - - <H2 align="center">Provozní dotazy</H2> - - <A href="#4.1">4.1</A>) Čím se liąí binární a normální kurzor?<BR> - <A href="#4.2">4.2</A>) Jak získat pouze první řádek dotazu? Náhodný řádek?<BR> - <A href="#4.3">4.3</A>) Jak získám seznam tabulek nebo jinak jak jej získá psql?<BR> - <A href="#4.4">4.4</A>) Jak odstraním sloupec tabulky, jak změním jeho typ?<BR> - <A href="#4.5">4.5</A>) Jaká je maximální velikost řádku, tabulky a databáze?<BR> - <A href="#4.6">4.6</A>) Kolik diskového prostoru je potřeba k uloľení dat z normálního - textového souboru?<BR> - <A href="#4.7">4.7</A>) Jak získám seznam vytvořených tabulek, indexů, - databází?<BR> - <A href="#4.8">4.8</A>) Můj dotaz je pomalý a nepouľívá vytvořené indexy. Proč?<BR> - <A href="#4.9">4.9</A>) Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz?<BR> - <A href="#4.10">4.10</A>) Co to je R-tree index?<BR> - <A href="#4.11">4.11</A>) Co je Genetic Query Optimizer?<BR> - <A href="#4.12">4.12</A>) Jak provést vyhledávání regulárního výrazu case sensitiv, - insensitiv? Jak pouľít index pro case insensitive vyhledávání?<BR> - <A href="#4.13">4.13</A>) Jak v dotazu detekovat, ľe poloľka je NULL?<BR> - <A href="#4.14">4.14</A>) Jaké jsou rozdíly mezi různými znakovými typy?<BR> - <A href="#4.15.1">4.15.1</A>) Jak vytvořit serial/auto-increment pole?<BR> - <A href="#4.15.2">4.15.2</A>) Jak získat hodnotu SERIAL po vloľení řádku?<BR> - <A href="#4.15.3">4.15.3</A>) Nepovede currval() a nextval() k rozhození podmínek při souběhu s - jinými uľivateli?<BR> - <A href="#4.15.4">4.15.4</A>) Proč není vygenerované číslo pouľito při přeruąení transakce? - Proč vznikají díry v číslování vlastní sekvencí/SERIAL sloupce?<BR> - <A href="#4.16">4.16</A>) Co to je OID? Co je to TID?<BR> - <A href="#4.17">4.17</A>) Jaký je význam některých výrazů pouľitých v PostgreSQL?<BR> - <A href="#4.18">4.18</A>) Proč jsem získal chybové hláąení "ERROR: Memory exhausted in - AllocSetAlloc()"?<BR> - <A href="#4.19">4.19</A>) Jak se dozvím, kterou verzi PostgreSQL pouľívám?<BR> - <A href="#4.20">4.20</A>) Proč operace s velkými objekty končí "invalid large obj descriptor"?<BR> - <A href="#4.21">4.21</A>) Jak vytvořit sloupec obsahující implicitně aktuální datum?<BR> - <A href="#4.22">4.22</A>) Proč jsou moje vnořené dotazy pouľívající IN tak pomalé?<BR> - <A href="#4.23">4.23</A>) Jak provést vnějąí spojení (outer join)?<BR> - <A href="#4.24">4.24</A>) Jak provést dotaz napříč několika databázemi?<BR> - <A href="#4.25">4.25</A>) Můľe funkce vrátit více řádků nebo sloupců?<BR> - <A href="#4.26">4.26</A>) Proč nelze spolehlivě vytvářet a ruąit dočasné tabulky - v PL/pgSQL funkcích?<BR> - <A href="#4.27">4.27</A>) Jaké jsou moľnosti replikace databází?<BR> - <A href="#4.28">4.28</A>) Jaké jsou moľnosti ąifrování databází?<BR> - - <H2 align="center">Roząiřování PostgreSQL</H2> - - <A href="#5.1">5.1</A>) Napsal jsem UDF funkci, PostgreSQL vąak končí dump core?<BR> - <A href="#5.2">5.2</A>) Jak mohu přispět nějakými ąikovnými datovými typy a funkcemi do - PostgreSQL?<BR> - <A href="#5.3">5.3</A>) Jak napsat funkci v C vracející ntici?<BR> - <A href="#5.4">5.4</A>) Modifikoval jsem zdrojové soubory. Tato změna nebyla při rekompilaci - vzata v potaz. Proč?<BR> - - <HR> - - <H2 align="center">Obecné otázky</H2> - - <H4><A name="1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?</H4> - - <P>PostgreSQL se vyslovuje <I>Post-Gres-Q-L</I>. Zvukový záznam je - dostupný na adrese <A href="http://www.postgresql.org/postgresql.mp3"></A>.</P> - - <P>PostgreSQL vychází z databáze POSTGRES (a stále je někdy označován - zjednoduąeně jako Postgres) - výzkumného prototypu <SMALL>DBMS</SMALL> 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 <SMALL>SQL</SMALL>. PostgreSQL lze pouľívat bez omezení a jeho - zdrojové kódy jsou volně k dispozici.</P> - - <P>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 (<A href= - "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). - (viz <A href="#1.6">1.6</A> - jak se zapojit). Tento tým je zodpovědný za veąkerý vývoj - PostgreSQL. Jedná se o veřejný projekt, který není řízen ľádnou firmou. - Pokud se chcete zapojit, přečtěte si developer's FAQ na adrese <A href= - "http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html">http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A></P> - - <P>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> - - <P>Původní název software z Berkley byl Postgres. Po přidání jazyka <SMALL>SQL</SMALL> se - název změnil na Postgres95. Koncem roku 1996 byl RDBMS přejmenován na - PostgreSQL.</P> - - <H4><A name="1.2">1.2</A>) Jaká je licence na PostgreSQL?</H4> - - <P>PostgreSQL je předmětem následujících autorských práv:</P> - - <P>Dílčí Copyright (c) 1996-2007, PostgreSQL Global Development Group - Dílčí Copyright (c) 1994-6, Regents of the University of California</P> - - <P>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ů.</P> - - <P>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.</P> - - <P>HE 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.</P> - - <P>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.</P> - - <H4><A name="1.3">1.3</A>) Na kterých Unixex lze spustit PostgreSQL?</H4> - - <P>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.</P> - - <H4><A name="1.4">1.4</A>) Které ne-unixové platformy jsou podporované?</H4> - - <P><STRONG>Klient</STRONG></P> - - <P>Knihovna <I>libpq</I>, 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 <I>win32.mak</I> a - Win32 knihovny <I>libpq</I> a <I>psql</I>. K databázi PostgerSQL lze přistupovat skrze - rozhraní <SMALL>ODBC</SMALL>.</P> - - <P><STRONG>Server</STRONG></P> - - <P>Server můľe být na WindowsNT a Win2k provozován pouze s knihovnou - Cygwin, Cygnus Unix/NT porting library. Více <I>pgsql/doc/FAQ_MSWIN</I> v - distribuci nebo MS Windows FAQ na adrese - <A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>.</P> - - <P>Na nativním portu pro MS Win NT/2000/XP se pracuje. Daląí informace - o aktuálním stavu PostgreSQL pro Windows naleznet na adrese - <A href="http://techdocs.postgresql.org/guides/Windows">http://techdocs.postgresql.org/guides/Windows</A> a - <A href="http://momjian.postgresql.org/main/writings/pgsql/win32.html"> - http://momjian.postgresql.org/main/writings/pgsql/win32.html</A>.</P> - - <P>Existující port pro Novell Netware 6 naleznete na - <A href="http://forge.novell.com">http://forge.novell.com</A>.</P> - - <H4><A name="1.5">1.5</A>) Kde mohu získat PostgreSQL?</H4> - - <P>Primárním anonymním ftp serverem pro PostgreSQL je - <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>. - Seznam zrcadel naleznete na naąich webových stránkách.</P> - - <H4><A name="1.6">1.6</A>) Kde mohu získat podporu?</H4> - - <P>Hlavní mailová konference je: <A href="mailto:pgsql-general@PostgreSQL.org"> - pgsql-general@PostgreSQL.org</A>. 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):</P> -<PRE> - subscribe - end -</PRE> -<P>na adresu <A href="mailto:pgsql-general-request@PostgreSQL.org"> - pgsql-general-request@PostgreSQL.org</A>.</P> - - <P>Můľete si vyľádat denní přehled (diggest), který má zhruba 30K denně - zpráv.</P> - - <P>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 <A href="mailto:pgsql-bugs-request@PostgreSQL.org"> - pgsql-bugs-request@PostgreSQL.org</A>.</P> - - <P>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.</P> - - <P>Seznam daląích konferencí naleznete na stránkách PostgreSQL:</P> - <BLOCKQUOTE> - <P><A href="http://www.postgresql.org">http://www.postgresql.org</A></P> - </BLOCKQUOTE> - <H4><A name="1.7">1.7</A>) Jaká je poslední verze?</H4> - - <P>Poslední verze PostgreSQL je 7.4.3. Plánujeme uvolnit významnou verzi - kaľdých ąest aľ osm měsíců.</P> - - <H4><A name="1.8">1.8</A>) Jaká je dostupná dokumentace?</H4> - - <P>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 <I>/doc</I>. Manuály jsou - přístupné online na <A href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P> - - <P>Na adresách <A href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> a - <A href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A> - naleznezte dvě online knihy o PostgreSQL. Seznam dostupné literatury je na - <A href="http://techdocs.PostgreSQL.org/techdocs/bookreviews.php"> - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>. Soubor - technických článků s tematikou PostgresQL najdete na <A href= - "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P> - - <P><I>psql</I> má uľitečný metapříkaz \d slouľící k zobrazení informací o typech, - operátorech, funkcí, agregačních funkcí atd.</P> - - <P>Více dokumentace naleznete na naąich webových stránkách.</P> - - <H4><A name="1.9">1.9</A>) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?</H4> - - <P>PostgreSQL podporuje roząířenou podmnoľinu <SMALL>SQL-92</SMALL>. V naąem - <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A> - 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).</P> - - <H4><A name="1.10">1.10</A>) Jak se mohu naučit SQL?</H4> - - <P>V knize The PostgreSQL book na <A href= - "http://www.PostgreSQL.org/docs/awbook.html"> - http://www.PostgreSQL.org/docs/awbook.html</A> je vysvětlen jazyk SQL (vyąla - česky). Daląí dostupnou knihou je <A href= - "http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</A>. - Kvalitní návody naleznete na <A href= - "http://www.intermedia.net/support/sql/sqltut.shtm"> - http://www.intermedia.net/support/sql/sqltut.shtm</A>, a na - <A href="http://sqlcourse.com">http://sqlcourse.com</A>.</P> - - <P>Daląí je Teach Yourself SQL in 21 days, Second Edition na <A href= - "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.</P> - - <P>Mnoho uľivatelů doporučuje <I>The Practical SQL Handbook</I>, Bowman, Judith - S., et al., Addison-Wesley. Jiní preferují <I>The Complete Reference SQL</I>, - Groff et al., McGraw-Hill.</P> - - <H4><A name="1.11">1.11</A>) Nemá PostgreSQL problémy s rokem 2000?</H4> - - <P>Nemá, můľeme pracovat s datumy po roce 2000 naąeho letopočtu i před - rokem 2000 př.n.l.</P> - - <H4><A name="1.12">1.12</A>) Jak se připojit k vývojářskému týmu?</H4> - - <P>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í <I>pgsql-hackers</I> a <I>pgsql-patches</I>. Kvalitní záplaty posílejte do - pgsql-patches.</P> - - <P>Právo commit má v <SMALL>CVS</SMALL> 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.</P> - - <H4><A name="1.13">1.13</A>) Kam podat report o chybě?</H4> - - <P>Navątivte naąi PostgreSQL BugTool stránku na <A href= - "http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>, - která obsahuje návod a směrnice jak podat chybový report.</P> - - <P>Ověřte si na naąem ftp serveru <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>, - zda-li máte nejnovějąí verzi PostgreSQL a zda-li k ní neexistují nějaké záplaty.</P> - - <H4><A name="1.14">1.14</A>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?</H4> - - <P>Existuje několik hledisek jak porovnávat software: vlastnosti, výkon, - spolehlivost, podpora a cena.</P> - <DL> - <DT><B>Vlastnosti</B></DT> - <DD>PostgreSQL má hodně společných vlastností s velkými komerčními - <SMALL>DBMS</SMALL>, 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í.<BR><BR></DD> - - <DT><B>Výkon</B></DT> - <DD>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 <I>vlastnosti</I>. 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 <A href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A>. - Za vývojem MySQL není Open Source komunita, ale komerční společnost, - přestoľe svoje produkty distribuuje jako Open Source.<BR><BR></DD> - - <DT><B>Spolehlivost</B></DT> - <DD>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.<BR><BR></DD> - - <DT><B>Podpora</B></DT> - <DD>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 <SMALL>DBMS</SMALL> 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 (<A href="#1.6">FAQ sekce 1.6</A>).<BR><BR></DD> - - <DT><B>Cena</B></DT> - <DD>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).<BR> - <BR></DD> - </DL> - - <H4><A name="1.15">1.15</A>) Jak lze finančně pomoci PostgreSQL?</H4> - - <P>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.</P> - - <P>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.</P> - - <P>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 <A href= - "http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> a darujte je.</P> - - <P>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.</P> - <HR> - - <P>Pokud máte příklad úspěąného nasazení PostgreSQL, přihlaątě se na náą - advocacy site na <A href="http://advocacy.postgresql.org">http://advocacy.postgresql.org</A>.</P> - - <H2 align="center">User client dotazy</H2> - - <H4><A name="2.1">2.1</A>) Kde naleznu <SMALL>ODBC</SMALL> ovladače pro PostgreSQL?</H4> - - <P>Pro PostgreSQL existují dva <SMALL>ODBC</SMALL> ovladače - PsqlODBC a OpenLink ODBC.</P> - - <P>PsqlODBC je ke staľení na <A href= - "http://gborg.postgresql.org/project/psqlodbc/projdisplay.php"> - http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P> - - <P>OpenLink můľete získat na <A href="http://www.openlinksw.com">http://www.openlinksw.com</A>. - Spolupracuje s jejich klientským programovým vybavením a je dostupný pro vąechny jimi - podporované platformy (Win, Mac, Unix, VMS).</P> - - <P>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 <A href= - "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P> - - <H4><A name="2.2">2.2</A>) Jaké nástroje lze pouľít pro PostgreSQL a web?</H4> - - <P>Pěkný úvod do databázových technologií zabezpečujících chod webových - stránek najdete na <A href="http://www.webreview.com">http://www.webreview.com</A>.</P> - - <P>Pro tvorbu webu existuje excelentní rozhraní PHP, které naleznete na - <A href="http://www.php.net">http://www.php.net</A>.</P> - - <P>Pro sloľitějąí případy se často pouľívá Perl a CGI.pm nebo mod_perl.</P> - - <H4><A name="2.3">2.3</A>) Existuje grafické rozhraní pro PostgreSQL?</H4> - - <P>Pro PostgreSQL existuje několik grafických rozhraní: PgAccess - (<A href="http://www.php.net">http://www.php.net</A>), PgAdmin III - (<A href="http://www.php.net">http://www.php.net</A>), RHDB Admin - (<A href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</A>) a Rekall ( - <A href="http://www.thekompany.com/products/rekall/">http://www.thekompany.com/products/rekall/</A>). - Dále jeątě PhpPgAdmin - (<A href="http://phppgadmin.sourceforge.net/">http://phppgadmin.sourceforge.net/</A>) coľ je rozhraní PostgreSQL - zaloľené na web technologii.</P> - - <P>Úplnějąí seznam najdete na <A href= - "http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>.</P> - - <H4><A name="2.4">2.4</A>) Které programovací jazyky mají podporu pro PostgreSQL?</H4> - - <P>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.</P> - - <P>Distribuce PostgreSQL obsahuje tato rozhraní:</P> - <UL> - <LI>C (libpq)</LI> - <LI>Embbedded C (ecpg)</LI> - <LI>Java (jdbc)</LI> - <LI>Python (PyGreSQL)</LI> - <LI>TCL (libpgtcl)</LI> - </UL> - <P>Daląí rozhraní jsou dostupná na <A href="http://gborg.postgresql.org">http://gborg.postgresql.org</A> - v sekci <I>Drivers/Interfaces</I>.</P> - <HR> - - <H2 align="center">Administrativní dotazy</H2> - - <H4><A name="3.1">3.1</A>) Jak nainstalovat PostgreSQL jinam neľ do /usr/local/pgsql?</H4> - - <P>Pouľijte volbu <I>--prefix</I> při spuątění configure.</P> - - <H4><A name="3.2">3.2</A>) Při startu postmaster, dostanu chybové hláąení Bad System Call - nebo core dump. Proč?</H4> - - <P>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ů.</P> - - <H4><A name="3.3">3.3</A>) Při startu postmastera dostanu hláąení o chybě IpcMemoryCreate. Proč?</H4> - - <P>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 PostgreSQL Administrator's Guide - naleznete podrobnějąí informace o sdílené paměti a semaforech.</P> - - <H4><A name="3.4">3.4</A>) Při startu postmastera dostanu hláąení o chybě IpcSemaphoreCreate. - Proč?</H4> - - <P>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 <I>postmaster</I> s limitem backendů. Pouľijte přepínač <I>-N</I> s - hodnotou menąí neľ 32. Úplným řeąením je zvýąení hodnot <SMALL>SEMMNS</SMALL> - a <SMALL>SEMMNI</SMALL> jadra.</P> - - <P>Nefunkční semafory mohou způsobit pád během intenzivních databázových - operací.</P> - - <P>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.</P> - - <H4><A name="3.5">3.5</A>) Jak povolit nebo zakázat přístup z jiných stanic?</H4> - - <P>Při výchozím nastavení PostgreSQL odepře přístup z jiných stanic neľ - lokální s pouľitím UDP. Přístup z jiných strojů není moľný dokud - jej nepovolíte nastavením tcpip_socket v postgresql.conf <B>a</B> určením - způsobu autentifikace v <I>$PGDATA/pg_hba.conf</I>.</P> - - <H4><A name="3.6">3.6</A>) Jak ladit databázový stroj na lepąí výkon?</H4> - - <P>Určitě pomohou indexy. Příkaz <SMALL>EXPLAIN ANALYZE</SMALL> Vám umoľní sledovat - jak PostgreSQL interpretuje Váą dotaz a které indexy pouľívá.</P> - - <P>Při větąí dávce INSERTů uvaľujte o náhradě příkazem <SMALL>COPY</SMALL>. Ten je mnohem - rychlejąí neľli samotný <SMALL>INSERT</SMALL>. Kaľdý příkaz mimo blok <SMALL>BEGIN WORK/COMMIT</SMALL> - 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.</P> - - <P>Máte několik daląích moľností, jak zlepąit výkon. Můľete zakázat <I>fsyn()</I> - při startu postmastera přepínači <I>-o -F</I>. Tyto přepínače zabrání <I>fsync()</I>, - tj. zápisu na disk po kaľdé transakci.</P> - - <P>Můľete zvýąit velikost pamě»ových bufferů pouľitých backendy tj. - parametr <I>-B</I> 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ů.</P> - - <P>Dále můľete pouľít přepínač <I>-S</I> 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.</P> - - <P>Můľete pouľít příkaz <SMALL>CLUSTER</SMALL>, který uspořádá fyzicky data v tabulkách - podle indexu. Více na manuálových stránkách příkazu <SMALL>CLUSTER</SMALL>.</P> - - <H4><A name="3.7">3.7</A>) Jaké jsou moľnosti ladění?</H4> - - <P>Máte několik moľností jak se dostat k uľitečným stavovým informacím.</P> - - <P>Zaprvé, při překladu pouľijte přepínač <I>--enable-cassert</I>, tím se zapne - monitorování a následné zastavení aplikace, kdyľ se proces v backendu - dostane do neočekávaného stavu.</P> - - <P>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:</P> -<PRE> - cd /usr/local/pgsql - ./bin/postmaster > server.log 2>&1 & -</PRE> - <P>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č <I>-d</I> 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.</P> - - <P>Pokud neběľí postmaster, můľete spustit backend PostgreSQL z příkazové - řádky a napsat svůj <SMALL>SQL</SMALL> dotaz přímo v backendu (doporučeno <B>pouze</B> 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.</P> - - <P>Pokud běľí <I>postmaster</I>, spus»e <I>psql</I> v jednom okně a pak si zjistěte <SMALL>PID</SMALL> - procesu postgres pouľitého psql. V debuggeru sepřipojte k postgresql - <SMALL>PID</SMALL>. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql. Pokud - ladíte startup postgresu, pak nastavte PGOPTIONS="-W n" a spus»e <I>psql</I>. - 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.</P> - - <P>Pro ladění a měření výkonu mohou být uľitečné přepínače <I>-s, -A</I> a <I>-t</I> - programu postgres (backend).</P> - - <P>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 <I>pgsql/data/base/dbname</I>. Profil klienta pak v jeho aktuálním - adresáři. Korektní profilace v prostředí Linux poľaduje konfiguraci - systému s parametrem <I>-DLINUX_PROFILE</I>.</P> - - <H4><A name="3.8">3.8</A>) Proč dostanu "Sorry, too many clients", kdyľ se zkouąím připojit?</H4> - - <P>Zvyąte limit postmastera na maximální počet současně spuątěných - backendů.</P> - - <P>Výchozí hodnota je 32 backendů. Tuto hodnotu zvýąíte zastavením a - opětovným spuątěním postmastera s parametrem <I>-N</I> nebo úpravou - <I>postgresql.conf</I>.</P> - - <P>Při zvýąení hodnoty <I>-N</I> nad 32 musíte zvýąit hodnotu <I>-B</I> nad výchozí 64, - <I>-B</I> 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 - <SMALL>SHMMAX</SMALL>, maximální počet semafórů <SMALL>SEMMNS</SMALL> a <SMALL>SEMMNI</SMALL>, maximální počet - procesů <SMALL>NPROC</SMALL>, maximální počet procesů uľivatele <SMALL>MAXUPRC</SMALL> a maximální - počet otevřených souborů <SMALL>NFILE</SMALL> a <SMALL>NINODE</SMALL>. 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.</P> - - <H4><A name="3.9">3.9</A>) K čemu slouľí adresář pgsql_tmp?</H4> - - <P>Tento adresář obsahuje dočasné soubory vytvořené exekutorem dotazů. - Například, kdyľ je nutné třídění k zajiątění <SMALL>ORDER BY</SMALL> a třídění má větąí - nároky na prostor neľ povoluje parametr <I>-S</I> backendu, pak je vytvořen - dočasný soubor k uloľení extra údajů.</P> - - <P>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ářů.</P> - - <H4><A name="3.10">3.10</A>) Proč je poľadováno dump a obnovení (load) databáze během - upgrade mezi velkými verzemi PostgreSQL?</H4> - - <P>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 výynamné 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.</P> - - <HR> - - <H2 align="center">Provozní dotazy</H2> - - <H4><A name="4.1">4.1</A>) Čím se liąí binární a normální kurzor?</H4> - - <P>Popis najdete v manuálové stránce <SMALL>DECLARE</SMALL></P> - - <H4><A name="4.2">4.2</A>) Jak získat pouze první řádek dotazu? Náhodný řádek?</H4> - - <P>Podívejte se do man. stránky příkazu <SMALL>FETCH</SMALL>, nebo pouľijte <SMALL>SELECT</SMALL> ... - <SMALL>LIMIT</SMALL> ...</P> - - <P>I kdyľ potřebujete získat pouze prvních několik řádků, je třeba - zpracovat vąechna data, např. pokud dotaz má <SMALL>ORDER BY</SMALL>. Pokud vąak - existuje index, který odpovídá <SMALL>ORDER BY</SMALL>, PostgreSQL můľe získat - pouze prvních n řádků a ukončit zpracování dotazu.</P> - - <P>K získání náhodného řádku pouľijte:</P> -<PRE> - SELECT col - FROM tab - ORDER BY random() - LIMIT 1; -</PRE> - <H4><A name="4.3">4.3</A>) Jak získám seznam tabulek nebo jinak jak jej získá psql?</H4> - - <P>Příkaz \dt v psql zobrazí seznam tabulek. Úplný seznam příkazů <I>psql</I> - dostanete příkazem \?. Také se můľete podívat do zdrojových kódů <I>psql</I> - do souboru <I>pgsql/src/bin/psql/describe.c</I>. Ten obsahuje <SMALL>SQL</SMALL> příkazy, - které se pouľívají v psql metapříkazech. Dále můľete spustit <I>psql</I> - s přepínačem <I>-E</I>, který způsobí zobrazení kaľdého dotazu, které - zpracování metapříkazu vyvolá. PostgreSQL nabízí SQLi INFORMATION - SCHEMA s tabulkami obsahující informace o databázi.</P> - - <H4><A name="4.4">4.4</A>) Jak odstraním sloupec tabulky, jak změním jeho typ?</H4> - - <P>Počínaje verzí 7.3 můľete pouľít příkaz <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Ve - starąích verzích můľete pouľít následující postup:</P> -<PRE> - 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; -</PRE> - <P>Pro změnu typu sloupce je třeba provést:</P> -<PRE> - 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; -</PRE> - Poté proveďte <I>VACUUM FULL tab</I> - uvolníte tím diskový prostor zabraný - nyní jiľ neplatnými řádky. - - <H4><A name="4.5">4.5</A>) Jaká je maximální velikost řádku, tabulky a databáze?</H4> - - <P>PostgreSQL má tato omezení:</P> -<PRE> - 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 -</PRE> - <P>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.</P> - - <P>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é.</P> - - <P>Maximální velikost tabulky a maximální počet sloupců můľeme - zečtyřnásobit nastavením velikosti bloku na 32K.</P> - - <H4><A name="4.6">4.6</A>) Kolik diskového prostoru je potřeba k uloľení dat z </H4> - normálního textového souboru? - - <P>PostgreSQL vyľaduje aľ pětinásobek diskového prostoru k uloľení dat z - textového souboru.</P> - - <P>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.</P> -<PRE> - 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 +<html> +<head> +<title>PostgreSQL FAQ</title> +<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> +<meta http-equiv="Content-language" content="cs"> +<meta name="description" lang="en" content="Czech translation of FAQ for PostgreSQL"> +<meta name="description" lang="cs" content="ÄŚeskĂ˝ pĹ™eklad FAQ PostgreSQL"> +</head> +<body bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff"> +<h1>Frequently Asked Questions</h1> +<p><i>ÄŚasto kladenĂ© dotazy (FAQ) PostgreSQL</i> +</p> +<p>PoslednĂ aktualizace: 29. Ĺ™Ăjna 2007 (aktualizováno pro PostgreSQL 8.3) +</p> +<p>SouÄŤasnĂ˝ správce: Bruce Momjian (bruce@momjian.us) +</p> +<p>PĹ™eloĹľil: Pavel StÄ›hule (pavel.stehule@gmail.com) +</p> +<p>NejaktuálnÄ›jšà verzi tohoto dokumentu naleznete na adrese +<a href="http://www.postgresql.org/files/documentation/faqs/FAQ.html" title="http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html</a> +</p> +<p>OdpovÄ›di na otázky vázanĂ© na konkrĂ©tnĂ platformy naleznete na +adrese <a href="http://www.postgresql.org/docs/faq/" title="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</a>. +</p> +<hr> +<h2 align="center">ObecnĂ© otázky</h2> +<a href="#item1.1">1.1</a>) Co je to PostgreSQL? Jaká je správná vĂ˝slovnost slova PostgreSQL?<br> +<a href="#item1.2">1.2</a>) Kdo Ĺ™ĂdĂ vĂ˝voj PostgreSQL?<br> +<a href="#item1.3">1.3</a>) Pod jakou licencĂ je PostgreSQL?<br> +<a href="#item1.4">1.4</a>) Na kterĂ˝ch platformách lze provozovat PostgreSQL?<br> +<a href="#item1.5">1.5</a>) Kde mohu zĂskat PostgreSQL?<br> +<a href="#item1.6">1.6</a>) Jaká je poslednĂ verze?<br> +<a href="#item1.7">1.7</a>) Kde mohu zĂskat podporu?<br> +<a href="#item1.8">1.8</a>) Jak a kam hlásit chyby?<br> +<a href="#item1.9">1.9</a>) Kde najdu informace o známĂ˝ch chybách nebo nepodporovanĂ˝ch vlastnostech?<br> +<a href="#item1.10">1.10</a>) Jaká je dostupná dokumentace?<br> +<a href="#item1.11">1.11</a>) Jak se mohu nauÄŤit SQL?<br> +<a href="#item1.12">1.12</a>) Jak se mohu pĹ™ipojit k tĂ˝mu vĂ˝vojářů?<br> +<a href="#item1.13">1.13</a>) Jak je na tom PostgreSQL v porovnánĂ s jinĂ˝mi databázemi?<br> +<a href="#item1.14">1.14</a>) Je PostgreSQL pĹ™ipraven na aktuálnĂ zavádÄ›nĂ letnĂho ÄŤasu v nÄ›kterĂ˝ch zemĂch?<br> +<h2 align="center">Dotazy na klientská rozhranĂ</h2> +<a href="#item2.1">2.1</a>) Která rozhranĂ jsou pouĹľitelná pro PostgreSQL?<br> +<a href="#item2.2">2.2</a>) JakĂ© nástroje lze pouĹľĂt pro PostgreSQL a web?<br> +<a href="#item2.3">2.3</a>) Existuje grafickĂ© rozhranĂ pro PostgreSQL?<br> +<h2 align="center">AdministrativnĂ dotazy</h2> +<a href="#item3.1">3.1</a>) Jak nainstalovat PostgreSQL jinam neĹľ do /usr/local/pgsql?<br> +<a href="#item3.2">3.2</a>) Jak nastavit pravidla pro pĹ™Ăstup z jinĂ˝ch stanic?<br> +<a href="#item3.3">3.3</a>) Jak vyladit databázi na vyššà vĂ˝kon?<br> +<a href="#item3.4">3.4</a>) JakĂ© mám ladĂcĂ prostĹ™edky?<br> +<a href="#item3.5">3.5</a>) Co znamená "Sorry, too many clients", kdyĹľ se zkoušĂm pĹ™ipojit?<br> +<a href="#item3.6">3.6</a>) ProÄŤ je nutnĂ˝ dump a obnovenĂ (load) databáze pĹ™i upgradu PostgreSQL?<br> +<a href="#item3.7">3.7</a>) JakĂ˝ hardware bych mÄ›l pouĹľĂvat?<br> +<h2 align="center">ProvoznĂ dotazy</h2> +<a href="#item4.1">4.1</a>) Jak zĂskat pouze prvnà řádek dotazu? NáhodnĂ˝ řádek?<br> +<a href="#item4.2">4.2</a>) Jak zĂskám seznam tabulek, indexĹŻ, databázĂ, a definovanĂ˝ch uĹľivatelĹŻ. Mohu vidÄ›t dotazy, kterĂ© pouĹľĂvá psql pro zobrazenĂ tÄ›chto informacĂ?<br> +<a href="#item4.3">4.3</a>) Jak zmÄ›nit datovĂ˝ typ sloupce?<br> +<a href="#item4.4">4.4</a>) Jaká je maximálnĂ velikost řádku, tabulky a databáze?<br> +<a href="#item4.5">4.5</a>) Kolik diskovĂ©ho prostoru je potĹ™eba k uloĹľenĂ dat z normálnĂho textovĂ©ho souboru?<br> +<a href="#item4.6">4.6</a>) MĹŻj dotaz je pomalĂ˝ a nepouĹľĂvá vytvoĹ™enĂ© indexy. ProÄŤ?<br> +<a href="#item4.7">4.7</a>) Jak zjistĂm, jak se vyhodnocuje mĹŻj dotaz?<br> +<a href="#item4.8">4.8</a>) Jak pouĹľĂt case-(in)sensitive regulárnĂ vĂ˝raz? Jak pouĹľĂt index pro case insensitive hledánĂ?<br> +<a href="#item4.9">4.9</a>) Jak v dotazu detekovat, Ĺľe poloĹľka je NULL? Jak bezpeÄŤnÄ› spojit dva Ĺ™etÄ›zce, pokud mohou obsahovat NULL? Lze tĹ™Ădit podle toho, jestli je poloĹľka NULL nebo ne?<br> +<a href="#item4.10">4.10</a>) JakĂ© jsou rozdĂly mezi rĹŻznĂ˝mi znakovĂ˝mi typy?<br> +<a href="#item4.11.1">4.11.1</a>) Jak vytvoĹ™it serial/auto-increment poloĹľku?<br> +<a href="#item4.11.2">4.11.2</a>) Jak zĂskat hodnotu SERIAL po vloĹľenà řádku?<br> +<a href="#item4.11.3">4.11.3</a>) NezpĹŻsobĂ currval() a nextval() problĂ©my ve vĂce uĹľivatelskĂ©m prostĹ™edĂ?<br> +<a href="#item4.11.4">4.11.4</a>) ProÄŤ nenĂ vygenerovanĂ© ÄŤĂslo pouĹľito pĹ™i pĹ™erušenĂ transakce?ProÄŤ vznikajĂ dĂry v ÄŤĂslovánĂ prostĹ™ednictvĂm sekvence nebo typu SERIAL?<br> +<a href="#item4.12">4.12</a>) Co to je OID? Co je to CTID?<br> +<a href="#item4.13">4.13</a>) Co znamená chybovĂ© hlášenĂ "ERROR: Memory exhausted in AllocSetAlloc()"?<br> +<a href="#item4.14">4.14</a>) Jak zjistĂm, kterou verzi PostgreSQL pouĹľĂvám?<br> +<a href="#item4.15">4.15</a>) Jak vytvoĹ™it sloupec, kterĂ˝ bude implicitnÄ› obsahovat aktuálnĂ ÄŤas?<br> +<a href="#item4.16">4.16</a>) Jak provĂ©st vnÄ›jšà spojenĂ (outer join)?<br> +<a href="#item4.17">4.17</a>) Jak provĂ©st dotaz napĹ™ĂÄŤ nÄ›kolika databázemi?<br> +<a href="#item4.18">4.18</a>) MĹŻĹľe funkce vrátit vĂce řádkĹŻ nebo sloupcĹŻ?<br> +<a href="#item4.19">4.19</a>) Co je pĹ™ĂÄŤinou chyby "relation with OID xxxxx does not exist"?<br> +<a href="#item4.20">4.20</a>) JakĂ© jsou moĹľnosti replikace databázĂ?<br> +<a href="#item4.21">4.21</a>) ProÄŤ v dotazu nejsou rozpoznány názvy mĂ˝ch tabulek nebo funkcĂ? ProÄŤ jsou velká pĂsmena v názvech automaticky pĹ™evedena na malá pĂsmena?<br> +<hr> +<h2 align="center">ObecnĂ© otázky</h2> +<h3><a name="item1.1">1.1</a>) Co je to PostgreSQL? Jaká je správná vĂ˝slovnost slova PostgreSQL?</h3> +<p>VĂ˝slovnost PostgreSQL je <i>Post-Gres-Q-L</i> +, nebo zjednodušenÄ› <i>Postgres</i> +. V Ĺ™adÄ› jazykĹŻ je slovo PostgreSQL obtĂĹľnÄ› vyslovitelnĂ˝, proto se v hovoru ÄŤasto pouĹľĂvá zjednodušená forma názvu. Pro ty, kteřà by si rádi poslechli vĂ˝slovnost, je k dispozici audiozáznam v <a href="http://www.postgresql.org/files/postgresql.mp3" title="http://www.postgresql.org/files/postgresql.mp3">MP3 formátu</a>. +</p> +<p>PostgreSQL je relaÄŤnĂ databáze s nÄ›kterĂ˝mi objektovĂ˝mi rysy, která má moĹľnosti tradiÄŤnĂch +komerÄŤnĂch databázovĂ˝ch systĂ©mĹŻ s nÄ›kolika rozšĂĹ™enĂmi, kterĂ© lze najĂt v DBMS +systĂ©mech přÚtĂ generace. PouĹľĂvánĂ PostgreSQL nenĂ omezenĂ© a veškerĂ© zdrojovĂ© kĂłdy jsou +volnÄ› dostupnĂ©. +</p> +<p>Za vĂ˝vojem PostgreSQL je mezinárodnĂ skupina nezávislĂ˝ch vĂ˝vojářů navzájem komunikujĂcĂch +prostĹ™ednictvĂm internetu. Tento projekt nenĂ Ĺ™Ăzen žádnou obchodnĂ organizacĂ. Pokud se chcete +pĹ™idat k projektu, pĹ™eÄŤtÄ›te si vĂ˝vojářskĂ© FAQ na adrese <a href="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html" title="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</a> . +</p> +<h3><a name="item1.2">1.2</a>) Kdo Ĺ™ĂdĂ vĂ˝voj PostgreSQL?</h3> +<p>Pokud budete hledat organizaci Ĺ™ĂdĂcĂ vĂ˝voj PostgreSQL, budete zklamáni. Nic takovĂ©ho +neexistuje. ExistujĂ pouze "core" a CVS skupiny uĹľivatelĹŻ, ale ty existujĂ vĂce z administrátorskĂ˝ch +dĹŻvodĹŻ neĹľ z organizaÄŤnĂch. Projekt je smÄ›rován komunitou vĂ˝vojářů a uĹľivatelĹŻ, ke kterĂ© se +kdokoliv mĹŻĹľe pĹ™ipojit. JedinĂ© co potĹ™ebuje, je pĹ™ihlásit se do elektronickĂ© konference. VĂce ve +<a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html" title="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">vĂ˝vojářskĂ©m FAQ</a>. +</p> +<h3><a name="item1.3">1.3</a>) Pod jakou licencĂ je PostgreSQL?</h3> +<p>PostgreSQL je pĹ™edmÄ›tem následujĂcĂch autorskĂ˝ch práv: +</p> +<p>DĂlÄŤĂ Copyright (c) 1996-2005, PostgreSQL Global Development Group<br> +DĂlÄŤĂ Copyright (c) 1994-6, Regents of the University of California +</p> +<p>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ĹŻ. +</p> +<p>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. +</p> +<p>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. +</p> +<p>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. +</p> +<h3><a name="item1.4">1.4</a>) Na kterĂ˝ch platformách lze provozovat PostgreSQL?</h3> +<p>StruÄŤnÄ› Ĺ™eÄŤeno, PostgreSQL běžà na všech modernĂch unixovĂ˝ch systĂ©mech. Seznam tÄ›ch, u kterĂ˝ch probÄ›hlo testovánĂ, naleznete v instalaÄŤnĂch instrukcĂch. +</p> +<p>PostreSQL takĂ© běžà nativnÄ› na všech Microsof Windows systĂ©mech odvozenĂ˝ch z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP a Windows2003. InstalaÄŤnĂ balĂÄŤek naleznete na adrese <a href="http://pgfoundry.org/projects/pginstaller" title="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>. Na staršĂch systĂ©mech s ještÄ› MS-DOS jádrem lze spustit PostgreSQL s emulaÄŤnĂm programem Cygwin. +</p> +<p>Dále existuje port pro Novell Netware 6 port na adrese <a href="http://forge.novell.com" title="http://forge.novell.com">http://forge.novell.com</a>, a pro OS/2 verze (eComStation) na adrese <a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F" title="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a> . +</p> +<h3><a name="item1.5">1.5</a>) Kde mohu zĂskat PostgreSQL?</h3> +<p>PomocĂ webovĂ©ho klienta z adresy <a href="http://www.postgresql.org/ftp/" title="http://www.postgresql.org/ftp/">http://www.postgresql.org/ftp/</a> nebo klienta ftp z adresy <a href="ftp://ftp.postgresql.org/pub/" title="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a>. +</p> +<h3><a name="item1.6">1.6</a>) Jaká je poslednĂ verze?</h3> +<p>NejnovÄ›jšà verzĂ PostgreSQL je verze 8.2.5 +</p> +<p>V plánu je uvolĹovat kaĹľdoroÄŤnÄ› jednu velkou verzi a kaĹľdĂ˝ch nÄ›kolik mÄ›sĂcĹŻ malĂ© verze. +</p> +<h3><a name="item1.7">1.7</a>) Kde mohu zĂskat podporu?</h3> +<p>NejÄŤastÄ›jšà forma podpory uĹľivatelĹŻm PostgreSQL komunitou je prostĹ™ednictvĂm e-mailĹŻ. Na našem webovĂ©m serveru naleznete <a href="http://www.postgresql.org/community/lists/" title="http://www.postgresql.org/community/lists/">odkaz</a> na stránky,kde se mĹŻĹľete pĹ™ihlásit do elektronickĂ© konference. Pro začátek jsou doporuÄŤenĂ© konference general nebo bugs. +</p> +<p>Dalšà cestou je IRC kanál #postgresql na Freenode (irc.freenode.net). K pĹ™ipojenĂ pouĹľijte UnixovĂ˝ pĹ™Ăkaz irc -x '#postgresql' "$USER" irc.freenode.net nebo jakĂ©koholiv jinĂ©ho IRC klienta. V tĂ©to sĂti existuje ještÄ› španÄ›lská (#postgresql-es) a francouzská (#postgresqlfr) verze. Dalšà PostgreSQL kanál naleznete na EFNet. +</p> +<p>Seznam spoleÄŤnostĂ poskytujĂcĂ komerÄŤnĂ podporu naleznete na adrese <a href="http://techdocs.postgresql.org/companies.php" title="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</a>. +</p> +<h3><a name="item1.8">1.8</a>) Jak a kam hlásit chyby?</h3> +<p>VyplĹte formulář na adrese <a href="http://www.postgresql.org/support/submitbug" title="http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</a>. Na našem ftp serveru <a href="ftp://ftp.postgresql.org/pub/" title="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a> si ověřte, Ĺľe pouĹľĂváte aktuálnĂ verzi PostreSQL. +</p> +<p>Chyby reportovanĂ© prostĹ™ednictvĂm chybovĂ©ho formuláře nebo zaslánĂm mailu do PostgreSQL konference obvykle generuje následujĂcĂ odezvu: +</p> +<ul><li> Nejedná se o chybu, a proÄŤ +</li> +<li> Jedná se o známou chybu, která je jiĹľ v seznamu ĂşkolĹŻ <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> +</li> +<li> Tato chyba byla opravena v aktuálnĂ verzi +</li> +<li> Tato chyba byla jiĹľ opravena ve verzi, která zatĂm nebyla oficiálnÄ› uvolnÄ›na +</li> +<li> PoĹľadavek na dalšà doplĹujĂcĂ informace: +<ul><li> OperaÄŤnĂ systĂ©m +</li> +<li> Verze PostgreSQL +</li> +<li> Test reprodukujĂcĂ chybu +</li> +<li> LadĂcĂ informace +</li> +<li> Backtrace vĂ˝stup debuggeru +</li> +</ul> +</li> +<li> Jedná se o zatĂm nezjištÄ›nou chybu, pak mĹŻĹľete ÄŤekat +<ul><li> Záplatu odstraĹujĂcĂ chybu, která bude vloĹľena do dalšà velkĂ© nebo malĂ© verze +</li> +<li> Informaci, Ĺľe se jedná o chybu, kterou nelze okamĹľitÄ› Ĺ™ešit a je proto pĹ™idána do <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> +</li> +</ul> +</li> +</ul> +<h3><a name="item1.9">1.9</a>) Kde najdu informace o známĂ˝ch chybách nebo nepodporovanĂ˝ch vlastnostech?</h3> +<p>PostgreSQL podporuje rozšĂĹ™enou podmnoĹľinu SQL:2003. V našem <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> naleznete seznam známĂ˝ch chyb, chybÄ›jĂcĂch vlastnostĂ, a plány do budoucna. +</p> +<p>Odezva na poĹľadavek na novou vlastnost PostgreSQL je obvykle: +</p> +<ul><li> PoĹľadavek je jiĹľ v <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> +</li> +<li> PoĹľadovaná funkce nenĂ chtÄ›ná protoĹľe +<ul><li> Duplikuje jiĹľ existujĂcĂ funkci, která respektuje SQL standard +</li> +<li> ImplementacĂ funkce by se pĹ™Ăliš zkomplikoval kĂłd bez relevantnĂho pĹ™Ănosu +</li> +<li> Funkce by mohla bĂ˝t nebezpeÄŤná nebo nespolehlivá +</li> +</ul> +</li> +<li> PoĹľadavek je pĹ™idán do <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> +</li> +</ul> +<p>PostgreSQL nepoĹľĂvá systĂ©m pro sledovánĂ chyb, protoĹľe jsme zjistili, Ĺľe je efektivnÄ›jšà pĹ™Ămo reagovat na maily a udrĹľovat aktuálnĂ <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>. V praxi je snaha o co nejrychlejšà řešenĂ chyb, a chyby, kterĂ© by se mohly projevit u mnoha uĹľivatelĹŻ jsou opravovány velice rychle. JedinĂ© mĂsto, kde lze dohledat všechny zmÄ›ny, rozšĂĹ™enĂ a opravy v PostgreSQL je CVS log. Poznámky k verzi "Release notes" nezachycujĂ všechny zmÄ›ny, k nÄ›mĹľ došlo. +</p> +<h3><a name="item1.10">1.10</a>) Jaká je dostupná dokumentace?</h3> +<p>PostgreSQL obsahuje vynikajĂcĂ dokumentaci zahrnujĂcĂ manuál, manuálovĂ© stránky a testovacĂ pĹ™Ăklady. PodĂvejte se do adresáře /doc. Manuál je pĹ™ĂstupnĂ˝ online na <a href="http://www.postgresql.org/docs" title="http://www.postgresql.org/docs">http://www.postgresql.org/docs</a>. +</p> +<p>K dispozici jsou zdarma dvÄ› online knihy na adresách <a href="http://www.postgresql.org/docs/books/awbook.html" title="http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</a> a <a href="http://www.commandprompt.com/ppbook/" title="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. Dalšà literaturu lze zakoupit. NejpopulárnÄ›jšà je od Kerryho Douglase. Seznam dostupnĂ© literatury je na <a href="http://techdocs.postgresql.org/techdocs/bookreviews.php" title="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>. JeštÄ› je kolekce technicky orientovanĂ˝ch ÄŤlánkĹŻ tematicky spojenĂ˝ch s PostgreSQL na adrese <a href="http://techdocs.postgresql.org/" title="http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</a>. +</p> +<p>ĹádkovĂ˝ klient psql má \d pĹ™Ăkazy pro zobrazenĂ informacĂ o typech, operátorech, funkcĂch, agregaÄŤnĂch funkcĂ, atd. PouĹľijte \? pro zobrazenĂ dostupnĂ˝ch pĹ™ĂkazĹŻ. +</p> +<p>Dalšà dokumentaci najdete na našem webu. +</p> +<h3><a name="item1.11">1.11</a>) Jak se mohu nauÄŤit SQL?</h3> +<p>PodĂvejte se do výše uvedenĂ© dokumentace. Dalšà online knihou je "Teach Yourself SQL in 21 Days, Second Edition" na adrese <a href="http://members.tripod.com/er4ebus/sql/index.htm" title="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>. Mnoho našich uĹľivatelĹŻ doporuÄŤuje knihu The Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. Dalšà The Complete Reference SQL, Groff et al., McGraw-Hill. +</p> +<p>Dalšà online tutoriály jsou dostupnĂ© na adresách: +</p> +<ul><li> <a href="http://www.intermedia.net/support/sql/sqltut.shtm" title="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a> +</li> +<li> <a href="http://sqlcourse.com" title="http://sqlcourse.com">http://sqlcourse.com</a> +</li> +<li> <a href="http://www.w3schools.com/sql/default.asp" title="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</a> +</li> +<li> <a href="http://mysite.verizon.net/Graeme_Birchall/id1.html" title="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</a> +</li> +</ul> +<h3><a name="item1.12">1.12</a>) Jak se mohu pĹ™ipojit k tĂ˝mu vĂ˝vojářů?</h3> +<p>Prostudujte si <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html" title="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">Developer's FAQ</a>. +</p> +<h3><a name="item1.13">1.13</a>) Jak je na tom PostgreSQL v porovnánĂ s jinĂ˝mi databázemi?</h3> +<p>Software mĹŻĹľeme porovnávat z nÄ›kolika rĹŻznĂ˝ch pohledĹŻ: vlastnosti, vĂ˝kon, spolehlivost, podpora a cena. +</p> +<script></script> +<h4> Vlastnosti </h4> +<p>PostgreSQL nabĂzĂ vÄ›tšinu funkcĂ funkcionality velkĂ˝ch komerÄŤnĂch DBMS systĂ©mĹŻ jako jsou: transakce, vnoĹ™enĂ© dotazy, spouštÄ›, referenÄŤnĂ integrita a sofistikovanĂ˝ systĂ©m zamykánĂ. Poskytujeme urÄŤitĂ© funkce, kterĂ© ostatnĂ systĂ©my běžnÄ› nepodporujĂ. NapĹ™. uĹľivatelem definovanĂ© typy, dÄ›diÄŤnost, pravidla (rules), a MVCC architekturu. +</p> +<h4> VĂ˝kon </h4> +<p>VĂ˝kon PostgreSQL je srovnatelnĂ˝ s ostatnĂmi komerÄŤnĂmi nebo Open Source databázemi. V nÄ›kterĂ˝ch pĹ™Ăpadech je rychlejšĂ, jindy pomalejšĂ. Náš vĂ˝kon je obvykle +/-10% vĹŻÄŤi ostatnĂm databázĂm. +</p> +<h4> Spolehlivost </h4> +<p>UvÄ›domujeme si, Ĺľe databáze musĂ bĂ˝t stoprocentnÄ› spolehlivá, jinak je nepouĹľitelná. SnaĹľĂme se, aby kaĹľdá verze byla dobĹ™e otestována a obsahovala minimum chyb. KaĹľdá verze je minimálnÄ› nÄ›kolik mÄ›sĂcĹŻ v beta testovacĂm reĹľimu. Do produkÄŤnĂho reĹľimu se dostane, aĹľ kdyĹľ nedocházĂ k dalšĂm zmÄ›nám nebo opravám. VěřĂme, Ĺľe jsem vĂce neĹľ srovnatelnĂ s ostatnĂmi databázemi v tĂ©to oblasti. +</p> +<h4> Podpora </h4> +<p>Na našich internetovĂ˝ch konferencĂch se setkává velká skupina vĂ˝vojářů a uĹľivatelĹŻ pĹ™i Ĺ™ešenĂ vyskytujĂcĂch se problĂ©mĹŻ. +Naše internetovĂ© konference umoĹľĹujĂ kontakt velkĂ© skupiny vĂ˝vojářů a uĹľivatelĹŻ. NemĹŻĹľeme garantovat opravu chyby, ale komerÄŤnĂ DBMSs takĂ© vĹľdy negarantujĂ Ĺ™ešenĂ problĂ©mĹŻ. VěřĂme ale, Ĺľe dĂky pĹ™ĂmĂ©mu kontaktu na vĂ˝vojáře, naši uĹľivatelskou komunitu, manuálĹŻm, a dostupnĂ˝m zdrojovĂ˝m kĂłdĹŻm máme lepšà podporu neĹľ ostatnĂ DBMSs. Pro ty, kteřà preferujĂ komerÄŤnĂ "per-incident" podporu, existuje spoleÄŤnostĂ, kteřà ji nabĂzejĂ (FAQ sekce 1.7.) +</p> +<h4> Cena </h4> +<p>PostgreSQL lze pouĹľĂvat bezplatnÄ› (a to i pro komerÄŤnĂ pouĹľitĂ). TakĂ© mĹŻĹľete neomezenÄ› pouĹľĂvat náš kĂłd ve svĂ˝ch produktech s vĂ˝jimkami specifikovanĂ˝mi v našà licenci (pĹ™ebĂráme BSD licenci). +</p> +<h3><a name="item1.14">1.14</a>) Je PostgreSQL pĹ™ipraven na aktuálnĂ zavádÄ›nĂ letnĂho ÄŤasu v nÄ›kterĂ˝ch zemĂch?</h3> +<p>PoÄŤĂnaje verzĂ 8.0.[4+] podporuje PostgreSQL letnĂ ÄŤas takĂ© pro USA. Podpora letnĂho ÄŤasu (daylight saving time) pro Kanadu a ZápadnĂ Austrálii je obsaĹľena ve verzĂch 8.0.[10+] a 8.1.[6+] a všech následujĂcĂch verzĂch. Staršà verze pouĹľĂvaly systĂ©movou databázi ÄŤasovĂ˝ch zĂłn obsahujĂcĂ, kromÄ› jinĂ©ho, informaci o tom, zda se pro danou ÄŤasovou zĂłnu rozlišuje mezi letnĂm a zimnĂm ÄŤasem. +</p> +<hr> +<h2 align="center">Dotazy na klientská rozhranĂ</h2> +<h3><a name="item2.1">2.1</a>) Která rozhranĂ jsou pouĹľitelná pro PostgreSQL?</h3> +<p>PostgreSQL se distribuuje pouze s rozhranĂm pro jazyk C a embedded C. Všechna dalšà rozhranĂ pĹ™edstavujĂ nezávislĂ© projekty, kterĂ© je tĹ™eba stáhnout z internetu samostatnÄ›. OsamostatnÄ›nĂ tÄ›chto projektĹŻ umoĹľĹuje nezávislost vĂ˝vojovĂ˝ch tĂ˝mĹŻ a moĹľnost vydávat novĂ© verze bez ohledu na vydánĂ novĂ© verze PostgreSQL. +</p> +<p>NÄ›kterĂ© programovacĂ jazyky jako je napĹ™. PHP obsahujĂ rozhranĂ pro PostgreSQL. RozhranĂ pro jazyky jako je Perl, Tcl, Python a mnoho dalšĂch jsou dostupnĂ© na adrese: <a href="http://gborg.postgresql.org" title="http://gborg.postgresql.org">http://gborg.postgresql.org</a> v sekci Drivers/Interfaces. +</p> +<h3><a name="item2.2">2.2</a>) JakĂ© nástroje lze pouĹľĂt pro PostgreSQL a web?</h3> +<p>DobrĂ˝m Ăşvodem do problematiky databázĂ v prostĹ™edĂ webovĂ˝ch stránek mĹŻĹľe bĂ˝t web <a href="http://www.webreview.com" title="http://www.webreview.com">http://www.webreview.com</a>. +</p> +<p>PHP (<a href="http://www.php.net" title="http://www.php.net">http://www.php.net</a>) je vynikajĂcĂm rozhranĂm pro tvorbu webĹŻ. +</p> +<p>Pro sloĹľitÄ›jšà úlohy se ÄŤasto pouĹľĂvá Perl a jeho BDB:Pg rozhranĂ s podporou CGI - CGI.pm nebo mod_perl(u). +</p> +<h3><a name="item2.3">2.3</a>) Existuje grafickĂ© rozhranĂ pro PostgreSQL?</h3> +<p>K dispozici je Ĺ™ada grafickĂ˝ch nástrojĹŻ podporujĂcĂch PostgreSQL a to od komerÄŤnĂch nebo open source vĂ˝vojářů. PodrobnĂ˝ seznam naleznete na adrese +<a href="http://www.postgresql.org/docs/techdocs.54" title="http://www.postgresql.org/docs/techdocs.54">http://www.postgresql.org/docs/techdocs.54</a>. +</p> +<hr> +<h2 align="center">AdministrativnĂ dotazy</h2> +<h3><a name="item3.1">3.1</a>) Jak nainstalovat PostgreSQL jinam neĹľ do /usr/local/pgsql?</h3> +<p>PĹ™i spouštÄ›nĂ configure nastavte parametr --prefix +</p> +<h3><a name="item3.2">3.2</a>) Jak nastavit pravidla pro pĹ™Ăstup z jinĂ˝ch stanic?</h3> +<p>Ve vĂ˝chozĂ konfiguraci, PostgreSQL umoĹľĹuje pouze pĹ™ipojenĂ z lokálnĂho uĹľivatele prostĹ™ednictvĂm Unix domain sockets nebo TCP/IP spojenĂ. Bez modifikace listen_addresses v souboru postgresql.conf, a povolenĂ adresy v souboru $PGDATA/pg_hba.conf se nelze pĹ™ipojit k PostgreSQL z ostatnĂch stanic. ZmÄ›na výše zmĂnÄ›nĂ˝ch parametrĹŻ vyĹľaduje restart databázovĂ©ho serveru. +</p> +<h3><a name="item3.3">3.3</a>) Jak vyladit databázi na vyššà vĂ˝kon?</h3> +<p>VĂ˝kon systĂ©mu mĹŻĹľete ovlivnit ve tĹ™ech oblastech: +</p> +<h4> ZmÄ›ny dotazu </h4> +<ul><li> PouĹľitĂm indexĹŻ vÄŤetnÄ› částeÄŤnĂ˝ch a funkcionálnĂch +</li> +<li> PouĹľitĂm COPY mĂsto opakovanĂ˝ch INSERTĹŻ +</li> +<li> SlouÄŤenĂm mnoha SQL pĹ™ĂkazĹŻ do jednĂ© transakce snĂĹľenĂm reĹľie na commit +</li> +<li> PouĹľĂvánĂm CLUSTERU, pokud naÄŤĂtáte vÄ›tšà poÄŤet řádek podle indexu +</li> +<li> PouĹľitĂm klauzule LIMIT v poddotazech +</li> +<li> PouĹľitĂm pĹ™edpĹ™ipravenĂ˝ch dotazĹŻ +</li> +<li> PouĹľĂvánĂm ANALYZE. Tento pĹ™Ăkaz aktualizuje statistiky, kterĂ© se pouĹľĂvajĂ pĹ™i optimalizaci dotazu +</li> +<li> PravidelnĂ© pouĹľitĂ VACUUM nebo pouĹľĂvánĂ pg_autovacuum +</li> +<li> OdstranÄ›nĂm indexĹŻ pĹ™ed rozsáhlĂ˝mi zmÄ›nami v datech +</li> +</ul> +<h4> Konfigurace serveru </h4> +<p>UrÄŤitĂ© parametry v souboru postgresql.conf majĂ vliv na vĂ˝kon serveru. Detaily naleznete v pĹ™ĂruÄŤce Administrátora v Server Run-time Environment/Run-time Configuration. Dalšà komentáře naleznete v <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html" title="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> a <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html" title="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>. +</p> +<h4> VĂ˝bÄ›r hardware </h4> +<p>Vliv hardware na vĂ˝kon serveru je popsán v dokumentech <a href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html" title="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html">http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a> a <a href="http://www.powerpostgresql.com/PerfList/" title="http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/</a>. +</p> +<h3><a name="item3.4">3.4</a>) JakĂ© mám ladĂcĂ prostĹ™edky?</h3> +<p>NastavenĂm log_* promÄ›nnĂ˝ch v konfiguraci serveru si vynutĂte logovánĂ dotazĹŻ a procesnĂch statistik, kterĂ© Vám mohou pomoci pĹ™i ladÄ›nĂ a optimalizaci vĂ˝konu. +</p> +<h3><a name="item3.5">3.5</a>) Co znamená "Sorry, too many clients", kdyĹľ se zkoušĂm pĹ™ipojit?</h3> +<p>PĹ™ekroÄŤil jste vĂ˝chozĂ limit, kterĂ˝ je 100 souÄŤasnÄ› pĹ™ipojenĂ˝ch uĹľivatelĹŻ. V konfiguraci serveru v postgresql.conf tuto hodnotu mĹŻĹľete zvÄ›tšit zmÄ›nou hodnoty max_connection. NezapomeĹte restartovat server. +</p> +<h3><a name="item3.6">3.6</a>) ProÄŤ je nutnĂ˝ dump a obnovenĂ (load) databáze pĹ™i upgradu PostgreSQL?</h3> +<p>ZpĹŻsob ÄŤĂslovánĂ je popsán v dokumentaci na <a href="http://www.postgresql.org/support/versioning" title="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a>. Instrukce k provedenĂ migrace na vyššà verzi jsou taktĂ©Ĺľ v dokumentaci na adrese <a href="http://www.postgresql.org/docs/current/static/install-upgrading.html" title="http://www.postgresql.org/docs/current/static/install-upgrading.html">http://www.postgresql.org/docs/current/static/install-upgrading.html</a>. +</p> +<h3><a name="item3.7">3.7</a>) JakĂ˝ hardware bych mÄ›l pouĹľĂvat?</h3> +<p>JelikoĹľ PC jsou vÄ›tšinou kompatibilnĂ, lidĂ© majĂ tendence věřit, Ĺľe všechna PC jsou stejnÄ› kvalitnĂ. CoĹľ nenĂ pravda. PamÄ›ti ECC, SCSI a kvalitnĂ základnĂ desky jsou mnohem spolehlivÄ›jšà a vĂ˝konnÄ›jšà neĹľ lacinÄ›jšà hardware. PostgreSQL poběžà na vÄ›tšinÄ› hardwaru, nicmĂ©nÄ› pokud je pro Vás spolehlivost a vĂ˝kon systĂ©mu dĹŻleĹľitá, je dobrĂ© vÄ›novat ÄŤas nalezenĂ vhodnĂ© hardwarovĂ© konfigurace. Na našich elektronickĂ˝ch konferencĂch mĹŻĹľete diskutovat o vhodnĂ˝ch konfiguracĂch a znaÄŤkách. +</p> +<hr> +<h2 align="center">ProvoznĂ dotazy</h2> +<h3><a name="item4.1">4.1</a>) Jak zĂskat pouze prvnà řádek dotazu? NáhodnĂ˝ řádek?</h3> +<p>Pokud potĹ™ebujete pouze nÄ›kolik řádkĹŻ a pokud vĂte kolik, pouĹľijte +SELECT LIMIT. Pokud bude moĹľnĂ© pouĹľĂt index shodujĂcĂ se s ORDER BY, +je moĹľnĂ©, Ĺľe se nebude provádÄ›t celĂ˝ dotaz. Pokud neznáte poÄŤet záznamĹŻ, +pouĹľijte kurzor a pĹ™Ăkaz FETCH. +</p> +<p>Pro vĂ˝bÄ›r náhodnĂ©ho řádku pouĹľijte pĹ™Ăkaz ve tvaru: +</p> +<pre> +SELECT col +FROM tab +ORDER BY random() +LIMIT 1; +</pre> +<h3><a name="item4.2">4.2</a>) Jak zĂskám seznam tabulek, indexĹŻ, databázĂ, a definovanĂ˝ch uĹľivatelĹŻ. Mohu vidÄ›t dotazy, kterĂ© pouĹľĂvá psql pro zobrazenĂ tÄ›chto informacĂ?</h3> +<p>V psql pĹ™Ăkazem \dt zĂskáte seznam tabulek. ĂšplnĂ˝ seznam pĹ™ĂkazĹŻ psql zĂskáte pĹ™Ăkazem \?. AlternativnÄ› si mĹŻĹľete prostudovat zdrojovĂ˝ kĂłd psql - soubor pgsql/src/bin/psql/describe.c, kterĂ˝ obsahuje SQL pĹ™Ăkazy, kterĂ© jsou generovány pro zĂskánĂ vĂ˝stupu psql "backslash" pĹ™ĂkazĹŻ. TakĂ© mĹŻĹľete nastartovat psql s parametrem -E, kterĂ˝ zpĹŻsobĂ zobrazenĂ všech SQL pĹ™ĂkazĹŻ, kterĂ© se odesĂlajĂ na server. PostgreSQL takĂ© podporuje SQL standard INFORMAÄŚNĂŤ SCHÉMATA (standardnĂ systĂ©movĂ© tabulky). KlasickĂ˝m dotazem do systĂ©movĂ˝ch tabulek zĂskáte poĹľadovanĂ© informace o struktuĹ™e databáze. +</p> +<p>SystĂ©movĂ© tabulky PostgreSQL (mimo rámec SQL standardĹŻ) pouĹľĂvajĂ prefix pg_. Pro zjištÄ›nĂ struktury databáze je mĹŻĹľete pouĹľĂt takĂ©, i kdyĹľ preferovány jsou dotazy do informaÄŤnĂho schĂ©matu. +</p> +<p>Seznam všech databázĂ zĂskáte pĹ™Ăkazem psql -l +</p> +<p>Dalšà inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. Obsahuje ilustraÄŤnĂ SELECTy potĹ™ebnĂ© k zĂskánĂ informacĂ z systĂ©movĂ˝ch tabulek databáze. +</p> +<h3><a name="item4.3">4.3</a>) Jak zmÄ›nit datovĂ˝ typ sloupce?</h3> +<p>Ve verzĂch 8.0 a pozdÄ›jšĂch jednoduše: +</p> +<pre> +ALTER TABLE ALTER COLUMN TYPE +</pre><p>V staršĂch verzĂch: +</p> +<pre> +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; +</pre><p>Po zmÄ›nÄ› spusĹĄte pĹ™Ăkaz VACUUM FULL, aby došlo k uvolnÄ›nĂ diskovĂ©ho prostoru pouĹľitĂ©ho v tu chvĂli jiĹľ neplatnĂ˝mi záznamy. +</p> +<h3><a name="item4.4">4.4</a>) Jaká je maximálnĂ velikost řádku, tabulky a databáze?</h3> +<p>PostgreSQL má tato omezenĂ: +</p> +<table border="0"> +<tr><td> MaximálnĂ velikost databáze: </td><td> neomezena (existujĂ 32TB db) +</td></tr> +<tr><td> MaximálnĂ velikost tabulky: </td><td> 32 TB +</td></tr> +<tr><td> MaximálnĂ velikost řádky: </td><td> 480GB +</td></tr> +<tr><td> MaximálnĂ velikost poloĹľky </td><td> 1 GB +</td></tr> +<tr><td> MaximálnĂ poÄŤet řádkĹŻ v tabulce: </td><td> neomezeno +</td></tr> +<tr><td> MaximálnĂ poÄŤet sloupcĹŻ v tabulce: </td><td> 250-1600 podle typĹŻ +</td></tr> +<tr><td> MaximálnĂ poÄŤet indexĹŻ na tabulce: </td><td> neomezeno +</td></tr> +</table> +<p>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. +</p> +<p>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Ă©. +</p> +<p>MaximálnĂ velikost tabulky a maximálnĂ poÄŤet sloupcĹŻ mĹŻĹľeme +zeÄŤtyĹ™násobit nastavenĂm velikosti bloku na 32K. +</p> +<p>Indexy jsou povolenĂ© pouze na sloupcĂch jejichĹľ dĂ©lka je menšà neĹľ 2000 znakĹŻ. Pokud tuto dĂ©lku pĹ™ekroÄŤĂme a index potĹ™ebujeme pro zajištÄ›nĂ jednoznaÄŤnosti, je vhodnÄ›jšà pouĹľĂt funkcionálnĂ index nad MD5 funkcĂ nebo fulltextovĂ˝ index. +</p> +<h3><a name="item4.5">4.5</a>) Kolik diskovĂ©ho prostoru je potĹ™eba k uloĹľenĂ dat z normálnĂho textovĂ©ho souboru?</h3> +<p>PostgreSQL vyĹľaduje aĹľ pÄ›tinásobek diskovĂ©ho prostoru k uloĹľenĂ dat z +textovĂ©ho souboru. +</p> +<p>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Ä›rnÄ› dvacet bytĹŻ +dlouhĂ˝. TextovĂ˝ soubor bude 2.8 MB dlouhĂ˝. Velikost databáze +obsahujĂcĂ odpovĂdajĂcĂ data bude zhruba 5.2 MB. +</p> +<pre> + 24 bytĹŻ: hlaviÄŤka řádku (pĹ™ibliĹľnÄ›) + 24 bytĹŻ: jedna celoÄŤĂselná poloĹľka a jedna textová + + 4 byty: ukazatel na stránku k entici ------------------------------------------------------ - 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) -</PRE> - <P>Indexy nemají tak velkou reľii, ale mohou být také velké, protoľe - obsahují indexovaná data.</P> - - <P>Hodnoty <SMALL>NULL</SMALL> jsou uloľeny v bitmapách, takľe spotřebují jen velmi málo - diskového prostoru.</P> - - <H4><A name="4.7">4.7</A>) Jak získám seznam vytvořených tabulek, indexů, databází?</H4> - - <P><I>psql</I> 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 <I>pg_</I>. Spuątění <I>psql</I> s parametrem <I>-l</I> provede výpis názvů - vąech databází.</P> - - <P>Soubor <I>pgsql/src/tutorial/syscat.source</I> obsahuje <SMALL>SELECT</SMALL>y přistupující k - systémovým tabulkámm.</P> - - <H4><A name="4.8">4.8</A>) Můj dotaz je pomalý a nepouľívá vytvořené indexy. Proč?</H4> - - <P>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í.</P> - - <P>PostgreSQL rozhoduje o pouľití indexů na základě statistiky přístupů k - tabulce. Tyto statistiky se shromaľďují příkazy <SMALL>VACUUM ANALYZE</SMALL> nebo - <SMALL>ANALYZE</SMALL>. 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.</P> - - <P>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.</P> - - <P>Jinak je tomu v případě pouľití <SMALL>LIMIT</SMALL> a <SMALL>ORDER BY</SMALL>, 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:</P> -<PRE> - SELECT col - FROM tab - ORDER BY col [ DESC ] - LIMIT 1; -</PRE> - <P>Pokud si myslíte, ľe optimizer mylně zvolil sekvenční prohledávání - tabulky, pouľijte příkaz <CODE>SET enable_seqscan TO 'off'</CODE> a zkuste zda je - indexní prohledávání rychlejąí.</P> - - <P>Při vyhledávání na základě vzoru jako je např. operátor <SMALL>LIKE</SMALL> nebo <I>~</I> se - indexy pouľíjí pouze za určitých skutečností:</P> - <UL> - <LI>začátek hledaného vzoru musí být ukotven k začátku, tj. - <UL> - <LI>vzor <SMALL>LIKE</SMALL> nesmí začínat <I>%</I></LI> - <LI><I>~</I> regulární výraz musí začínat <I>^</I></LI> - </UL></LI> - <LI>vzor nesmí začínat intervalem, např. [a-e]</LI> - <LI>vyhledávaní, které není Case sensitiv jako je <SMALL>ILIKE</SMALL> nebo <I>~*</I> - nepouľívá indexy. Můľete ale pouľít funkcionální indexy, které jsou - posány v sekci <A href="#4.12">4.12</A></LI> - <LI>při inicializaci databáze (<I>initdb</I>) 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í).</LI> - </UL> - <H4><A name="4.9">4.9</A>) Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz?</H4> - - Podívejte se do manuálové stránky příkazu <SMALL>EXPLAIN</SMALL>. - - <H4><A name="4.10">4.10</A>) Co to je R-tree index?</H4> - - <P>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 <I>point</I>, pak systém můľe efektivně odpovědět na dotaz - - vyber vąechny body uvnitř obdélníků.</P> - - <P>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</P> - - <P>Tyto materiály naleznete v Stonebraker's "Readings in Database Systems".</P> - - <P>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.</P> - - <H4><A name="4.11">4.11</A>) Co je Genetic Query Optimizer?</H4> - - <P><SMALL>GEQO</SMALL> 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.</P> - - <H4><A name="4.12">4.12</A>) Jak provést vyhledávání regulárního výrazu case sensitiv, - insensitiv? Jak pouľít index pro case insensitive vyhledávání?</H4> - - <P>Operátor <I>~</I> slouľí k porování s regulárním výrazem, jeho modifikace <I>*~</I> - představuje case insensitive vyhledávání. Jedná se o obdobu <SMALL>LIKE</SMALL> a - <SMALL>ILIKE</SMALL>.</P> - - <P>Pro vyhledávání bez ohledu na velká malá písmena pouľijeme:</P> -<PRE> - SELECT * - FROM tab - WHERE lower(col) = 'abc'; -</PRE> - V tomto případě se nepouľije standardní index. Nicméně, pouľije se - funkcionální index, pokud jej vytvoříte: -<PRE> - CREATE INDEX tabindex ON tab (lower(col)); -</PRE> - <H4><A name="4.13">4.13</A>) Jak v dotazu detekovat, ľe poloľka je NULL?</H4> - - <P>Určíte pomocí <SMALL>IS NULL</SMALL> nebo <SMALL>IS NOT NULL</SMALL></P> - - <H4><A name="4.14">4.14</A>) Jaké jsou rozdíly mezi různými znakovými typy?</H4> -<PRE> -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 -</PRE> - <P>S interními názvy se setkáte v systémovém katalogu a v některých - chybových hláąeních.</P> - - <P>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 <SMALL>TOAST</SMALL>em, takľe prostor na disku můľe - být niľąí neľ je očekáváno.</P> - - <P><SMALL>VARCHAR(n)</SMALL> je vhodný pro ukládání textů promměné délky s pevně - stanovenou maximální délkou. <SMALL>TEXT</SMALL> je pro řetězce bez omezení délky s - maximem jeden gigabajt.</P> - - <P><SMALL>CHAR(n)</SMALL> slouľí k ukládání řetězců stejné délky. <SMALL>CHAR(n)</SMALL> doplní prázdné - znaky do specifikované délky, zatímco VARCHAR(n) uloľí pouze předané - znaky. <SMALL>BYTEA</SMALL> je určeno pro ukládání binárních dat, včetně <SMALL>NULL</SMALL> byte. - Vąechny zde popsané typy mají podobné výkonnostní charakteristiky.</P> - - <H4><A name="4.15.1">4.15.1</A>) Jak vytvořit serial/auto-increment pole?</H4> - - <P>PostgreSQL podporuje typ <SMALL>SERIAL</SMALL>. Při jeho pouľití se automaticky vytvoří - SEQUENCE. Například:</P> -<PRE> - CREATE TABLE person ( - id SERIAL, - name TEXT - ); -</PRE> - je automaticky převedeno do -<PRE> - 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); -</PRE> - Viz dokumentace <I>create_sequence</I> v manuálových stránkách. Dále můľete - pouľít unikátní hodnotu <I>OID</I> kaľdého řádku. Potom ale musíte spouątět - <I>pg_dump</I> s přepínačem <I>-o</I>, tak aby zůstaly zachovány hodnoty <SMALL>OID</SMALL> (u - příkazu copy <SMALL>COPY WITH OIDS</SMALL>). - - <H4><A name="4.15.2">4.15.2</A>) Jak získat hodnotu <SMALL>SERIAL</SMALL> po vloľení řádku?</H4> - - <P>Jednou z moľností je získat budoucí hodnotu <SMALL>SERIAL</SMALL> funkcí <I>nextval()</I> před - samotným vloľením a pak ji vloľit explicitně. Například v jakémsi - pseudojazyku:</P> -<PRE> - newid = execute("SELECT nextval('person_id_seq')"); - execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); -</PRE> - <P>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 - <I>tabulka_sloupec_seq</I>.</P> - - <P>Alternativně můľete získat hodnotu posledně generovou sekvencí funkcí - <I>currval()</I> po vloľení:</P> -<PRE> - execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); - new_id = execute("SELECT currval('person_id_seq')"); -</PRE> - <P>Konečně můľete pouľít <SMALL>OID</SMALL> hodnotu vrácenou příkazem <SMALL>INSERT</SMALL>, 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 <I>$sth->{pg_oid_status}</I> - po kaľdém <I>$sth->execute()</I>.</P> - - <H4><A name="4.15.3">4.15.3</A>) Nepovede <I>currval()</I> a <I>nextval()</I> k rozhození - podmínek při souběhu s jinými uľivateli?</H4> - - <P>Nikoliv, <I>currval()</I> vrací hodnotu naposledy generovanou ve vaąem - backendu, a ta tudíľ není společná vąem uľivatelům.</P> - - <H4><A name="4.15.4">4.15.4</A>) Proč není vygenerované číslo pouľito při přeruąení transakce? - Proč vznikají díry v číslování vlastní sekvencí/SERIAL sloupce?</H4> - - <P>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í.</P> - - <H4><A name="4.16">4.16</A>) Co to je <SMALL>OID</SMALL>? Co je to <SMALL>TID</SMALL>?</H4> - - <P>Kaľdý řádek vytvořený v PostgreSQL získá jedinečné <SMALL>OID</SMALL>. Vąechna <SMALL>OID</SMALL> - generovaná během inicializace databáze jsou menąí neľ 16384 - (include/access/transam.h). Vąechna <SMALL>OID</SMALL> generovaná na poľadavek - uľivatele jsou rovna nebo vyąąí této hodnotě. Normálně, vąechna <SMALL>OID</SMALL> jsou - jedinečná nejen uvnitř tabulky nebo databáze, ale v rámci celé instalace - PostgreSQL</P> - - <P>PostgreSQL pouľívá <SMALL>OID</SMALL> ve svém interním systému tabulek k vytvoření - relací. Tato <SMALL>OID</SMALL> mohou být pouľita k identifikaci konkrétního uľivatele - a pouľita v spojení. Pro <SMALL>OID</SMALL> hodnoty je doporučen typ <SMALL>OID</SMALL>. Nad tímto - sloupcem můľete vytvořit index pro urychlení přístupu.</P> - - <P><SMALL>OID</SMALL> 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 <SMALL>OID</SMALL>, nebo chcete zkopírovat tabulku s - původními <SMALL>OID</SMALL>, lze pouľít:</P> -<PRE> - 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'; -</PRE> - <P><SMALL>OID</SMALL> 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.</P> - - <P><SMALL>TID</SMALL> 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).</P> - - <H4><A name="4.17">4.17</A>) Jaký je význam některých výrazů pouľitých v PostgreSQL?</H4> - - <P>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:</P> - <UL> - <LI> tabulka, relace, třída (table, relation, class)</LI> - <LI> řádek, záznam, ntice (row, record, tuple)</LI> - <LI> sloupec, poloľka, atribut (column, field, attribute)</LI> - <LI> vyhledání, výběr (retrieve, select)</LI> - <LI> náhrada, úprava (replace, update)</LI> - <LI> přidání, vkládání (append, insert)</LI> - <LI> OID, serial value (OID, serial value)</LI> - <LI> portal, kurzor (portal, cursor)</LI> - <LI> range variable, jméno tabulky, alias tabulky (range - variable, table name, table alias)</LI> - </UL> - - <P>seznam těchto výrazů můľete nalézt na - <A href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A>.</P> - - <H4><A name="4.18">4.18</A>) Proč jsem získal chybové hláąení "ERROR: Memory exhausted in AllocSetAlloc()"?</H4> - - <P>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</P> -<PRE> - ulimit -d 262144 - limit datasize 256m -</PRE> - <P>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.</P> - - <H4><A name="4.19">4.19</A>) Jak se dozvím, kterou verzi PostgreSQL pouľívám?</H4> - - <P>V psql spus»te <CODE>SELECT version();</CODE></P> - - <H4><A name="4.20">4.20</A>) Proč operace s velkými objekty končí "invalid large obj descriptor"?</H4> - - <P>Vąechny operace s velkými objekty - <CODE>lo_open</CODE>, <CODE>lo_close</CODE>, ... musíte - spouątět v transakci, tj. mezi příkazy <CODE>BEGIN WORK</CODE> a <CODE>COMMIT</CODE>.</P> - - <P>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é.</P> - - Pokud pouľíváte interface podobné <SMALL>ODBC</SMALL> musíte nastavit <CODE>set - auto_commit off</CODE>. - - <H4><A name="4.21">4.21</A>) Jak vytvořit sloupec obsahující implicitně aktuální datum?</H4> - - <P>Pouľijte <I>CURRENT_TIMESTAMP</I>:</P> -<PRE> -<CODE> -CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); -</CODE> -</PRE> - <H4><A name="4.22">4.22</A>) Proč jsou moje vnořené dotazy pouľívající IN tak pomalé?</H4> - - <P>Dřívějąí verze (před 7.4) spojovali vnořené dotazy k vnějąím sekvenčním - čtením výsledku poddotazu pro kaľdý řádek vnějąího dotazu. Pokud poddotaz - vrátil několik málo řádků <SMALL>IN</SMALL> bylo rychlé. Pro ostatní případy je vhodné - nahradit <SMALL>IN</SMALL> <SMALL>EXISTS</SMALL>:</P> -<PRE> - SELECT * - FROM tab - WHERE col IN (SELECT subcol FROM subtab); -</PRE> -<p>na:</p> -<PRE> - SELECT * + 52 bytĹŻ na řádek +</pre><p>Velikost datovĂ© stránky PostgreSQL je 8192 bytĹŻ (8KB) +</p> +<pre> + 8192 bytĹŻ na stránce +---------------------- = 158 řádek na stránku + 52 bytĹŻ za řádek + +100000 řádek +----------------------- = 633 stránek (zaokrouhleno nahoru) + 158 řádek na stránce + +633 datovĂ˝ch stránek * 8192 bytĹŻ na kaĹľdou stránku = 5,185,536 bytĹŻ (5.2 MB) +</pre><p>Indexy nemajĂ tak velkou reĹľii, ale mohou bĂ˝t takĂ© velkĂ©, protoĹľe +obsahujĂ indexovaná data. +</p> +<p>Hodnoty NULL jsou uloĹľeny v bitmapách, takĹľe zabĂrajĂ jen velmi málo +diskovĂ©ho prostoru. +</p> +<h3><a name="item4.6">4.6</a>) MĹŻj dotaz je pomalĂ˝ a nepouĹľĂvá vytvoĹ™enĂ© indexy. ProÄŤ?</h3> +<p>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Ă. +</p> +<p>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. +</p> +<p>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Ĺľ pouĹľitĂ indexu na velkĂ© tabulce. +</p> +<p>Jinak je tomu v pĹ™ĂpadÄ› pouĹľitĂ LIMIT a ORDER BY, pĹ™i kterĂ©m se +vÄ›tšinou index pouĹľije, jelikoĹľ je vĂ˝sledkem pouze malá část tabulky. +</p> +<p>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 +prohledávánĂ s indexem rychlejšĂ. +</p> +<p>PĹ™i vyhledávánĂ na základÄ› vzoru jako je napĹ™. operátor LIKE nebo ~ se +indexy pouĹľijĂ pouze za urÄŤitĂ˝ch skuteÄŤnostĂ: +</p> +<ul><li> začátek hledanĂ©ho vzoru musĂ bĂ˝t ukotven k začátku, tj. +<ul><li> vzor LIKE nesmĂ zaÄŤĂnat % +</li> +<li> ~ regulárnĂ vĂ˝raz musĂ zaÄŤĂnat ^ +</li> +</ul> +</li> +<li> vzor nesmĂ zaÄŤĂnat intervalem, napĹ™. [a-e] +</li> +<li> vyhledávanĂ, kterĂ© nenĂ Case sensitiv jako je ILIKE nebo ~* nepouĹľĂvá indexy. MĹŻĹľete ale pouĹľĂt funkcionálnĂ indexy, kterĂ© jsou popsány v sekci 4.8 +</li> +<li> pĹ™i inicializaci databáze (initdb) musĂ bĂ˝t pouĹľito C locale nebo vytvoĹ™te speciálnĂ text_pattern_index, kterĂ˝ umoĹľnĂ, pĹ™i respektovánĂ zmĂnÄ›nĂ˝ch podmĂnek pouĹľitĂ indexu operacĂ LIKE. Pro vyhledávánĂ celĂ˝ch slov je moĹľnĂ© a vĂ˝hodnĂ© pouĹľĂt fulltext. +</li> +</ul> +<h3><a name="item4.7">4.7</a>) Jak zjistĂm, jak se vyhodnocuje mĹŻj dotaz?</h3> +<p>PodĂvejte se do nápovÄ›dy k pĹ™Ăkazu EXPLAIN. +</p> +<h3><a name="item4.8">4.8</a>) Jak pouĹľĂt case-(in)sensitive regulárnĂ vĂ˝raz? Jak pouĹľĂt index pro case insensitive hledánĂ?</h3> +<p>VyhledávánĂ prostĹ™ednictvĂm regulárnĂch vzorĹŻ zajišťuje operátor ~, kterĂ˝ je case-sensitive. Jeho case-insensitive varianta je operátor ~*. Case-insensitive variacĂ operátoru LIKE je operátor ILIKE. +</p> +<p>Case-insensitive vyhledánĂ se Ĺ™ešĂ: +</p> +<pre> +SELECT * +FROM tab +WHERE lower(col) = 'abc'; +</pre><p>Tento dotaz nepouĹľije standardnĂ index. MusĂte pouĹľĂt tzv. funkcionálnĂ index: +</p> +<pre> +CREATE INDEX tabindex ON tab (lower(col)); +</pre><p>Pokud index vytvoĹ™Ăme jako unikátnĂ, tak mĹŻĹľeme ukládat Ĺ™etÄ›zce obsahujĂcĂ malá i velká pĂsmena, ale nikoliv Ĺ™etÄ›zce, kterĂ© se od sebe odlišujĂ jen v malĂ˝ch a velkĂ˝ch pĂsmenech. K zajištÄ›nĂ zápisu Ĺ™etÄ›zce obsahujĂcĂ pouze malá nebo pouze velká pĂsmena pouĹľijte CHECK kontroly nebo triggery. +</p> +<h3><a name="item4.9">4.9</a>) Jak v dotazu detekovat, Ĺľe poloĹľka je NULL? Jak bezpeÄŤnÄ› spojit dva Ĺ™etÄ›zce, pokud mohou obsahovat NULL? Lze tĹ™Ădit podle toho, jestli je poloĹľka NULL nebo ne?</h3> +<p>Pokud chcete testovat hodnotu NULL pouĹľijte operátor IS: +</p> +<pre> + SELECT * FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); -</PRE> - <P>Pro urychlení vytvořete index pro subcol. </P> - - <P>Ve verzi 7.4 a pozdějąích, <SMALL>IN</SMALL> pouľívá stejně sofistikovanou techniku - spojování tabulek jako ostatní dotazy a je preferovaný před <SMALL>EXISTS</SMALL>.</P> - - <H4><A name="4.23">4.23</A>) Jak provést vnějąí spojení (outer join)?</H4> - - <P>PostgreSQL podporuje vnějąí spojení tabulek standardními SQL příkazy. - Zde jsou dva příklady:</P> -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); -</PRE> - nebo -<PRE> - SELECT * - FROM t1 LEFT OUTER JOIN USING (col); -</PRE> - <P>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í (<SMALL>RIGHT JOIN</SMALL>) přidá - nepřipojené řádky z t2. <SMALL>FULL JOIN</SMALL> vrátí vąechny řádky, včetně - nepřipojených z tbulek t1 a t2. Klíčové slovo <SMALL>OUTER</SMALL> je nepovinné a váľe - se na <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> a <SMALL>FULL</SMALL> join. Běľné - spojení se nazývá <SMALL>INNER JOIN</SMALL>.</P> - - <P>V dřívějąích verzích se vnějąí spojení tabulek mohlo simulovat pomocí - <SMALL>UNION</SMALL> a <SMALL>NOT IN</SMALL>. Například pro spojení tabulek tab1 a tab2, je - následující dotaz ekvivalentní k vnějąímu spojení dvou tabulek:</P> -<PRE> - 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; -</PRE> - - <H4><A name="4.24">4.24</A>) Jak provést dotaz z více databází?</H4> - - <P>PostgreSQL nepodporuje dotazy do jiné neľ aktuální databáze.</P> - - <P><I>contrib/dblink</I> nabízí funkce umoľňující provedení dotazu v jiné - databázi. Klient si můľe otevřít simultální připojení do různých - db bez omezení.</P> - - <H4><A name="4.25">4.25</A>) Můľe funkce vrátit více řádků nebo sloupců?</H4> - - <P>V PostgreSQL 7.3 můľete jednoduąe vracet více řádků nebo sloupců z - funkce, viz: - <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P> - - <H4><A name="4.26">4.26</A>) Proč nelze spolehlivě vytvářet a ruąit dočasné tabulky v PL/pgSQL funkcích?</H4> - - <P>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í <SMALL>EXECUTE</SMALL>, tj. - dynamické provádění dotazu. Tento příkaz zajistí opakovaný překlad - dotazu při kaľdém volání funkce.</P> - - <H4><A name="4.27">4.27</A>) Jaké jsou moľnosti replikace databází?</H4> - - <P>Existuje několik dostupných řeąení master/slave replikací, tj umoľňují - modifikace master databáze a slave databázím umoľňují pouze čtení. Na - konci <A href="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</A> najdete - jejich seznam. Na řeąení multi-master replikaci se pracuje na - <A href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>.</P> - - <H4><A name="4.28">4.28</A>) Jaké jsou moľnosti ąifrování databází?</H4> - <UL> - <LI><I>contrib/pgcrypto</I> obsahuje ąifrovací funkce pouľitelné v SQL - dotazech.</LI> - <LI>K ąifrování přenosu dat z klienta na server, musí být server - přeloľen s podporou <I>ssl</I> a přepínač <I>ssl</I> v <I>postgresql.conf</I> musí být - nastaven na hodnotu true. Klient musí mít vytvořen záznam hostssl v - <I>pg_hba.conf</I> a také mít povolen reľim <I>ssl</I>. Lze pouľít i jiné - prostředky, nejen nativní podporu ssl v PostgreSQL, např. stunel a - ssh.</LI> - <LI>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 - <I>PASSWORD_ENCRYPTION</I> v <I>postgresql.conf</I></LI> - <LI> Server můľe běľet na ąifrovaném souborovém systému.</LI> - </UL> - <HR> - - <H2 align="center">Roząiřování PostgreSQL</H2> - - <H4><A name="5.1">5.1</A>) Napsal jsem UDF funkci, PostgreSQL vąak končí dump core?</H4> - - <P>Problém můľe být způsoben mnoha okolnostmi. Vyzkouąejte si svoji funkci - nejdříve v nějaké jednoduché aplikaci.</P> - - <H4><A name="5.2">5.2</A>) Jak mohu přispět nějakými ąikovnými datovými typy a funkcemi do PostgreSQL?</H4> - - <P>Poąlete své roząíření do konference pgsql-hackers, a ono pak moľná - skončí v podadresáři contrib.</P> - - <H4><A name="5.3">5.3</A>) Jak napsat funkci v C vracející ntici?</H4> - - <P>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 <I>contrib/tablefunc</I>.</P> - - <H4><A name="5.4">5.4</A>) Modifikoval jsem zdrojové soubory. Tato změna nebyla při rekompilaci vzata v potaz. Proč?</H4> - - <P><I>Makefile</I> nemá informace o závislostech mezi hlavičkovými soubory. Musíte - provést <I>make clean</I> a pak <I>make</I>. Pokud pouľíváte <SMALL>gcc</SMALL>, můľete pouľít - přepínač <I>--enable-depend</I> příkazu <I>configure</I> k automatickému řeąení - závislostí překladačem.</P> - </BODY> -</HTML> + WHERE col IS NULL; +</pre><p>K spojenĂ Ĺ™etÄ›zcĹŻ, kterĂ© mohou obsahovat hodnotu NULL, pouĹľĂvejte funkci COALESCE(), napĹ™.: +</p> +<pre> + SELECT COALESCE(col1, '') || COALESCE(col2, '') + FROM tab +</pre><p>Pokud chcete tĹ™Ădit podle hodnoty NULL, pouĹľijte vĂ˝raz IS NULL nebo IS NOT NULL v klauzuli ORDER. Hodnota pravda má pĹ™ednost pĹ™ed hodnotou false a tedy pokud pouĹľijete: +</p> +<pre> + SELECT * + FROM tab + ORDER BY (col IS NOT NULL) +</pre><p>tak záznamy s NULL budou na začátku setĹ™ĂdÄ›nĂ˝ch dat. +</p> +<h3><a name="item4.10">4.10</a>) JakĂ© jsou rozdĂly mezi rĹŻznĂ˝mi znakovĂ˝mi typy?</h3> +<table border="0"> +<tr><td>Typ </td><td> InternĂ název </td><td> Poznámky +</td></tr> +<tr><td> VARCHAR(n)</td><td> varchar</td><td> n urÄŤuje maximálnĂ dĂ©lku +</td></tr> +<tr><td> CHAR(n)</td><td> bpchar </td><td> Ĺ™etÄ›zec je do danĂ© dĂ©lky rozšĂĹ™en mezerami +</td></tr> +<tr><td> TEXT</td><td> text</td><td> bez omezenĂ dĂ©lky +</td></tr> +<tr><td> BYTEA</td><td> bytea</td><td> pole bytĹŻ nespecifikovanĂ© dĂ©lky +</td></tr> +<tr><td> "char"</td><td> char</td><td> jeden znak +</td></tr> +</table> +<p>Na internĂ názvy mĹŻĹľete narazit v systĂ©movĂ©m katalogu nebo v nÄ›kterĂ˝ch chybovĂ˝ch hlášenĂch. +</p> +<p>ÄŚtyĹ™i prvnĂ typy jsou tzv. varlena typy (prvnĂ ÄŤtyĹ™i byty na disku jsou obsahujĂ dĂ©lku, ostatnĂ obsahujĂ vlastnĂ data). SkuteÄŤnÄ› obsazenĂ˝ prostor je tedy o nÄ›co málo vÄ›tšà neĹľ deklarovaná velikost. Na druhou stranu, delšà řetÄ›zce jsou komprimovány, takĹľe obsazenĂ˝ prostor na disku mĹŻĹľe bĂ˝t menšà neĹľ se ÄŤeká. +</p> +<p>VARCHAR(n) je vhodnĂ˝ pro ukládánĂ rĹŻznÄ› dlouhĂ˝ch Ĺ™etÄ›zcĹŻ u kterĂ˝ch známe dĂ©lkovĂ© omezenĂ, TEXT pro Ĺ™etÄ›zce bez omezenĂ dĂ©lky (maximum je jeden gigabyte). +</p> +<p>CHAR(n) se pouĹľĂvá pro uloĹľenĂ stejnÄ› dlouhĂ˝ch Ĺ™etÄ›zcĹŻ. CHAR(n) doplnĂ mezerami na specifikovanou dĂ©lku, VARCHAR(n) hodnoty se ukládajĂ tak jak jsou. BYTEA je pro ukládánĂ binárnĂch dat - non ASCII hodnot. Všechny zmĂnÄ›nĂ© typy majĂ podobnĂ© vĂ˝konovĂ© charakteristiky. +</p> +<h3><a name="item4.11.1">4.11.1</a>) Jak vytvoĹ™it serial/auto-increment poloĹľku?</h3> +<p>V PostgreSQL mĹŻĹľete pouĹľĂt datovĂ˝ typ SERIAL. Jeho pouĹľitĂm se automaticky vytvořà sekvence. +NapĹ™Ăklad: +</p> +<pre> +CREATE TABLE person ( + id SERIAL, + name TEXT +); +</pre><p>je automaticky transformováno na: +</p> +<pre> +CREATE SEQUENCE person_id_seq; +CREATE TABLE person ( + id INT4 NOT NULL DEFAULT nextval('person_id_seq'), + name TEXT +); +</pre><p>PodrobnÄ›jšà informace najdete v manuálu v popisu pĹ™Ăkazu create_sequence. +</p> +<h3><a name="item4.11.2">4.11.2</a>) Jak zĂskat hodnotu SERIAL po vloĹľenà řádku?</h3> +<p>NejjednoduššĂm zpĹŻsob, jak zĂskat vygenerovanou hodnotu typu SERIAL, je vyuĹľĂt klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto: +</p> +<pre> +INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; +</pre><p>TakĂ© mĹŻĹľete pouĹľĂt funkci nextvall() a jejĂ vĂ˝sledek pouĹľĂt v pĹ™Ăkazu INSERT, nebo zavolat currval() po provedenĂ pĹ™Ăkazu INSERT. +</p> +<h3><a name="item4.11.3">4.11.3</a>) NezpĹŻsobĂ currval() a nextval() problĂ©my ve vĂce uĹľivatelskĂ©m prostĹ™edĂ?</h3> +<p>Ne, currval vracĂ vĹľdy hodnotu, která byla vygenerována pro vás. +</p> +<h3><a name="item4.11.4">4.11.4</a>) ProÄŤ nenĂ vygenerovanĂ© ÄŤĂslo pouĹľito pĹ™i pĹ™erušenĂ transakce?ProÄŤ vznikajĂ dĂry v ÄŤĂslovánĂ prostĹ™ednictvĂm sekvence nebo typu SERIAL?</h3> +<p>PotĂ© co sekvence vygeneruje novĂ© ÄŤĂslo, tak se nedocházĂ k zamÄŤenĂ sekvence a neÄŤeká se na ĂşspěšnĂ© nebo neĂşspěšnĂ© dokonÄŤenĂ transakce. OdvolánĂm transakce, která si vyžádala ÄŤĂsla sekvence se tato ÄŤĂsla nenávratnÄ› ztratĂ. +</p> +<h3><a name="item4.12">4.12</a>) Co to je OID? Co je to CTID?</h3> +<p>V pĹ™ĂpadÄ›, Ĺľe tabulku nezaloĹľĂme s atributem WITHOUT OIDS, tak má kaĹľdĂ˝ řádek unikátnĂ identifikaÄŤnĂ ÄŤĂslo OID. Toto ÄŤĂslo je 4 bajtovĂ© celĂ© ÄŤĂslo, kterĂ© je jedineÄŤnĂ© v celĂ© instalaci. PĹ™eteÄŤe po 4 miliardách řádkĹŻ. PostgreSQL pouĹľĂvá OIDs jako internĂ linky v internĂch systĂ©movĂ˝ch tabulkách. +</p> +<p>K zĂskánĂ unikátnĂho ÄŤĂsla v nesystĂ©movĂ˝ch tabulkách je vhodnÄ›jšà pouĹľitĂ typu SERIAL neĹľ OID, jelikoĹľ sekvence SERIAL se pouĹľĂvá pouze pro jednu tabulku a je tudĂĹľ mĂ©nÄ› náchylná na pĹ™eteÄŤenĂ. Pokud byste se toho obávali, pouĹľijte typ SERIAL8. +</p> +<p>CTID se pouĹľĂvá k identifikaci konkrĂ©tnĂho fyzickĂ©ho řádku. CTID se mÄ›nĂ pokud je řádek modifikován nebo znovu naÄŤten. PouĹľĂvajĂ ho indexy jako adresaci fyzickĂ˝ch řádkĹŻ. +</p> +<h3><a name="item4.13">4.13</a>) Co znamená chybovĂ© hlášenĂ "ERROR: Memory exhausted in AllocSetAlloc()"?</h3> +<p>PravdÄ›podobnÄ› jste vyÄŤerpal dostupnou virtuálnĂ paměť, nebo tvĹŻj kernel +má pĹ™Ăliš nĂzkĂ© limity u urÄŤitĂ˝ch zdrojĹŻ. PĹ™ed startem PostgreSQL vyzkoušejte: +</p> +<pre> +ulimit -d 262144 +limit datasize 256m +</pre><p>MoĹľná, Ĺľe se projde pouze jeden pĹ™Ăkaz - záležà to na vašem shellu. +MÄ›l by zvednout limity datovĂ˝ch segmentĹŻ vašich procesĹŻ na dostateÄŤnÄ› velkou +hodnotu a snad umoĹľnit dokonÄŤenĂ dotazu. ZmÄ›na limitĹŻ se bude aplikovat +pouze na aktuálnĂ proces a na všechny novÄ› vytvoĹ™enĂ© procesy. JestliĹľe máte +problĂ©m s SQL klientem, protoĹľe vám server vrátil pĹ™Ăliš dat, zkuste to +pĹ™ed startem klienta. +</p> +<h3><a name="item4.14">4.14</a>) Jak zjistĂm, kterou verzi PostgreSQL pouĹľĂvám?</h3> +<p>V psql napište: +</p> +<pre> +SELECT version(); +</pre> +<h3><a name="item4.15">4.15</a>) Jak vytvoĹ™it sloupec, kterĂ˝ bude implicitnÄ› obsahovat aktuálnĂ ÄŤas?</h3> +<p>PouĹľijte CURRENT_TIMESTAMP: +</p> +<pre> +CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); +</pre> +<h3><a name="item4.16">4.16</a>) Jak provĂ©st vnÄ›jšà spojenĂ (outer join)?</h3> +<p>PostgreSQL podporuje standardnĂ SQL syntaxi pro vnÄ›jšà spojenĂ. Zde jsou +dva pĹ™Ăklady: +</p> +<pre> +SELECT * +FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); +</pre><p>nebo +</p> +<pre> +SELECT * +FROM t1 LEFT OUTER JOIN t2 USING (col); +</pre><p>Tyto identickĂ© dotazy spojĂ sloupec t1.col k sloupci t2.col, a ještÄ› vrátĂ všechny nespárovanĂ© řádky t2 (ty, kterĂ© nedohledá v t2). RIGHT JOIN by pĹ™ipojil všechny nespárovanĂ© řádky z t2. FULL JOIN vrátĂ všechny spárovanĂ© řádky i všechny zbĂ˝vajĂcà řádky z obou tabulek. KlĂÄŤovĂ© slovo OUTER je volitelnĂ©. Běžná operace JOIN se takĂ© oznaÄŤuje jako vnitĹ™nĂ spojenĂ. +</p> +<h3><a name="item4.17">4.17</a>) Jak provĂ©st dotaz napĹ™ĂÄŤ nÄ›kolika databázemi?</h3> +<p>Neexistuje žádnĂ˝ zpĹŻsob, jak se v dotazu odkazovat na tabulky z jinĂ© neĹľ aktuálnĂ databáze. A to protoĹľe má systĂ©movĂ© tabulky uloĹľenĂ© nezávisle v kaĹľdĂ© databázi a nenĂ tak ĂşplnÄ› zĹ™ejmĂ©, jak by se dotaz provedenĂ˝ napĹ™ĂÄŤ databázemi mÄ›l chovat. +</p> +<p>Jeden z doplĹkĹŻ dblink umoĹľĹuje dotaz nad nÄ›kolika tabulkami pomocĂ funkcĂ. DruhĂ˝ zpĹŻsob je simultálnĂ pĹ™ipojenĂ klienta ke všem relevantnĂm databázĂm a slouÄŤenĂ vĂ˝sledku na stranÄ› klienta. +</p> +<h3><a name="item4.18">4.18</a>) MĹŻĹľe funkce vrátit vĂce řádkĹŻ nebo sloupcĹŻ?</h3> +<p>Jde to jednoduše pomocĂ set-returning funkce. VĂce na +<a href="http://www.postgresql.org/docs/techdocs.17" title="http://www.postgresql.org/docs/techdocs.17">http://www.postgresql.org/docs/techdocs.17</a>. +</p> +<h3><a name="item4.19">4.19</a>) Co je pĹ™ĂÄŤinou chyby "relation with OID xxxxx does not exist"?</h3> +<p>NechtÄ›nĂ˝m vedlejšĂm efektem kešovánĂ SQL dotazĹŻ v PL/pgSQL funkci je problĂ©m s neplatnĂ˝mi odkazy na doÄŤasnĂ© tabulky, kterĂ© byly od prvnĂho spuštÄ›nĂ funkce zrušeny a znovu vytvoĹ™eny pĹ™ed dalšĂm spuštÄ›nĂm PL/pgSQL funkce. ĹešenĂm je pouĹľĂt pĹ™Ăkaz EXECUTE a to proto, Ĺľe provádÄ›cĂ plán SQL pĹ™Ăkazu spouštÄ›nĂ©ho pĹ™Ăkazem EXECUTE se vytvářà pokaĹľdĂ© znovu (neukládá se do cache). +</p> +<p>Tento problĂ©m by se nemÄ›l vyskytovat u PostgreSQL verze 8.3 a vyššĂch verzĂch. +</p> +<h3><a name="item4.20">4.20</a>) JakĂ© jsou moĹľnosti replikace databázĂ?</h3> +<p>Replikaci databáze umoĹľĹuje nÄ›kolik technoligiĂ. KaĹľdá má urÄŤitĂ© vĂ˝hody a nevĂ˝hody. +</p> +<p>Master/Slave replikaci podporuje jeden hlavnĂ server, kterĂ˝ pĹ™ijĂmá poĹľadavky na zápis a ÄŤtenĂ, a nÄ›kolik podĹ™ĂzenĂ˝ch serverĹŻ, kterĂ© umoĹľĹujĂ pouze ÄŤtenĂ (SELECT). NejrozšĂĹ™enÄ›jšĂm volnÄ› dostupnĂ˝m Ĺ™ešenĂm tohoto typu je <a href="http://main.slony.info/" title="http://main.slony.info/">Slony-I</a>. +</p> +<p>Replikace typu Multi-master podporuje existenci nÄ›kolika serverĹŻ s povolenĂ˝m zápisem na vĂce replikovanĂ˝ch serverech. Toto Ĺ™ešenĂ zvyšuje zátěž serverĹŻ, protoĹľe je nutná synchronizace serverĹŻ. NejrozšĂĹ™enÄ›jšĂm volnÄ› dostupnĂ˝m Ĺ™ešenĂm je <a href="http://pgfoundry.org/projects/pgcluster/" title="http://pgfoundry.org/projects/pgcluster/">PGCluster</a>. +</p> +<p>JeštÄ› existuje nÄ›kolik komerÄŤnĂch a hardware Ĺ™ešenĂ replikacĂ podporujĂcĂch rĹŻznĂ© modely replikace. +</p> +<h3><a name="item4.21">4.21</a>) ProÄŤ v dotazu nejsou rozpoznány názvy mĂ˝ch tabulek nebo funkcĂ? ProÄŤ jsou velká pĂsmena v názvech automaticky pĹ™evedena na malá pĂsmena?</h3> +<p>NejÄŤastÄ›jšĂm dĹŻvodem nerozpoznánĂ názvu objektu bylo pouĹľitĂ vloĹľenĂ názvu sloupce nebo tabulky mezi uvozovky pĹ™i zakládánĂ tabulky. Pokud se název zapĂše mezi uvozovky, pak je case sensitive, a v dĹŻsledku toho je nutnĂ© názvy tÄ›chto sloupcĹŻ nebo tabulek v SQL pĹ™Ăkazech takĂ© vkládat mezi uvozovky (pokud obsahujĂ velká pĂsmena). NÄ›kterĂ© programy, jako je napĹ™Ăklad pgAdmin, automaticky pouĹľĂvajĂ uvozovky. TakĹľe pokud chcete, aby systĂ©m identifikoval identifikátor, musĂte: +</p> +<ul><li> nepouĹľĂvat uvozovky v pĹ™Ăkazu CREATE TABLE +</li> +<li> v identifikátoru pouĹľĂt pouze malá pĂsmena +</li> +<li> v dotazech vkládat identifikátory do uvozovek +</li> +</ul> +</body> +</htm> -- GitLab