aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/src/FAQ/FAQ_czech.html2181
1 files changed, 1130 insertions, 1051 deletions
diff --git a/doc/src/FAQ/FAQ_czech.html b/doc/src/FAQ/FAQ_czech.html
index 9d2c43b5ff3..59806e74874 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&amp;idoc=1&amp;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 &gt; server.log 2&gt;&amp;1 &amp;
-</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-&gt;{pg_oid_status} po každém $sth-&gt;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