diff options
author | Bruce Momjian | 2007-11-01 17:28:03 +0000 |
---|---|---|
committer | Bruce Momjian | 2007-11-01 17:28:03 +0000 |
commit | 5c996884a05ad62f00b8e4432beca1d7dd177d61 (patch) | |
tree | 2dd4d39becfc21114d1a4d715e5925d06aab095f /doc/FAQ_czech | |
parent | 6287c31b5a20cf84d64ce6f328ef48c8c98ddfba (diff) |
Update Czech FAQ.
Pavel Stehule
Diffstat (limited to 'doc/FAQ_czech')
-rw-r--r-- | doc/FAQ_czech | 1818 |
1 files changed, 775 insertions, 1043 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 |