diff --git a/doc/src/FAQ/FAQ_czech.html b/doc/src/FAQ/FAQ_czech.html index 9d2c43b5ff35d4215dcd5f96d471b78f6619b051..59806e7487415e0fdfdffd052f95a983547657b7 100644 --- a/doc/src/FAQ/FAQ_czech.html +++ b/doc/src/FAQ/FAQ_czech.html @@ -1,1088 +1,1167 @@ -<html><head> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> - <meta http-equiv="Content-language" content="cs"> - <meta name="robots" content="index,FOLLOW"> - <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 cz</title> - - - <style type="text/css"> - A {font-family:helvetica,arial,sans-serif; font-weight:normal; color:#0201FF; text-decoration:none;} - A:active {color:#0201FF;;} - A:visited {color:#0F0169;} - A:hover{text-decoration:underline; color:#020169;} - body {font-family:helvetica,arial,sans-serif; font-weight:normal;} - </style></head> - <body leftmargin="10" topmargin="10" marginwidth="10" marginheight="10" bgcolor="white"> - - -<h1>Často kladené dotazy (FAQ) PostgreSQL</h1> - -<h2>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>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>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>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>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>Obecné otázky</h2> - -<h3><a name="1.1">1.1</a> Co je PostgreSQL? Jak se vyslovuje?</h3> - -<p>PostgreSQL se vyslovuje Post-Gres-Q-L.</p> - -<p></p>PostgreSQL vychází z databáze POSTGRES - výzkumného prototypu DBMS -nové generace. Z postgresu byl převzat silný datový model a bohatý -soubor datových typů a jeho dotazovací jazyk PostQuel byl nahrazen -roząířenou podmnoľinou jazyka SQL. PostgreSQL lze pouľívat bez -omezení a jeho zdrojové kódy jsou volně k dispozici.<p></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. (Odpověď -1.6. - jak se zapojit). Tento tým je zodpovědný za veąkerý vývoj -PostgreSQL.</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 SQL -se název změnil na Postgres95. Koncem roku 1996 byl RDBMS -přejmenován na PostgreSQL.</p> - -<h3><a name="1.2">1.2</a> Jaká je licence na PostgreSQL?</h3> - - <p>PostgreSQL je předmětem následujících autorských práv:</p> - - <p>Dílčí copyright (c) 1996-2002, PostgreSQL Global Development Group</p> - - <p>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="1.3">1.3</a> Na kterých Unixex lze spustit PostgreSQL?</h3> - -<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> - -<h3><a name="1.4">1.4</a> Které ne-unixové platformy jsou podporované?</h3> - -<h4>Klient</h4> - -<p>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.</p> - -<h4>Server</h4> -<p>Server můľe být na WindowsNT a Win2k provozován pouze s knihovnou Cygwin, -Cygnus Unix/NT porting library. Na nativním portu pro MS Win NT/2000/XP -se pracuje. Existující port pro Novell Netware 6 naleznete na -<a href="http://forge.novell.com/">http://forge.novell.com</a>. </p> - -<h3><a name="1.5">1.5</a> Kde mohu získat PostgreSQL?</h3> - -<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><p> - -</p><h3><a name="1.6">1.6</a> Kde mohu získat podporu?</h3> - -<p>Hlavním mailová konference je pgsql-general@PostgreSQL.org. Slouľí -k diskuzím ohledně PostgreSQL. Přihlásíte se zasláním mailu -obsahující následující řádky v těle dopisu (nikoliv v záhlaví - subjectu)</p> -<pre>subscribe -end -</pre> -na adresu <a href="mailto:pgsql-general-request@PostgreSQL.org">mailto:pgsql-general-request@PostgreSQL.org</a>.<p></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 -<href ="mailto:pgsql-bugs-request@PostgreSQL.org">mailto:pgsql-bugs-request@PostgreSQL.org.</href></p> - -<p>Do vývojářské konference se přihlásíte odesláním dopisu s -jiľ zmiňovaným obsahem na <a href="mailto:pgsql-hackers-request@PostgreSQL.org">mailto:pgsql-hackers-request@PostgreSQL.org</a>.</p> - -<p>Seznam daląích konferencí naleznete na stránkách PostgreSQL -<a href="http://www.postgresql.org/">http://www.postgresql.org</a></p> - -<h3><a name="1.7">1.7</a> Kde je poslední verze?</h3> - -<p>Poslední verzí je PostgreSQL 7.4.. Plánujeme uvolnit velkou verzi -kaľdých ąest aľ osm měsíců.</p> - -<h3><a name="1.8">1.8</a> Jaká je dostupná dokumentace?</h3> - -<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 /doc. 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>psql má uľitečný metapříkaz \d slouľící k zobrazení informací -o typech, operátorech, funkcí, agregačních funkcí atd.</p> +<!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?</H2> + + <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-2004, 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>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>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>Více dokumentace naleznete na naąich webových stránkách.</p> + <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> -<h3><a name="1.9">1.9</a> Kde najdu seznam známých chyb nebo nepodporovaných vlastností?</h3> - -<p>PostgreSQL podporuje roząířenou podmnoľinu SQL-92. V naąem <a href="http://developer.postgresql.org/todo.php">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> - -<h3><a name="1.10">1.10</a> Jak se mohu naučit SQL?</h3> - -<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>, na -<a href="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">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 The Practical SQL Handbook, Bowman, Judith -S., et al., Addison-Wesley. Jiní preferují The Complete Reference SQL, -Groff et al., McGraw-Hill.</p> - -<h3><a name="1.11">1.11</a> Nemá PostgreSQL problémy s rokem 2000?</h3> - -<p>Nemá, můľeme pracovat s datumy po roce 2000 naąeho letopočtu i před -rokem 2000 př.n.l. </p> - -<h3><a name="1.12">1.12</a> Jak se připojit k vývojářskému týmu?</h3> - -<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í pgsql-hackers a pgsql-patches. Kvalitní záplaty -posílejte do pgsql-patches.</p> - -<p>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.</p> - -<h3><a name="1.13">1.13</a> Kam podat report o chybě?</h3> - -<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> - -<h3><a name="1.14">1.14</a> Jak je na tom PostgreSQL v porovnání s jinými databázemi?</h3> - -<p>Existuje několik hledisek jak porovnávat software: vlastnosti, výkon, -spolehlivost, podpora a cena.</p> - -<h4>Vlastnosti</h4> - <p>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í.</p> - -<h4>Výkon</h4> - <p>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 - <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.</p> - -<h4>Spolehlivost</h4> - <p>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. </p> - -<h4>Podpora</h4> - <p>Na naąí mailové konferenci můľete kontaktovat velkou skupinu + <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> + 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> + <A href="http://www.postgresql.org">http://www.postgresql.org</A> + </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://developer.PostgreSQL.org/todo.php">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 <P>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 DBMS a to díky - přímému kontaktu s vývojáři, velkou komunitou uľivatelů, + 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 - (FAQ sekce 1.6).</p> + 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> -<h4>Cena</h4> - <p>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).</p> + <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> -<h3><a name="1.15">1.15</a> Jak lze finančně pomoci PostgreSQL?</h3> + <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>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>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>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> + <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> -<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>User client dotazy</h2> + <H2 align="center">User client dotazy</H2> -<h3><a name="2.1">2.1</a> Kde naleznu ODBC ovladače pro PostgreSQL?</h3> + <H4><A name="2.1">2.1</A>) Kde naleznu <SMALL>ODBC</SMALL> ovladače pro PostgreSQL?</H4> -<p>Pro PostgreSQL existují dva ODBC ovladače - PsqlODBC a OpenLink ODBC.</p> + <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>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>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 postgres95@openlink.co.uk.</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> -<h3><a name="2.2">2.2</a> Jaké nástroje lze pouľít pro PostgreSQL a web?</h3> + <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>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 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> + <P>Pro sloľitějąí případy se často pouľívá Perl a CGI.pm nebo mod_perl.</P> -<h3><a name="2.3">2.3</a> Existuje grafické rozhraní pro PostgreSQL?</h3> + <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 (<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 existuje -PHPPgAdmin (<a href="http://phppgadmin.sourceforge.net/">http://phppgadmin.sourceforge.net/</a>) rozhraní -PostgreSQL zaloľené na web technologii.</p> + <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> + <P>Úplnějąí seznam najdete na <A href= + "http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>.</P> -<h3><a name="2.4">2.4</a> Které programovací jazyky mají podporu pro PostgreSQL?</h3> + <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>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 -Drivers/Interfaces. </p> -<hr> + <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>Administrativní dotazy</h2> + <H2 align="center">Administrativní dotazy</H2> -<h3><a name="3.1">3.1</a> Jak nainstalovat PostgreSQL jinam neľ do /usr/local/pgsql?</h3> + <H4><A name="3.1">3.1</A>) Jak nainstalovat PostgreSQL jinam neľ do /usr/local/pgsql?</H4> -<p>Pouľijte volbu --prefix při spuątění configure</p> + <P>Pouľijte volbu <I>--prefix</I> při spuątění configure.</P> -<h3><a name="3.2">3.2</a> Při startu postmaster, dostanu chybové hláąení Bad System Call nebo -core dump. Proč?</h3> + <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>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> + <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> -<h3><a name="3.3">3.3</a> Při startu postmastera dostanu hláąení o chybě IpcMemoryCreate. Proč?</h3> + <H4><A name="3.4">3.4</A>) Při startu postmastera dostanu hláąení o chybě IpcSemaphoreCreate. + 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 <a href="http://postgresql.ok.cz/PostgreSQL%20Administrator%27sGuide">http://www.postgresql.org/docs/view.php?version=current&idoc=1&file=kernel-resources.html</a> -naleznete podrobnějąí informace o sdílené paměti a semaforech.</p> + <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> -<h3><a name="3.4">3.4</a> Při startu postmastera dostanu hláąení o chybě -IpcSemaphoreCreate. Proč?</h3> + <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>Pokud dostane chybovou zprávu IpcSemaphoreCreate: semget failed (No -space left on device), pak vaąe jádro nemá dost volných semaforů. PostgreSQL -vyľaduje jeden semafor pro kaľdý backend v pozadí. Dočasným -řeąením je start postmastera s limitem backendů. Pouľijte -přepínač -N s hodnotou menąí neľ 32. Úplným řeąením je zvýąení hodnot -SEMMNS a SEMMNI jadra.</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> - -<h3><a name="3.5">3.5</a> Jak povolit nebo zakázat přístup z jiných stanic?</h3> - -<p>Při výchozím nastavení PostgreSQL odepře přístup z jiných stanic neľ -lokální s pouľitím UDP. Databáze se zpřístupní jiným stanicím -nastavením přepínače -i postmastera a povolením stanice a určením -reľimu autentifikace v $PGDATA/pg_hba.conf. Tím se povolí TCP/IP -spojení. ZASTARALÉ</p> - -<h3><a name="3.6">3.6</a> Jak ladit databázový stroj na lepąí výkon?</h3> - -<p>Určitě pomohou indexy. Příkaz EXPLAIN zobrazí způsob interpretace -Vaąeho dotazu a pouľití indexů.</p> - -<p>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.</p> - -<p>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.</p> - -<p>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ů.</p> - -<p>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. </p> - -<p>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.</p> - -<h3><a name="3.7">3.7</a> Jaké jsou moľnosti ladění?</h3> - -<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č --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.</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č -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.</p> - -<p>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.</p> - -<p>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.</p> - -<p>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).</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 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.</p> - -<h3><a name="3.8">3.8</a> Proč dostanu "Sorry, too many clients", kdyľ se zkouąím připojit?</h3> - -<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 -N nebo úpravou postgresql.conf.</p> - -<p>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.</p> - -<h3><a name="3.9">3.9</a> K čemu slouľí adresář pgsql_tmp?</h3> - -<p>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ů.</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> - -<h3><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?</h3> - -<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 velké verze často mění -interní formát systémových tabulek a datových souborů. Tyto změny jsou -natolik rozsáhlé, ľe nelze zajistit zpětnou kompatibilitu pro datové -soubory. Dump uloľí data v obecném formátu, takľe mohou být načtena a -pouľívána v novém interním formátu.</p> -<hr> - -<h2>Provozní dotazy</h2> - -<h3><a name="4.1">4.1</a> Čím se liąí binární a normální kurzor?</h3> - -<p>Popis najdete v manuálové stránce DECLARE</p> - -<h3><a name="4.2">4.2</a> Jak získat pouze první řádek dotazu? Náhodný řádek?</h3> - -<p>Podívejte se do man. stránky příkazu FETCH, nebo pouľijte SELECT ... -LIMIT ... </p> - -<p>Není nutné zpracovávat celý dotaz, kdyľ potřebujete pouze několik prvních -řádků. Pokud existuje index ORDER BY, PostgreSQL je schopen přeruąit -zpracování dotazu po získání poľadovaného počtu řádků.</p> - -<p>K získání náhodného řádku pouľijte:</p> -<pre>SELECT col FROM tab - ORDER BY random() LIMIT 1; -</pre> -<h3><a name="4.3">4.3</a> Jak získám seznam tabulek nebo jinak jak jej získá psql?</h3> - -<p>Podívejte se do zdrojových kódů psql do souboru -pgsql/src/bin/psql/describe.c. Ten obsahuje SQL příkazy, které se -pouľívají v psql metapříkazech. Dále můľete spustit psql s přepínačem --E, který způsobí zobrazení kaľdého dotazu, které zpracování -metapříkazu vyvolá.</p> - -<h3><a name="4.4">4.4</a> Jak odstraním sloupec tabulky, jak změním jeho typ?</h3> - -<p>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:</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> -<p>Poté proveďte VACUUM FULL tab - uvolníte tím diskový prostor zabraný -nyní jiľ neplatnými řádky.</p> - -<h3><a name="4.5">4.5</a> Jaká je maximální velikost řádku, tabulky a databáze?</h3> - -<p>PostgreSQL má tato omezení:</p> -<table> -<tbody><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> 1.6 TB -</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></tbody></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> - -<h3><a name="4.6">4.6</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ě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 ------------------------------------------------------- - 64 bytů na řádek -</pre> -<p>Velikost datové stránky PostgreSQL je 8KB</p> -<pre> 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 NULL jsou uloľeny v bitmapách, takľe spotřebují jen velmi málo -diskového prostoru.</p> - -<h3><a name="4.7">4.7</a> Jak získám seznam vytvořených tabulek, indexů, databází?</h3> - -<p>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í.</p> - -<p>Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy přistupující -k systémovým tabulkámm.</p> - -<h3><a name="4.8">4.8</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ľ indexní čtení 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, 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 SET enable_seqscan TO 'off' 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 LIKE nebo ~ 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 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 nepouľívá indexy. Můľete ale - pouľít funkcionální indexy, které jsou posány v sekci 4.12 - </li><li>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í). -</li></ul> - -<h3><a name="4.9">4.9</a> Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz?</h3> - -<p>Podívejte se do manuálové stránky příkazu EXPLAIN.</p> - -<h3><a name="4.10">4.10</a> Co to je R-tree index?</h3> - -<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 point, 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> - -<h3><a name="4.11">4.11</a> Co je Genetic Query Optimizer?</h3> - -<p>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.</p> - -<h3><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í?</h3> - -<p>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.</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> -<p>V tomto případě se nepouľije standardní index. Nicméně, pouľije se -funkcionální index, pokud jej vytvoříte </p> -<pre>CREATE INDEX tabindex ON tab (lower(col)); -</pre> -<h3><a name="4.13">4.13</a> Jak v dotazu detekovat, ľe poloľka je NULL?</h3> - -<p>Určíte pomocí IS NULL nebo IS NOT NULL</p> - -<h3><a name="4.14">4.14</a> Jaké jsou rozdíly mezi různými znakovými typy?</h3> -<pre>Typ Interní název Poznámka + <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 + ------------------------------------------------------ + 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: +<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>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 TOASTem, takľe prostor na disku -můľe být niľąí neľ je očekáváno.</p> - -<p>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.</p> - -<p>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.</p> - -<h3><a name="4.15.1">4.15.1</a> Jak vytvořit serial/auto-increment pole?</h3> - -<p>PostgreSQL podporuje typ SERIAL. Při jeho pouľití se automaticky -vytvoří SEQUENCE a index na sloupci (Pro vyąąí verze to neplatí -OVĚŘIT). Například:</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> -<p>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).</p> - -<h3><a name="4.15.2">4.15.2</a> Jak získat hodnotu SERIAL po vloľení řádku?</h3> - -<p>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</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 -tabulka_sloupec_seq.</p> - -<p>Alternativně můľete získat hodnotu posledně generovou sekvencí funkcí -currval() 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 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().</p> - -<h3><a name="4.15.3">4.15.3</a> Nepovede currval() a nextval() k rozhození podmínek při souběhu s jinými uľivateli?</h3> - -<p>Nikoliv, currval() vrací hodnotu naposledy generovanou ve vaąem -backendu, a ta tudíľ není společná vąem uľivatelům.</p> - -<h3><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?</h3> - -<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> - -<h3><a name="4.16">4.16</a> Co to je OID? Co je to TID?</h3> - -<p>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</p> - -<p>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.</p> - -<p>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</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>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.</p> - -<p>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).</p> - -<h3><a name="4.17">4.17</a> Jaký je význam některých výrazů pouľitých v PostgreSQL?</h3> - -<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> - -<h3><a name="4.18">4.18</a> Proč jsem získal chybové hláąení "ERROR: Memory exhausted in -AllocSetAlloc()"?</h3> - -<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> - -<h3><a name="4.19">4.19</a> Jak se dozvím, kterou verzi PostgreSQL pouľívám?</h3> - -<p>V psql spus»te</p> -<pre>SELECT version(); -</pre> -<h3><a name="4.20">4.20</a> Proč operace s velkými objekty končí "invalid large obj descriptor"?</h3> - -<p>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.</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> - -<p>Pokud pouľíváte interface podobné ODBC musíte nastavit set auto_commit off</p> - -<h3><a name="4.21">4.21</a> Jak vytvořit sloupec obsahující implicitně aktuální datum?</h3> - -<p>Pouľijte CURRENT_TIMESTAMP</p> -<pre>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); -</pre> -<h3><a name="4.22">4.22</a> Proč jsou moje vnořené dotazy pouľívající IN tak pomalé?</h3> - -<p>Aktuálně spojujeme tabulky se sekvenčním skenováním výsledku pro kaľdý -řádek vnějąího dotazu. Pokud vnořený dotaz má pouze několik řádků a -vnějąí dotaz vrací hodně řádek, IN je rychlé. V jiných případech -nahraďte IN EXISTS:</p> -<pre>SELECT * FROM tab - WHERE col IN (SELECT subcol FROM subtab); -</pre> -takto -<pre>SELECT * FROM tab - WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); -</pre> -<p>Pro urychlení vytvořete index pro subcol. Tento výkonnostní problém -byl odstraněn ve verzi 7.4.</p> - -<h3><a name="4.23">4.23</a> Jak provést vnějąí spojení (outer join)?</h3> - -<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í -(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.</p> - -<p>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:</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> -<h3><a name="4.24">4.24</a> Jak provést dotaz napříč několika databázemi?</h3> - -<p>PostgreSQL nenabízí ľádný způsob, jak se dotázat do jiné databáze neľ -do aktuální. Doplněk contrib/dblink umoľňuje dotaz do cizí databáze -prostřednictvím funkce. Na straně klienta není problém si otevřít více -simultálních přístupů do různých databází a spojovat výsledek na -straně klienta.</p> - -<h3><a name="4.25">4.25</a> Můľe funkce vrátit více řádků nebo sloupců?</h3> - -<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> - -<h3><a name="4.26">4.26</a> Proč nelze spolehlivě vytvářet a ruąit dočasné tabulky v -PL/pgSQL funkcích?</h3> - -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.<p></p> - -<h3><a name="4.27">4.27</a> Jaké jsou moľnosti replikace databází?</h3> - -<p>Existuje několik dostupných řeąení master/slave replikací. Ty povolují -modifikace master databáze a slave databázím umoľňují pouze čtení. Na -konci <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> - -<h3><a name="4.28">4.28</a> Jaké jsou moľnosti ąifrování databází?</h3> -<ul> -<li><p>contrib/pgcrypto obsahuje ąifrovací funkce pouľitelné v SQL -dotazech.</p> - -</li><li><p>K ąifrování přenosu dat z klienta na server, musí být -server přeloľen s podporou ssl a přepínač sslv postgresql.conf musí -být nastaven na hodnotu true. Klient musí mít vytvořen záznam -hostssl v pg_hba.conf a také mít povolen reľim ssl. Lze pouľít i jiné -prostředky, nejen nativní podporu ssl v PostgreSQL, např. stunel a ssh.</p> - -</li><li><p>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</p> - -</li><li><p>Server můľe běľet na ąifrovaném souborovém systému.</p> -</li></ul> -<hr> -<h2>Roząiřování PostgreSQL</h2> - -<h3><a name="5.1">5.1</a> Napsal jsem UDF funkci, PostgreSQL vąak končí dump core?</h3> - -<p>Problém můľe být způsoben mnoha okolnostmi. Vyzkouąejte si svoji -funkci nejdříve v nějaké jednoduché aplikaci.</p> - -<h3><a name="5.2">5.2</a> Jak mohu přispět nějakými ąikovnými datovými typy a funkcemi -do PostgreSQL?</h3> - -<p>Poąlete své roząíření do konference pgsql-hackers, a ono pak moľná -skončí v podadresáři contrib.</p> - -<h3><a name="5.3">5.3</a> Jak napsat funkci v C vracející ntici?</h3> - -<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 contrib/tablefunc.</p> - -<h3><a name="5.4">5.4</a> Modifikoval jsem zdrojové soubory. Tato změna nebyla při -rekompilaci vzata v potaz. Proč?</h3> - -<p>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.</p> -</body></html> \ No newline at end of file +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>. + + <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</LI> + 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>: +<PRE> + SELECT * + FROM tab + WHERE col IN (SELECT subcol FROM subtab); +</PRE> + na: +<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>. + + <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> \ No newline at end of file