1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
4 <META name="generator" content="HTML Tidy, see www.w3.org">
5 <META http-equiv="Content-Type" content="text/html; charset="iso-8859-2">
6 <META http-equiv="Content-language" content="cs">
7 <META name="description" lang="en" content="Czech translation of FAQ for PostgreSQL">
8 <META name="description" lang="cs" content="Èeský pøeklad FAQ PostgreSQL">
10 <TITLE>PostgreSQL FAQ</TITLE>
13 <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
17 <H1>Èasto kladené dotazy (FAQ) PostgreSQL</H1>
19 <P>Poslední aktualizace: Støeda 23. èervna 21:10:00 EST 2004</P>
21 <P>Souèasný správce: Bruce Momjian (<A href=
22 "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)</P>
24 <P>Pøelo¾il: Pavel Stìhule (<A href=
25 "mailto:stehule@kix.fsv.cvut.cz">stehule@kix.fsv.cvut.cz</A>)</P>
27 <P>Aktuální verzi tohoto dokumentu naleznete na adrese: <A href=
28 "http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.
29 Èeský pøeklad na adrese: <A href="http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html">
30 http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html</A>.</P>
32 <P>Odpovìdi na dotazy relevantní ke konkrétním platformám
33 lze nalézt na adrese: <A href="http://www.PostgreSQL.org/docs/index.html">
34 http://www.PostgreSQL.org/docs/index.html</A>.</P>
36 <H2 align="center">Obecné otázky</H2>
38 <A href="#1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?<BR>
39 <A href="#1.2">1.2</A>) Jaká je licence na PostgreSQL?<BR>
40 <A href="#1.3">1.3</A>) Na kterých Unixex lze spustit PostgreSQL?<BR>
41 <A href="#1.4">1.4</A>) Které ne-unixové platformy jsou podporované?<BR>
42 <A href="#1.5">1.5</A>) Kde mohu získat PostgreSQL?<BR>
43 <A href="#1.6">1.6</A>) Kde mohu získat podporu?<BR>
44 <A href="#1.7">1.7</A>) Kde je poslední verze?<BR>
45 <A href="#1.8">1.8</A>) Jaká je dostupná dokumentace?<BR>
46 <A href="#1.9">1.9</A>) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?<BR>
47 <A href="#1.10">1.10</A>) Jak se mohu nauèit SQL?<BR>
48 <A href="#1.11">1.11</A>) Nemá PostgreSQL problémy s rokem 2000?<BR>
49 <A href="#1.12">1.12</A>) Jak se pøipojit k vývojáøskému týmu?<BR>
50 <A href="#1.13">1.13</A>) Kam podat report o chybì?<BR>
51 <A href="#1.14">1.14</A>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?<BR>
52 <A href="#1.15">1.15</A>) Jak lze finanènì pomoci PostgreSQL?<BR>
54 <H2 align="center">User client dotazy</H2>
56 <A href="#2.1">2.1</A>) Kde naleznu ODBC ovladaèe pro PostgreSQL?<BR>
57 <A href="#2.2">2.2</A>) Jaké nástroje lze pou¾ít pro PostgreSQL a web?<BR>
58 <A href="#2.3">2.3</A>) Existuje grafické rozhraní pro PostgreSQL?<BR>
59 <A href="#2.4">2.4</A>) Které programovací jazyky mají podporu pro PostgreSQL?<BR>
61 <H2 align="center">Administrativní dotazy</H2>
63 <A href="#3.1">3.1</A>) Jak nainstalovat PostgreSQL jinam ne¾ do /usr/local/pgsql?<BR>
64 <A href="#3.2">3.2</A>) Pøi startu postmaster, dostanu chybové hlá¹ení Bad System Call nebo
66 <A href="#3.3">3.3</A>) Pøi startu postmastera dostanu hlá¹ení o chybì
67 IpcMemoryCreate. Proè?<BR>
68 <A href="#3.4">3.4</A>) Pøi startu postmastera dostanu hlá¹ení o chybì IpcSemaphoreCreate.
70 <A href="#3.5">3.5</A>) Jak povolit nebo zakázat pøístup z jiných stanic?<BR>
71 <A href="#3.6">3.6</A>) Jak ladit databázový stroj na lep¹í výkon?<BR>
72 <A href="#3.7">3.7</A>) Jaké jsou mo¾nosti ladìní?<BR>
73 <A href="#3.8">3.8</A>) Proè dostanu "Sorry, too many clients", kdy¾ se zkou¹ím pøipojit?<BR>
74 <A href="#3.9">3.9</A>) K èemu slou¾í adresáø pgsql_tmp?<BR>
75 <A href="#3.10">3.10</A>) Proè je po¾adováno dump a obnovení (load) databáze bìhem upgrade
76 mezi velkými verzemi PostgreSQL?<BR>
78 <H2 align="center">Provozní dotazy</H2>
80 <A href="#4.1">4.1</A>) Èím se li¹í binární a normální kurzor?<BR>
81 <A href="#4.2">4.2</A>) Jak získat pouze první øádek dotazu? Náhodný øádek?<BR>
82 <A href="#4.3">4.3</A>) Jak získám seznam tabulek nebo jinak jak jej získá psql?<BR>
83 <A href="#4.4">4.4</A>) Jak odstraním sloupec tabulky, jak zmìním jeho typ?<BR>
84 <A href="#4.5">4.5</A>) Jaká je maximální velikost øádku, tabulky a databáze?<BR>
85 <A href="#4.6">4.6</A>) Kolik diskového prostoru je potøeba k ulo¾ení dat z normálního
86 textového souboru?<BR>
87 <A href="#4.7">4.7</A>) Jak získám seznam vytvoøených tabulek, indexù,
89 <A href="#4.8">4.8</A>) Mùj dotaz je pomalý a nepou¾ívá vytvoøené indexy. Proè?<BR>
90 <A href="#4.9">4.9</A>) Jak zjistím, jak optimizer dotazu vyhodnocuje mùj dotaz?<BR>
91 <A href="#4.10">4.10</A>) Co to je R-tree index?<BR>
92 <A href="#4.11">4.11</A>) Co je Genetic Query Optimizer?<BR>
93 <A href="#4.12">4.12</A>) Jak provést vyhledávání regulárního výrazu case sensitiv,
94 insensitiv? Jak pou¾ít index pro case insensitive vyhledávání?<BR>
95 <A href="#4.13">4.13</A>) Jak v dotazu detekovat, ¾e polo¾ka je NULL?<BR>
96 <A href="#4.14">4.14</A>) Jaké jsou rozdíly mezi rùznými znakovými typy?<BR>
97 <A href="#4.15.1">4.15.1</A>) Jak vytvoøit serial/auto-increment pole?<BR>
98 <A href="#4.15.2">4.15.2</A>) Jak získat hodnotu SERIAL po vlo¾ení øádku?<BR>
99 <A href="#4.15.3">4.15.3</A>) Nepovede currval() a nextval() k rozhození podmínek pøi soubìhu s
100 jinými u¾ivateli?<BR>
101 <A href="#4.15.4">4.15.4</A>) Proè není vygenerované èíslo pou¾ito pøi pøeru¹ení transakce?
102 Proè vznikají díry v èíslování vlastní sekvencí/SERIAL sloupce?<BR>
103 <A href="#4.16">4.16</A>) Co to je OID? Co je to TID?<BR>
104 <A href="#4.17">4.17</A>) Jaký je význam nìkterých výrazù pou¾itých v PostgreSQL?<BR>
105 <A href="#4.18">4.18</A>) Proè jsem získal chybové hlá¹ení "ERROR: Memory exhausted in
106 AllocSetAlloc()"?<BR>
107 <A href="#4.19">4.19</A>) Jak se dozvím, kterou verzi PostgreSQL pou¾ívám?<BR>
108 <A href="#4.20">4.20</A>) Proè operace s velkými objekty konèí "invalid large obj descriptor"?<BR>
109 <A href="#4.21">4.21</A>) Jak vytvoøit sloupec obsahující implicitnì aktuální datum?<BR>
110 <A href="#4.22">4.22</A>) Proè jsou moje vnoøené dotazy pou¾ívající IN tak pomalé?<BR>
111 <A href="#4.23">4.23</A>) Jak provést vnìj¹í spojení (outer join)?<BR>
112 <A href="#4.24">4.24</A>) Jak provést dotaz napøíè nìkolika databázemi?<BR>
113 <A href="#4.25">4.25</A>) Mù¾e funkce vrátit více øádkù nebo sloupcù?<BR>
114 <A href="#4.26">4.26</A>) Proè nelze spolehlivì vytváøet a ru¹it doèasné tabulky
115 v PL/pgSQL funkcích?<BR>
116 <A href="#4.27">4.27</A>) Jaké jsou mo¾nosti replikace databází?<BR>
117 <A href="#4.28">4.28</A>) Jaké jsou mo¾nosti ¹ifrování databází?<BR>
119 <H2 align="center">Roz¹iøování PostgreSQL</H2>
121 <A href="#5.1">5.1</A>) Napsal jsem UDF funkci, PostgreSQL v¹ak konèí dump core?<BR>
122 <A href="#5.2">5.2</A>) Jak mohu pøispìt nìjakými ¹ikovnými datovými typy a funkcemi do
124 <A href="#5.3">5.3</A>) Jak napsat funkci v C vracející ntici?<BR>
125 <A href="#5.4">5.4</A>) Modifikoval jsem zdrojové soubory. Tato zmìna nebyla pøi rekompilaci
126 vzata v potaz. Proè?<BR>
130 <H2 align="center">Obecné otázky</H2>
132 <H4><A name="1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?</H2>
134 <P>PostgreSQL se vyslovuje <I>Post-Gres-Q-L</I>. Zvukový záznam je
135 dostupný na adrese <A href="http://www.postgresql.org/postgresql.mp3"></A>.</P>
137 <P>PostgreSQL vychází z databáze POSTGRES (a stále je nìkdy oznaèován
138 zjednodu¹enì jako Postgres) - výzkumného prototypu <SMALL>DBMS</SMALL> nové
139 generace. Z postgresu byl pøevzat silný datový model a bohatý soubor
140 datových typù a jeho dotazovací jazyk PostQuel byl nahrazen roz¹íøenou
141 podmno¾inou jazyka <SMALL>SQL</SMALL>. PostgreSQL lze pou¾ívat bez omezení a jeho
142 zdrojové kódy jsou volnì k dispozici.</P>
144 <P>PostgreSQL vyvýjí tým vývojáøù pøihlá¹ených do vývojáøské konference
145 PostgreSQL. Souèasným koordinátorem je Marc G. Fournier (<A href=
146 "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>).
147 (viz <A href="#1.6">1.6</A> - jak se zapojit). Tento tým je zodpovìdný za ve¹kerý vývoj
148 PostgreSQL. Jedná se o veøejný projekt, který není øízen ¾ádnou firmou.
149 Pokud se chcete zapojit, pøeètìte si developer's FAQ na adrese <A href=
150 "http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html">http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A></P>
152 <P>Autory první verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
153 portace, testování, ladìní a roz¹iøování kódu se zapojilo mnoho dal¹ích
154 vývojáøù . Pùvodni kód Postgresu, ze kterého PostgreSQL vychází, je
155 výsledkem úsilí mnoha studentù a programátorù pracujících pod vedením
156 prof. Michaela Stonebrakera na University of California v Berkley.</P>
158 <P>Pùvodní název software z Berkley byl Postgres. Po pøidání jazyka <SMALL>SQL</SMALL> se
159 název zmìnil na Postgres95. Koncem roku 1996 byl RDBMS pøejmenován na
162 <H4><A name="1.2">1.2</A>) Jaká je licence na PostgreSQL?</H4>
164 <P>PostgreSQL je pøedmìtem následujících autorských práv:</P>
166 <P>Dílèí copyright (c) 1996-2004, PostgreSQL Global Development Group
167 Dílèí copyright (c) 1994-6, Regents of the University of California</P>
169 <P>Udìluje se oprávnìní k u¾ití, rozmno¾ování, provádìní úprav a
170 roz¹iøování tohoto softwaru a dokumentace k nìmu, pro jakékoli úèely,
171 bez licenèního poplatku a bez písemné licenèní smlouvy, za podmínky, ¾e
172 na v¹ech jeho kopiích je uvedeno oznámení o vý¹e uvedených právech,
173 jako¾ i obsah tohoto a dvou následujících odstavcù.</P>
175 <P>THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ®ÁDNÉM
176 PØÍPADÌ ODPOVÌDNA ®ÁDNÉ TØETÍ OSOBÌ ZA PØÍMOU, NEPØÍMOU, ZVLÁ©TNÍ,
177 NAHODILOU NEBO VÝSLEDNOU ©KODU, VÈETNÌ U©LÉHO ZISKU, ZPùSOBENOU U®ITÍM
178 TOHOTO SOFTWARU A DOKUMENTACE K NÌMU, A TO I V PØÍPADÌ, ®E THE
179 UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MO®NOSTI VZNIKU TAKOVÉ
182 <P>HE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO
183 NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VýROBKU KE SPECIFICKýM
184 ÚÈELùM. NÍ®E UVEDENý SOFTWARE JE POSKYTNUT "JAK STOJÍ A LE®Í" A THE
185 UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO ÚDR®BU, PODPORU,
186 AKTUALIZACI, VYLEP©ENÍ NEBO MODIFIKACI.</P>
188 <P>Vý¹e uvedené je BSD licence, bì¾ná licence otevøeného zdroje. Není zde
189 ¾ádné omezení ohlednì u¾ití kódu zdroje. Jsme s tím spokojeni a nemáme v
190 úmyslu na této skuteènosti cokoli mìnit.</P>
192 <H4><A name="1.3">1.3</A>) Na kterých Unixex lze spustit PostgreSQL?</H4>
194 <P>PostgreSQL bì¾í na v¹ech moderních unixových platformách. V instalaèních
195 instrukcích naleznete aktuální seznam v¹ech platforem na kterých byla
196 testováním ovìøena funkcionalita PostgreSQL.</P>
198 <H4><A name="1.4">1.4</A>) Které ne-unixové platformy jsou podporované?</H4>
200 <P><STRONG>Klient</STRONG></P>
202 <P>Knihovna <I>libpq</I>, psql a nìkteré dal¹í moduly byly pøelo¾eny pro MS
203 Windows. Klienta lze provozovat na MS Windows, ten prostøednictvím
204 TCP/IP protokolu komunikuje se serverem bì¾ícím na nìkteré z
205 podporovaných Unixových platforem. K pøekladu lze pou¾ít <I>win32.mak</I> a
206 Win32 knihovny <I>libpq</I> a <I>psql</I>. K databázi PostgerSQL lze pøistupovat skrze
207 rozhraní <SMALL>ODBC</SMALL>.</P>
209 <P><STRONG>Server</STRONG><P>
211 <P>Server mù¾e být na WindowsNT a Win2k provozován pouze s knihovnou
212 Cygwin, Cygnus Unix/NT porting library. Více <I>pgsql/doc/FAQ_MSWIN</I> v
213 distribuci nebo MS Windows FAQ na adrese
214 <A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>.
216 <P>Na nativním portu pro MS Win NT/2000/XP se pracuje. Dal¹í informace
217 o aktuálním stavu PostgreSQL pro Windows naleznet na adrese
218 <A href="http://techdocs.postgresql.org/guides/Windows">http://techdocs.postgresql.org/guides/Windows</A> a
219 <A href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">
220 http://momjian.postgresql.org/main/writings/pgsql/win32.html</A>.
222 <P>Existující port pro Novell Netware 6 naleznete na
223 <A href="http://forge.novell.com">http://forge.novell.com</A>.</P>
225 <H4><A name="1.5">1.5</A>) Kde mohu získat PostgreSQL?</H4>
227 <P>Primárním anonymním ftp serverem pro PostgreSQL je
228 <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
229 Seznam zrcadel naleznete na na¹ich webových stránkách.</P>
231 <H4><A name="1.6">1.6</A>) Kde mohu získat podporu?</H4>
233 <P>Hlavní mailová konference je: <A href="mailto:pgsql-general@PostgreSQL.org">
234 pgsql-general@PostgreSQL.org</A>. Slou¾í k
235 diskuzím ohlednì PostgreSQL. Pøihlásíte se zasláním mailu obsahující
236 následující øádky v tìle dopisu (nikoliv v záhlaví - subjectu):</P>
241 na adresu <A href="mailto:pgsql-general-request@PostgreSQL.org">
242 pgsql-general-request@PostgreSQL.org</A>.</P>
244 <P>Mù¾ete si vy¾ádat denní pøehled (diggest), který má zhruba 30K dennì
247 <P>Konference psql-bugs je urèena k zasílání zpráv o chybách. Pro
248 pøihlá¹ení po¹lete mail se stejným obsahem jako v pøedchozím pøípadì na
249 adresu <A href="mailto:pgsql-bugs-request@PostgreSQL.org">
250 pgsql-bugs-request@PostgreSQL.org</A>.</P>
252 <P>Do vývojáøské konference se pøihlásíte odesláním dopisu s ji¾ zmiòovaným
253 obsahem na mailto:pgsql-hackers-request@PostgreSQL.org.</P>
255 <P>Seznam dal¹ích konferencí naleznete na stránkách PostgreSQL:</P>
257 <A href="http://www.postgresql.org">http://www.postgresql.org</A>
259 <H4><A name="1.7">1.7</A>) Jaká je poslední verze?</H4>
261 <P>Poslední verze PostgreSQL je 7.4.3. Plánujeme uvolnit významnou verzi
262 ka¾dých ¹est a¾ osm mìsícù.</P>
264 <H4><A name="1.8">1.8</A>) Jaká je dostupná dokumentace?</H4>
266 <P>Rùzné manuály, manuálové stránky a nìkolik malých testovacích pøíkladù
267 jsou souèásti distribuce. Podívejte se do adresáøe <I>/doc</I>. Manuály jsou
268 pøístupné online na <A href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
270 <P>Na adresách <A href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> a
271 <A href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>
272 naleznezte dvì online knihy o PostgreSQL. Seznam dostupné literatury je na
273 <A href="http://techdocs.PostgreSQL.org/techdocs/bookreviews.php">
274 http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>. Soubor
275 technických èlánkù s tematikou PostgresQL najdete na <A href=
276 "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P>
278 <P><I>psql</I> má u¾iteèný metapøíkaz \d slou¾ící k zobrazení informací o typech,
279 operátorech, funkcí, agregaèních funkcí atd.</P>
281 <P>Více dokumentace naleznete na na¹ich webových stránkách.</P>
283 <H4><A name="1.9">1.9</A>) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?</H4>
285 <P>PostgreSQL podporuje roz¹íøenou podmno¾inu <SMALL>SQL-92</SMALL>. V na¹em
286 <A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
287 najdete seznam známých chyb, chybìjících vlastností a seznam vlastností,
288 které budou do systému implementovány v budoucnu (vèetnì priorit).</P>
290 <H4><A name="1.10">1.10</A>) Jak se mohu nauèit SQL?</H4>
292 <P>V knize The PostgreSQL book na <A href=
293 "http://www.PostgreSQL.org/docs/awbook.html">
294 http://www.PostgreSQL.org/docs/awbook.html</A> je vysvìtlen jazyk SQL (vy¹la
295 èesky). Dal¹í dostupnou knihou je <A href=
296 "http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</A>.
297 Kvalitní návody naleznete na <A href=
298 "http://www.intermedia.net/support/sql/sqltut.shtm">
299 http://www.intermedia.net/support/sql/sqltut.shtm</A>, a na
300 <A href="http://sqlcourse.com">http://sqlcourse.com</A>.</P>
302 <P>Dal¹í je Teach Yourself SQL in 21 days, Second Edition na <A href=
303 "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.</P>
305 <P>Mnoho u¾ivatelù doporuèuje <I>The Practical SQL Handbook</I>, Bowman, Judith
306 S., et al., Addison-Wesley. Jiní preferují <I>The Complete Reference SQL</I>,
307 Groff et al., McGraw-Hill.</P>
309 <H4><A name="1.11">1.11</A>) Nemá PostgreSQL problémy s rokem 2000?</H4>
311 <P>Nemá, mù¾eme pracovat s datumy po roce 2000 na¹eho letopoètu i pøed
312 rokem 2000 pø.n.l.</P>
314 <H4><A name="1.12">1.12</A>) Jak se pøipojit k vývojáøskému týmu?</H4>
316 <P>Nejdøíve si stáhnìte nejnovìj¹í zdroje a pøeètìte si vývojáøskou
317 dokumentaci na na¹em webu nebo v distribuci. Pak se pøihla¹te do
318 konferencí <I>pgsql-hackers</I> a <P>pgsql-patches</I>. Kvalitní záplaty posílejte do
321 <P>Právo commit má v <SMALL>CVS</SMALL> archivu asi tøinácti lidí. Ka¾dý z nich poslal
322 mnoho kvalitních záplat, tak¾e tehdej¹í commiters mìli jistotu, ¾e budou
323 pøedkládat jenom kvalitní záplaty a mohli jim pøedìlit vìt¹í práva.</P>
325 <H4><A name="1.13">1.13</A>) Kam podat report o chybì?</H4>
327 <P>Nav¹tivte na¹i PostgreSQL BugTool stránku na <A href=
328 "http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>,
329 která obsahuje návod a smìrnice jak podat chybový report.</P>
331 <P>Ovìøte si na na¹em ftp serveru <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>,
332 zda-li máte nejnovìj¹í verzi PostgreSQL a zda-li k ní neexistují nìjaké záplaty.</P>
334 <H4><A name="1.14">1.14</A>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?</H4>
336 <P>Existuje nìkolik hledisek jak porovnávat software: vlastnosti, výkon,
337 spolehlivost, podpora a cena.</P>
339 <DT><B>Vlastnosti</B></DT>
340 <DD>PostgreSQL má hodnì spoleèných vlastností s velkými komerèními
341 <SMALL>DBMS</SMALL>, napø. transakce, vnoøené dotazy, spou¹tì, pohledy, kontrolu
342 referenèní integrity a sofistikované zamykání. Podporuje nìkteré
343 vlastnosti, které tyto systémy nemají, u¾ivatelem definované typy,
344 dìdiènost, pravidla, MVCC redukující zamykání.</BR></BR></DD>
346 <DT><B>Výkon</B></DT>
347 <DD>Výkonnostnì je na tom PostgreSQL podobnì jako dal¹í komerèní ale
348 i open source databáze, v nìèem je rychlej¹í, jindy pomalej¹í.
349 V porovnání s MySQL a podobnými databázovými systémy je PostgreSQL
350 rychlej¹í pøi víceu¾ivatelském pøístupu, slo¾itìj¹ích dotazech
351 a zatí¾ení read/write dotazy. MySQL je rychlej¹í v jednodu¹¹ích
352 dotazech s malým poètem u¾ivatelù. Navíc, MySQL nepodporuje mnohé
353 vlatnosti zmínìné v sekci <I>vlastnosti</I>. Zapracovali jsme na
354 spolehlivosti a podporovaných vlastnostech, a výkon zvy¹ujeme
355 v ka¾dé verzi. Zajímavou stránku porovnávající PostgreSQL a MySQL
356 naleznete na <A href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A>.
357 Za vývojem MySQL není Open Source komunita, ale komerèní spoleènost,
358 pøesto¾e svoje produkty distribuuje jako Open Source.<BR><BR></DD>
360 <DT><B>Spolehlivost</B></DT>
361 <DD>Jsme si vìdomi, ¾e databáze musí být spolehlivá, jinak je
362 nepou¾itelná. Sna¾íme se zveøejòovat dobøe otestovaný, stabilní
363 kód s minimem chyb. Ka¾dá verze je více ne¾ mìsíc v beta testování,
364 a na¹e historie verzí ukazuje, ¾e mù¾eme nabídnout stabilní, solidní
365 verze, které jsou pøipraveny pro reálné nasazení. V této oblasti
366 jsme srovnatelní s dal¹ími databázemi.</BR></BR></DD>
368 <DT><B>Podpora</B></DT>
369 <DD>Na na¹í mailové konferenci mù¾ete kontaktovat velkou skupinu
370 vývojáøù a u¾ivatelù.problémù. Nemù¾eme garantovat opravu,
371 nicménì komerèní databáze také ne v¾dy nabídnou opravu. Podle
372 ohlasù je na¹e podpora hodnocena lépe ne¾ u jiných <SMALL>DBMS</SMALL> a to
373 díky pøímému kontaktu s vývojáøi, velkou komunitou u¾ivatelù,
374 kvalitními manuály a pøístupným zdrojovým kódem. Pro u¾ivatele,
375 kteøí vy¾adují podporu ke konkrétním pøípadùm, existuje placená
376 podpora (<A href="#1.6">FAQ sekce 1.6</A>).<BR><BR></DD>
379 <DD>PosgreSQL lze volnì pou¾ívat pro nekomerèní i komerèní pou¾ití.
380 Mù¾ete do svých produktù pøidat ná¹ kód bez omezení, respektive
381 v souladu s podmínkami na¹í licenèní smlouvy (v duchu BSD licence).<BR>
385 <H4><A name="1.15">1.15</A>) Jak lze finanènì pomoci PostgreSQL?</H4>
387 <P>PosgreSQL má prvotøídní infrastrukturu od na¹eho zaèátku v roce 1996.
388 Vdìèíme za to Marku Fournierovi, který zalo¾il a spravoval tuto
389 infrastrukturu nìkolik let.</P>
391 <P>Kvalitní infrastruktura je velice dùle¾itá pro ka¾dý open source
392 projekt. Pøedchází nedorozumìním, která velice zdr¾ují pokrok v
395 <P>Tato infrastruktura není laciná. K jejímu zaji¹tìní je tøeba stále
396 hradit urèité mìsíèní a jednorázové èástky. Pokud máte Vy nebo Va¹e
397 spoleènost peníze, které nám mù¾ete darovat, obra»e se na <A href=
398 "http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> a darujte je.</P>
400 <P>Aèkoliv webová stránka zmiòuje PostgreSQL, Inc. vklady jsou urèeny pouze
401 k podpoøe projektu PostgreSQL a nepodporují ¾ádnou existující
402 spoleènost. Pokud to vy¾adujete, mù¾ete poslat kontrolu na na¹i
403 kontaktní adresu.</P>
406 <P>Pokud máte pøíklad úspì¹ného nasazení PostgreSQL, pøihla¹tì se na ná¹
407 advocacy site na <A href="http://advocacy.postgresql.org">http://advocacy.postgresql.org</A>.</P>
409 <H2 align="center">User client dotazy</H2>
411 <H4><A name="2.1">2.1</A>) Kde naleznu <SMALL>ODBC</SMALL> ovladaèe pro PostgreSQL?</H4>
413 <P>Pro PostgreSQL existují dva <SMALL>ODBC</SMALL> ovladaèe - PsqlODBC a OpenLink ODBC.</P>
415 <P>PsqlODBC je ke sta¾ení na <A href=
416 "http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">
417 http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P>
419 <P>OpenLink mù¾ete získat na <A href="http://www.openlinksw.com">http://www.openlinksw.com</A>.
420 Spolupracuje s jejich klientským programovým vybavením a je dostupný pro v¹echny jimi
421 podporované platformy (Win, Mac, Unix, VMS).</P>
423 <P>Tento ovladaè je urèen pro ty, kteøí vy¾adují podporu komerèní kvality,
424 nicménì freeware verze je dostupná a funkèní. Dotazy zasílejte na <A href=
425 "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
427 <H4><A name="2.2">2.2</A>) Jaké nástroje lze pou¾ít pro PostgreSQL a web?</H4>
429 <P>Pìkný úvod do databázových technologií zabezpeèujících chod webových
430 stránek najdete na <A href="http://www.webreview.com">http://www.webreview.com</A>.</P>
432 <P>Pro tvorbu webu existuje excelentní rozhraní PHP, které naleznete na
433 <A href="http://www.php.net">http://www.php.net</A>.</P>
435 <P>Pro slo¾itìj¹í pøípady se èasto pou¾ívá Perl a CGI.pm nebo mod_perl.</P>
437 <H4><A name="2.3">2.3</A>) Existuje grafické rozhraní pro PostgreSQL?</H4>
439 <P>Pro PostgreSQL existuje nìkolik grafických rozhraní: PgAccess
440 (<A href="http://www.php.net">http://www.php.net</A>), PgAdmin III
441 (<A href="http://www.php.net">http://www.php.net</A>), RHDB Admin
442 (<A href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</A>) a Rekall (
443 <A href="http://www.thekompany.com/products/rekall/">http://www.thekompany.com/products/rekall/</A>).
444 Dále je¹tì PhpPgAdmin
445 (<A href="http://phppgadmin.sourceforge.net/">http://phppgadmin.sourceforge.net/</A>) co¾ je rozhraní PostgreSQL
446 zalo¾ené na web technologii.</P>
448 <P>Úplnìj¹í seznam najdete na <A href=
449 "http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>.</P>
451 <H4><A name="2.4">2.4</A>) Které programovací jazyky mají podporu pro PostgreSQL?</H4>
453 <P>Vìt¹ina programovacích jazykù obsahuje rozhraní pro PostgreSQL.
454 Podívejte se do roz¹iøujících modulù Va¹eho programovacího jazyka.</P>
456 <P>Distribuce PostgreSQL obsahuje tato rozhraní:</P>
459 <LI>Embbedded C (ecpg)</LI>
461 <LI>Python (PyGreSQL)</LI>
462 <LI>TCL (libpgtcl)</LI>
464 <P>Dal¹í rozhraní jsou dostupná na <A href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
465 v sekci <I>Drivers/Interfaces</I>.</P>
468 <H2 align="center">Administrativní dotazy</H2>
470 <H4><A name="3.1">3.1</A>) Jak nainstalovat PostgreSQL jinam ne¾ do /usr/local/pgsql?</H4>
472 <P>Pou¾ijte volbu <I>--prefix</I> pøi spu¹tìní configure.</P>
474 <H4><A name="3.2">3.2</A>) Pøi startu postmaster, dostanu chybové hlá¹ení Bad System Call
475 nebo core dump. Proè?</H4>
477 <P>Dùvody mohou být rùzné, ale nejprve zkontrolujte, zda Vá¹ systém
478 podporuje System V extensions. PostgreSQL vy¾aduje v jádøe podporu
479 sdílené pamìti a semaforù.</P>
481 <H4><A name="3.3">3.3</A>) Pøi startu postmastera dostanu hlá¹ení o chybì IpcMemoryCreate. Proè?</H4>
483 <P>Buïto nemáte správnì nakonfigurovanou sdílenou pamì» v jádøe nebo musite
484 zvìt¹it její velikost. Potøebná velikost je závislá na architektuøe a na
485 tom, kolik pamì»ových bufferù a backendù máte povoleno pro postmastera.
486 Pro vìt¹inu systémù s pøeddefinovaným poètem backendù a pamì»ových
487 bufferù je minimum zhruba 1MB. V PostgreSQL Administrator's Guide
488 naleznete podrobnìj¹í informace o sdílené pamìti a semaforech.</P>
490 <H4><A name="3.4">3.4</A>) Pøi startu postmastera dostanu hlá¹ení o chybì IpcSemaphoreCreate.
493 <P>Pokud dostane chybovou zprávu IpcSemaphoreCreate: semget failed (No
494 space left on device), pak va¹e jádro nemá dost volných semaforù.
495 PostgreSQL vy¾aduje jeden semafor pro ka¾dý backend v pozadí. Doèasným
496 øe¹ením je start <I>postmaster</I> s limitem backendù. Pou¾ijte pøepínaè <I>-N</I> s
497 hodnotou men¹í ne¾ 32. Úplným øe¹ením je zvý¹ení hodnot <SMALL>SEMMNS</SMALL>
498 a <SMALL>SEMMNI</SMALL> jadra.</P>
500 <P>Nefunkèní semafory mohou zpùsobit pád bìhem intenzivních databázových
503 <P>Pokud se tato chyba vyskytuje je¹tì nìkde jinde, mo¾ná nemáte vùbec
504 nakonfigurovány semafory ve va¹em jádøe. V PostgreSQL Administrator's
505 Guide najdete podrobnìj¹í popis po¾adavkù na sdílenou pamìt a semafory.</P>
507 <H4><A name="3.5">3.5</A>) Jak povolit nebo zakázat pøístup z jiných stanic?</H4>
509 <P>Pøi výchozím nastavení PostgreSQL odepøe pøístup z jiných stanic ne¾
510 lokální s pou¾itím UDP. Pøístup z jiných strojù není mo¾ný dokud
511 jej nepovolíte nastavením tcpip_socket v postgresql.conf <B>a</B> urèením
512 zpùsobu autentifikace v <I>$PGDATA/pg_hba.conf</I>.</P>
514 <H4><A name="3.6">3.6</A>) Jak ladit databázový stroj na lep¹í výkon?</H4>
516 <P>Urèitì pomohou indexy. Pøíkaz <SMALL>EXPLAIN ANALYZE</SMALL> Vám umo¾ní sledovat
517 jak PostgreSQL interpretuje Vá¹ dotaz a které indexy pou¾ívá.</P>
519 <P>Pøi vìt¹í dávce INSERTù uva¾ujte o náhradì pøíkazem <SMALL>COPY</SMALL>. Ten je mnohem
520 rychlej¹í ne¾li samotný <SMALL>INSERT</SMALL>. Ka¾dý pøíkaz mimo blok <SMALL>BEGIN WORK/COMMIT</SMALL>
521 se provádí ve vlastní transakci. Zva¾te, zda-li by se nedalo nìkolik
522 pøíkazù spojit do jedné transakce. Tím se sní¾í re¾ie na transakce. Pøed
523 provedením rozsáhlých zmìn zru¹te indexy, které po dokonèení zmìn opìt
526 <P>Máte nìkolik dal¹ích mo¾ností, jak zlep¹it výkon. Mù¾ete zakázat <I>fsyn()</I>
527 pøi startu postmastera pøepínaèi <I>-o -F</I>. Tyto pøepínaèe zabrání <I>fsync()</I>,
528 tj. zápisu na disk po ka¾dé transakci.</P>
530 <P>Mù¾ete zvý¹it velikost pamì»ových bufferù pou¾itých backendy tj.
531 parametr <I>-B</I> postmasteru. Pokud ale tato hodnota bude pøíli¹ velká, tak
532 mo¾ná nespustíte postmastera jeliko¾ dosáhnete limitu sdílené pamìti.
533 Ka¾dý buffer má 8K a implicitnì je 64 bufferù.</P>
535 <P>Dále mù¾ete pou¾ít pøepínaè <I>-S</I> k zvý¹ení limitu pamìti pro backendy na
536 doèasné tøídìní. Hodnota je mínìna v kilobytech a výchozí nastavení je
539 <P>Mù¾ete pou¾ít pøíkaz <SMALL>CLUSTER</SMALL>, který uspoøádá fyzicky data v tabulkách
540 podle indexu. Více na manuálových stránkách pøíkazu <SMALL>CLUSTER</SMALL>.</P>
542 <H4><A name="3.7">3.7</A>) Jaké jsou mo¾nosti ladìní?</H4>
544 <P>Máte nìkolik mo¾ností jak se dostat k u¾iteèným stavovým informacím.</P>
546 <P>Zaprvé, pøi pøekladu pou¾ijte pøepínaè <I>--enable-cassert</I>, tím se zapne
547 monitorování a následné zastavení aplikace, kdy¾ se proces v backendu
548 dostane do neoèekávaného stavu.</P>
550 <P>Jak postmaster tak postgres má nìkolik pøepínaèù umo¾òujících ladìní.
551 Postmaster nastartujte tak, abyste si byli jisti, ¾e je standartní
552 výstup a standartní chybový výstup pøesmìrován do souboru logu,
556 ./bin/postmaster > server.log 2>&1 &
558 <P>Tím se vytvoøí log v adresáøi PostgreSQL, Tento soubor obsahuje u¾iteèné
559 informace o problémech a chybách vyskytlých se na serveru. Postmaster má
560 pøepínaè <I>-d</I> urèující, jak podrobné mají být reportované informace, tj.
561 debug level. Pozor, pøi velké hodnotì debug levelu rychle roste velikost
564 <P>Pokud nebì¾í postmaster, mù¾ete spustit backend PostgreSQL z pøíkazové
565 øádky a napsat svùj <SMALL>SQL</SMALL> dotaz pøímo v backendu (doporuèeno <B>pouze</B> pro
566 ladìní). Dotaz je v tomto pøípadì ukonèen novou øádkou, nikoliv
567 støedníkem. Pokud máte aplikaci pøelo¾enou s ladícími symboly, mù¾ete
568 pou¾ít debbuger k monitorování procesu. Pokud není backend spu¹tìn
569 postmasterem, pak nebì¾í ve svém obvyklém prostøedí a tudí¾ nìkteré
570 problémy dané interakcí mezi backendy nemohou být nasimulovány.</P>
572 <P>Pokud bì¾í <I>postmaster</I>, spus»e <I>psql</I> v jednom oknì a pak si zjistìte <SMALL>PID</SMALL>
573 procesu postgres pou¾itého psql. V debuggeru sepøipojte k postgresql
574 <SMALL>PID</SMALL>. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql. Pokud
575 ladíte startup postgresu, pak nastavte PGOPTIONS="-W n" a spus»e <I>psql</I>.
576 Tento pøepínaè zpùsobí pauzu n sekund, tak¾e budete mít èas se pøipojit
577 k procesu, a nastavit breakpointy a pokraèovat v startup posloupnosti.</P>
579 <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>
580 programu postgres (backend).</P>
582 <P>Mù¾ete provést pøeklad s profilací, tak abyste vidìli kolik èasu
583 zabírají jednotlivé funkce. Soubory s profily backendù jsou ulo¾eny v
584 adresáøi <I>pgsql/data/base/dbname</I>. Profil klienta pak v jeho aktuálním
585 adresáøi. Korektní profilace v prostøedí Linux po¾aduje konfiguraci
586 systému s parametrem <I>-DLINUX_PROFILE</I>.</P>
588 <H4><A name="3.8">3.8</A>) Proè dostanu "Sorry, too many clients", kdy¾ se zkou¹ím pøipojit?</H4>
590 <P>Zvy¹te limit postmastera na maximální poèet souèasnì spu¹tìných
593 <P>Výchozí hodnota je 32 backendù. Tuto hodnotu zvý¹íte zastavením a
594 opìtovným spu¹tìním postmastera s parametrem <I>-N</I> nebo úpravou
595 <I>postgresql.conf</I>.</P>
597 <P>Pøi zvý¹ení hodnoty <I>-N</I> nad 32 musíte zvý¹it hodnotu <I>-B</I> nad výchozí 64,
598 <I>-B</I> musí být minimálnì dvakrát vìt¹í, nebo je¹tì lépe více. Pravdìpodobnì
599 zjistíte, ¾e pro velký poèet procesù backendu je nutné zvý¹it nìkteré
600 parametry jádra. Jsou to pøedev¹ím maximální velikost sdílené pamìti
601 <SMALL>SHMMAX</SMALL>, maximální poèet semafórù <SMALL>SEMMNS</SMALL> a <SMALL>SEMMNI</SMALL>, maximální poèet
602 procesù <SMALL>NPROC</SMALL>, maximální poèet procesù u¾ivatele <SMALL>MAXUPRC</SMALL> a maximální
603 poèet otevøených souborù <SMALL>NFILE</SMALL> a <SMALL>NINODE</SMALL>. Dùvod pro omezení maximálního
604 poètu backendù je fakt, ¾e by mohlo dojít k vyèerpání zdrojù Va¹eho
607 <H4><A name="3.9">3.9</A>) K èemu slou¾í adresáø pgsql_tmp?</H4>
609 <P>Tento adresáø obsahuje doèasné soubory vytvoøené exekutorem dotazù.
610 Napøíklad, kdy¾ je nutné tøídìní k zaji¹tìní <SMALL>ORDER BY</SMALL> a tøídìní má vìt¹í
611 nároky na prostor ne¾ povoluje parametr <I>-S</I> backendu, pak je vytvoøen
612 doèasný soubor k ulo¾ení extra údajù.</P>
614 <P>Doèasné soubory jsou obvykle mazány automaticky, ale mù¾e se stát, ¾e
615 bìhem tøídìní server spadne. Zastavení a dal¹í start postmastera zajistí
616 odstranìní souborù s tìchto adresáøù.</P>
618 <H4><A name="3.10">3.10</A>) Proè je po¾adováno dump a obnovení (load) databáze bìhem
619 upgrade mezi velkými verzemi PostgreSQL?</H4>
621 <P>PostgreSQL se minimálnì mìní bìhem malých verzí, tak¾e napø. pøi upgrade
622 z 7.2 na 7.2.1 není nutné dump a load databáze. Ale výynamné verze èasto
623 mìní interní formát systémových tabulek a datových souborù. Tyto zmìny
624 jsou natolik rozsáhlé, ¾e nelze zajistit zpìtnou kompatibilitu pro
625 datové soubory. Dump ulo¾í data v obecném formátu, tak¾e mohou být
626 naètena a pou¾ívána v novém interním formátu.</P>
630 <H2 align="center">Provozní dotazy</H2>
632 <H4><A name="4.1">4.1</A>) Èím se li¹í binární a normální kurzor?</H4>
634 <P>Popis najdete v manuálové stránce <SMALL>DECLARE</SMALL></P>
636 <H4><A name="4.2">4.2</A>) Jak získat pouze první øádek dotazu? Náhodný øádek?</H4>
638 <P>Podívejte se do man. stránky pøíkazu <SMALL>FETCH</SMALL>, nebo pou¾ijte <SMALL>SELECT</SMALL> ...
639 <SMALL>LIMIT</SMALL> ...</P>
641 <P>I kdy¾ potøebujete získat pouze prvních nìkolik øádkù, je tøeba
642 zpracovat v¹echna data, napø. pokud dotaz má <SMALL>ORDER BY</SMALL>. Pokud v¹ak
643 existuje index, který odpovídá <SMALL>ORDER BY</SMALL>, PostgreSQL mù¾e získat
644 pouze prvních n øádkù a ukonèit zpracování dotazu.</P>
646 <P>K získání náhodného øádku pou¾ijte:</P>
653 <H4><A name="4.3">4.3</A>) Jak získám seznam tabulek nebo jinak jak jej získá psql?</H4>
655 <P>Pøíkaz \dt v psql zobrazí seznam tabulek. Úplný seznam pøíkazù <I>psql</I>
656 dostanete pøíkazem \?. Také se mù¾ete podívat do zdrojových kódù <I>psql</I>
657 do souboru <I>pgsql/src/bin/psql/describe.c</I>. Ten obsahuje <SMALL>SQL</SMALL> pøíkazy,
658 které se pou¾ívají v psql metapøíkazech. Dále mù¾ete spustit <I>psql</I>
659 s pøepínaèem <I>-E</I>, který zpùsobí zobrazení ka¾dého dotazu, které
660 zpracování metapøíkazu vyvolá. PostgreSQL nabízí SQLi INFORMATION
661 SCHEMA s tabulkami obsahující informace o databázi.</P>
663 <H4><A name="4.4">4.4</A>) Jak odstraním sloupec tabulky, jak zmìním jeho typ?</H4>
665 <P>Poèínaje verzí 7.3 mù¾ete pou¾ít pøíkaz <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Ve
666 star¹ích verzích mù¾ete pou¾ít následující postup:</P>
669 LOCK TABLE old_table;
670 SELECT ... -- mimo sloupec, který chceme odstranit
671 INTO TABLE new_table;
672 DROP TABLE old_table;
673 ALTER TABLE new_table RENAME TO old_table;
676 <P>Pro zmìnu typu sloupce je tøeba provést:</P>
679 ALTER TABLE tab ADD COLUMN new_col new_data_type;
680 UPDATE tab SET new_col = CAST(old_col AS new_data_type;
681 ALTER TABLE tab DROP COLUMN old_col;
684 Poté proveïte <I>VACUUM FULL tab</I> - uvolníte tím diskový prostor zabraný
685 nyní ji¾ neplatnými øádky.
687 <H4><A name="4.5">4.5</A>) Jaká je maximální velikost øádku, tabulky a databáze?</H4>
689 <P>PostgreSQL má tato omezení:</P>
691 Maximální velikost databáze: neomezena (existují 32TB db)
692 Maximálné velikost tabulky: 32 TB
693 Maximální velikost øádky: 1.6 TB
694 Maximální velikost polo¾ky 1 GB
695 Maximální poèet øádkù v tabulce: neomezeno
696 Maximální poèet sloupcù v tabulce: 250-1600 podle typù
697 Maximální poèet indexù na tabulce: neomezeno
699 <P>Ve skuteènosti nic není neomezeno, limitem bývá v¾dy dostupná disková
700 pamì» nebo velikost operaèní pamìti. Pokud máte nìkterou z tìchto hodnot
701 neobvykle velkou, mù¾e dojít ke sní¾ení výkonu.</P>
703 <P>Maximální velikost tabulky je 32 TB a nevy¾aduje podporu velkých souborù
704 operaèním systémem. Velké tabulky se ukládají do nìkolika 1 GB souborù
705 tak¾e limity souborového systému nejsou podstatné.</P>
707 <P>Maximální velikost tabulky a maximální poèet sloupcù mù¾eme
708 zeètyønásobit nastavením velikosti bloku na 32K.</P>
710 <H4><A name="4.6">4.6</A>) Kolik diskového prostoru je potøeba k ulo¾ení dat z </H4>
711 normálního textového souboru?
713 <P>PostgreSQL vy¾aduje a¾ pìtinásobek diskového prostoru k ulo¾ení dat z
714 textového souboru.</P>
716 <P>Napøíklad, uva¾ujme soubor se 100 tisíci øádky obsahující na ka¾dé øádce
717 celé èíslo a textový popis. Text je v prùmìru dvacet bytù dlouhý.
718 Textový soubor bude 2.8 MB dlouhý. Velikost databáze obsahující
719 odpovídající data bude zhruba 6.4 MB.</P>
721 36 bytù: hlavièka øádku (pøibli¾nì)
722 24 bytù: jedna celoèíselná polo¾ka a jedna textová
723 + 4 byty: ukazatel na stránku k ntici
724 ------------------------------------------------------
727 Velikost datové stránky PostgreSQL je 8KB
730 ---------------------- = 128 øádek na stránku
734 -------------------- = 782 stránek (zaokrouhleno nahoru)
737 782 * 8192 = 6, 406, 144 bytù (6.4 MB)
739 <P>Indexy nemají tak velkou re¾ii, ale mohou být také velké, proto¾e
740 obsahují indexovaná data.</P>
742 <P>Hodnoty <SMALL>NULL</SMALL> jsou ulo¾eny v bitmapách, tak¾e spotøebují jen velmi málo
743 diskového prostoru.</P>
745 <H4><A name="4.7">4.7</A>) Jak získám seznam vytvoøených tabulek, indexù, databází?</H4>
747 <P><I>psql</I> má sadu metapøíkazù k zobrazení tìchto informací. Jejich seznam
748 získáte pøíkazem \?. Dále se mù¾ete podívat na obsah systémových tabulek
749 zaèínajících <I>pg_</I>. Spu¹tìní <I>psql</I> s parametrem <I>-l</I> provede výpis názvù
752 <P>Soubor <I>pgsql/src/tutorial/syscat.source</I> obsahuje <SMALL>SELECT</SMALL>y pøistupující k
753 systémovým tabulkámm.</P>
755 <H4><A name="4.8">4.8</A>) Mùj dotaz je pomalý a nepou¾ívá vytvoøené indexy. Proè?</H4>
757 <P>Ka¾dý dotaz nemusí nutnì pou¾ít existující indexy. Index se pou¾ije
758 tehdy, kdy¾ je tabulka vìt¹í ne¾ urèitá minimální velikost, a dotaz
759 vybírá pouze procentuálnì malou èást øádkù tabulky. To proto, ¾e náhodný
760 pøístup k disku daný ètením indexu mù¾e být pomalej¹í ne¾ lineární ètení
761 tabulky nebo sekvenèní ètení.</P>
763 <P>PostgreSQL rozhoduje o pou¾ití indexù na základì statistiky pøístupù k
764 tabulce. Tyto statistiky se shroma¾ïují pøíkazy <SMALL>VACUUM ANALYZE</SMALL> nebo
765 <SMALL>ANALYZE</SMALL>. Díky statistikám má optimizer informaci o poètu øádek v tabulce
766 a mù¾e lépe rozhodnout o pou¾ití indexù. Statistiky se uplatní pøi
767 urèení optimálního poøadí a metody spojení tabulek. Statistiky by se
768 mìli aktualizovat opakovanì, tak jak se mìní obsah tabulek.</P>
770 <P>Indexy nejsou obyèejnì pou¾ity pro setøídìní nebo spojení tabulek.
771 Sekvenèní zpracování následované explicitním tøídìním je obyèejnì
772 rychlej¹í ne¾ indexní ètení na velké tabulce.</P>
774 <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
775 index pou¾ije, výsledkem je pouze malá èást tabulky. Funkce MAX() a
776 MIN() nepou¾ívají indexy, ale je mo¾né tuté¾ hodnotu získat:
780 ORDER BY col [ DESC ]
783 <P>Pokud si myslíte, ¾e optimizer mylnì zvolil sekvenèní prohledávání
784 tabulky, pou¾ijte pøíkaz <CODE>SET enable_seqscan TO 'off'</CODE> a zkuste zda je
785 indexní prohledávání rychlej¹í.</P>
787 <P>Pøi vyhledávání na základì vzoru jako je napø. operátor <SMALL>LIKE</SMALL> nebo <I>~</I> se
788 indexy pou¾íjí pouze za urèitých skuteèností:</P>
790 <LI>zaèátek hledaného vzoru musí být ukotven k zaèátku, tj.
792 <LI>vzor <SMALL>LIKE</SMALL> nesmí zaèínat <I>%</I></LI>
793 <LI><I>~</I> regulární výraz musí zaèínat <I>^</I></LI>
795 <LI>vzor nesmí zaèínat intervalem, napø. [a-e]</LI>
796 <LI>vyhledávaní, které není Case sensitiv jako je <SMALL>ILIKE</SMALL> nebo <I>~*</I>
797 nepou¾ívá indexy. Mù¾ete ale pou¾ít funkcionální indexy, které jsou
798 posány v sekci <A href="#4.12">4.12</A></LI>
799 <LI>pøi inicializaci databáze (<I>initdb</I>) musí být pou¾ito C locale
800 (pozn. pøekladatele - tudí¾ v na¹ich podmínkách nepou¾itelné,
801 nepracovalo by èeské tøídìní).</LI>
803 <H4><A name="4.9">4.9</A>) Jak zjistím, jak optimizer dotazu vyhodnocuje mùj dotaz?</H4>
805 Podívejte se do manuálové stránky pøíkazu <SMALL>EXPLAIN</SMALL>.
807 <H4><A name="4.10">4.10</A>) Co to je R-tree index?</H4>
809 <P>R-tree index se pou¾ívá pro indexování prostorových dat. Hash index
810 nemù¾e obslou¾it prohledávání oblastí. B-tree index mù¾e øídit vyhledání
811 oblastí v jedné dimenzi. R-tree index mù¾e podporovat hledání v
812 multidimenzionálních datech. Pou¾ijeme-li napøíklad R-tree index na
813 atributy typu <I>point</I>, pak systém mù¾e efektivnì odpovìdìt na dotaz -
814 vyber v¹echny body uvnitø obdélníkù.</P>
816 <P>Pùvodní návrh R-tree je Guttman, A. "R-trees: A Dynamic Index Structure
817 for Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on
818 Mgmt of Data, 45-57</P>
820 <P>Tyto materiály naleznete v Stonebraker's "Readings in Database Systems".</P>
822 <P>Vestavìné R-tree mù¾e slou¾it k indexaci polygonù a oblastí. Teoreticky
823 mù¾eme R-tree pou¾ít i pro více dimenzí (jiné ne¾ 3D). Ve skuteènosti
824 ale takové roz¹íøení R-tree vy¾aduje trochu práce a ve souèastnosti
825 chybí dokumentace jak na to.</P>
827 <H4><A name="4.11">4.11</A>) Co je Genetic Query Optimizer?</H4>
829 <P><SMALL>GEQO</SMALL> modul urychluje optimalizaci dotazù pøi spojování mno¾ství tabulek
830 metodou Genetických algoritmù (GA). To umo¾òuje získat velkého mno¾ství
831 variant spojení pøi neúplném prohledáváním.</P>
833 <H4><A name="4.12">4.12</A>) Jak provést vyhledávání regulárního výrazu case sensitiv,
834 insensitiv? Jak pou¾ít index pro case insensitive vyhledávání?</H4>
836 <P>Operátor <I>~</I> slou¾í k porování s regulárním výrazem, jeho modifikace <I>*~</I>
837 pøedstavuje case insensitive vyhledávání. Jedná se o obdobu <SMALL>LIKE</SMALL> a
838 <SMALL>ILIKE</SMALL>.</P>
840 <P>Pro vyhledávání bez ohledu na velká malá písmena pou¾ijeme:</P>
844 WHERE lower(col) = 'abc';
846 V tomto pøípadì se nepou¾ije standardní index. Nicménì, pou¾ije se
847 funkcionální index, pokud jej vytvoøíte:
849 CREATE INDEX tabindex ON tab (lower(col));
851 <H4><A name="4.13">4.13</A>) Jak v dotazu detekovat, ¾e polo¾ka je NULL?</H4>
853 <P>Urèíte pomocí <SMALL>IS NULL</SMALL> nebo <SMALL>IS NOT NULL</SMALL></P>
855 <H4><A name="4.14">4.14</A>) Jaké jsou rozdíly mezi rùznými znakovými typy?</H4>
857 Typ Interní název Poznámka
858 --------------------------------------------------------------------------
859 VARCHAR(n) varchar omezeno maximální délkou, bez doplnìní mezerami
860 CHAR(n) bpchar øetìzec je doplnìn mezerami do dané délky
861 TEXT text bez horního limitu na délku
862 BYTEA bytea pole bytù (bezpeènì lze ulo¾it i znak NULL)
863 "char" char jeden znak
865 <P>S interními názvy se setkáte v systémovém katalogu a v nìkterých
866 chybových hlá¹eních.</P>
868 <P>První ètyøi uvedené typy jsou tzv. varlena typy (tj. první ètyøi byty na
869 disku nesou údaj o délce, následují samotná data). Proto skuteèný
870 pou¾itý prostor je v¾dy o nìco málo vìt¹í ne¾ deklarovaná délka. Naopak,
871 tyto datové typy jsou komprimovánty <SMALL>TOAST</SMALL>em, tak¾e prostor na disku mù¾e
872 být ni¾¹í ne¾ je oèekáváno.</P>
874 <P><SMALL>VARCHAR(n)</SMALL> je vhodný pro ukládání textù prommìné délky s pevnì
875 stanovenou maximální délkou. <SMALL>TEXT</SMALL> je pro øetìzce bez omezení délky s
876 maximem jeden gigabajt.</P>
878 <P><SMALL>CHAR(n)</SMALL> slou¾í k ukládání øetìzcù stejné délky. <SMALL>CHAR(n)</SMALL> doplní prázdné
879 znaky do specifikované délky, zatímco VARCHAR(n) ulo¾í pouze pøedané
880 znaky. <SMALL>BYTEA</SMALL> je urèeno pro ukládání binárních dat, vèetnì <SMALL>NULL</SMALL> byte.
881 V¹echny zde popsané typy mají podobné výkonnostní charakteristiky.</P>
883 <H4><A name="4.15.1">4.15.1</A>) Jak vytvoøit serial/auto-increment pole?</H4>
885 <P>PostgreSQL podporuje typ <SMALL>SERIAL</SMALL>. Pøi jeho pou¾ití se automaticky vytvoøí
886 SEQUENCE. Napøíklad:</P>
888 CREATE TABLE person (
893 je automaticky pøevedeno do
895 CREATE SEQUENCE person_id_seq;
896 CREATE TABLE person (
897 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
900 CREATE UNIQUE INDEX person_id_key ON person(id);
902 Viz dokumentace <I>create_sequence</I> v manuálových stránkách. Dále mù¾ete
903 pou¾ít unikátní hodnotu <I>OID</I> ka¾dého øádku. Potom ale musíte spou¹tìt
904 <I>pg_dump</I> s pøepínaèem <I>-o</I>, tak aby zùstaly zachovány hodnoty <SMALL>OID</SMALL> (u
905 pøíkazu copy <SMALL>COPY WITH OIDS</SMALL>).
907 <H4><A name="4.15.2">4.15.2</A>) Jak získat hodnotu <SMALL>SERIAL</SMALL> po vlo¾ení øádku?</H4>
909 <P>Jednou z mo¾ností je získat budoucí hodnotu <SMALL>SERIAL</SMALL> funkcí <I>nextval()</I> pøed
910 samotným vlo¾ením a pak ji vlo¾it explicitnì. Napøíklad v jakémsi
913 newid = execute("SELECT nextval('person_id_seq')");
914 execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
916 <P>Mù¾ete pak je¹tì pou¾ít hodnotu newid v dal¹ích dotazech, napø. jako
917 hodnotu cizího klíèe. Název automaticky vytvoøené sekvence je
918 <I>tabulka_sloupec_seq</I>.</P>
920 <P>Alternativnì mù¾ete získat hodnotu poslednì generovou sekvencí funkcí
921 <I>currval()</I> po vlo¾ení:</P>
923 execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
924 new_id = execute("SELECT currval('person_id_seq')");
926 <P>Koneènì mù¾ete pou¾ít <SMALL>OID</SMALL> hodnotu vrácenou pøíkazem <SMALL>INSERT</SMALL>, ale to je
927 pravdìpodobnì nejménì pøenositelné øe¹ení. V Perlu pøi pou¾ití DBI
928 modulu Edmunda Mergleho DBD:Pg oid hodnotu získáme <I>$sth->{pg_oid_status}</I>
929 po ka¾dém <I>$sth->execute()</I>.
931 <H4><A name="4.15.3">4.15.3</A>) Nepovede <I>currval()</I> a <I>nextval()</I> k rozhození
932 podmínek pøi soubìhu s jinými u¾ivateli?</H4>
934 <P>Nikoliv, <I>currval()</I> vrací hodnotu naposledy generovanou ve va¹em
935 backendu, a ta tudí¾ není spoleèná v¹em u¾ivatelùm.</P>
937 <H4><A name="4.15.4">4.15.4</A>) Proè není vygenerované èíslo pou¾ito pøi pøeru¹ení transakce?
938 Proè vznikají díry v èíslování vlastní sekvencí/SERIAL sloupce?</H4>
940 <P>K zaji¹tìní efektivnosti soubìhu, jsou hodnoty posloupnosti, kdy¾ se o
941 nì po¾ádá, a sekvence není zamèena do ukonèení transakce. To zpùsobuje
942 díry v èíslování ze zru¹ených transakcí.</P>
944 <H4><A name="4.16">4.16</A>) Co to je <SMALL>OID</SMALL>? Co je to <SMALL>TID</SMALL>?</H4>
946 <P>Ka¾dý øádek vytvoøený v PostgreSQL získá jedineèné <SMALL>OID</SMALL>. V¹echna <SMALL>OID</SMALL>
947 generovaná bìhem inicializace databáze jsou men¹í ne¾ 16384
948 (include/access/transam.h). V¹echna <SMALL>OID</SMALL> generovaná na po¾adavek
949 u¾ivatele jsou rovna nebo vy¹¹í této hodnotì. Normálnì, v¹echna <SMALL>OID</SMALL> jsou
950 jedineèná nejen uvnitø tabulky nebo databáze, ale v rámci celé instalace
953 <P>PostgreSQL pou¾ívá <SMALL>OID</SMALL> ve svém interním systému tabulek k vytvoøení
954 relací. Tato <SMALL>OID</SMALL> mohou být pou¾ita k identifikaci konkrétního u¾ivatele
955 a pou¾ita v spojení. Pro <SMALL>OID</SMALL> hodnoty je doporuèen typ <SMALL>OID</SMALL>. Nad tímto
956 sloupcem mù¾ete vytvoøit index pro urychlení pøístupu.</P>
958 <P><SMALL>OID</SMALL> jsou dána v¹em øádkùm z centrální oblasti a jsou pou¾ita v ka¾dé
959 databázi. Pokud potøebujete zmìnit <SMALL>OID</SMALL>, nebo chcete zkopírovat tabulku s
960 pùvodními <SMALL>OID</SMALL>, lze pou¾ít:</P>
962 CREATE TABLE new_table(old_oid oid, mycol int);
963 SELECT old_oid, mycol INTO new FROM old;
964 COPY new TO '/tmp/pgtable';
966 COPY new WITH OIDS FROM '/tmp/pgtable';
968 <P><SMALL>OID</SMALL> jsou ulo¾ena jako 4bajtový integer a pøeteèou po ètyøech miliardách.
969 Nebylo hlá¹eno, ¾e by se tak nìkdy stalo, pøesto ale plánujeme odstranit
970 tento limit døív ne¾ se tak stane.</P>
972 <P><SMALL>TID</SMALL> se pou¾ívají i identifikaci fyzických øádkù s hodnotou bloku a
973 offsetu. TIDs se mìní modifikací øádkù (pou¾ívá se jako ukazatel indexu
974 fyzického øádku).</P>
976 <H4><A name="4.17">4.17</A>) Jaký je význam nìkterých výrazù pou¾itých v PostgreSQL?</H4>
978 <P>V nìkterých zdrojových kódech nebo star¹í dokumentaci se mù¾ete setkat s
979 následujícími výrazy, které mají ¹ir¹í význam. Zde je pøíklad nekterých:</P>
981 <LI> tabulka, relace, tøída (table, relation, class)</LI>
982 <LI> øádek, záznam, ntice (row, record, tuple)</LI>
983 <LI> sloupec, polo¾ka, atribut (column, field, attribute)</LI>
984 <LI> vyhledání, výbìr (retrieve, select)</LI>
985 <LI> náhrada, úprava (replace, update)</LI>
986 <LI> pøidání, vkládání (append, insert)</LI>
987 <LI> OID, serial value (OID, serial value)</LI>
988 <LI> portal, kurzor (portal, cursor)</LI>
989 <LI> range variable, jméno tabulky, alias tabulky (range</LI>
990 variable, table name, table alias)</LI>
993 <P>seznam tìchto výrazù mù¾ete nalézt na
994 <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>
996 <H4><A name="4.18">4.18</A>) Proè jsem získal chybové hlá¹ení "ERROR: Memory exhausted in AllocSetAlloc()"?</H4>
998 <P>Pravdìpodobnì do¹lo k vyèerpání virtuální pamì»i na Va¹em systému, nebo
999 jádro má nízký limit pro urèité zdroje. Vyzkou¹ejte pøed startem
1005 <P>Zále¾í na Va¹em shellu, zda budou tyto pøíkazy úspì¹né, mìly by zvý¹it
1006 limit datového segmentu pro Va¹e procesy a umo¾nit tak dokonèení dotazu.
1007 Tyto pøíkazy se aplikují na aktuální proces a v¹echny synovské procesy
1008 vytvoøené po provedení pøíkazu. Pokud máte problémy s SQL klientem
1009 proto¾e backend vrací pøíli¹ mnoho dat, zkuste zvý¹it limity pøed
1010 startem klienta.</P>
1012 <H4><A name="4.19">4.19</A>) Jak se dozvím, kterou verzi PostgreSQL pou¾ívám?</H4>
1014 <P>V psql spus»te <CODE>SELECT version();</CODE></P>
1016 <H4><A name="4.20">4.20</A>) Proè operace s velkými objekty konèí "invalid large obj descriptor"?</H4>
1018 <P>V¹echny operace s velkými objekty - <CODE>lo_open</CODE>, <CODE>lo_close</CODE>, ... musíte
1019 spou¹tìt v transakci, tj. mezi pøíkazy <CODE>BEGIN WORK</CODE> a <CODE>COMMIT</CODE>.</P>
1021 <P>PostgreSQL uvolòuje handle velkých objektù pøi skonèení transakce. Pokud
1022 budete pracovat s velkými objekty mimo transakci, pravdìpodobnì
1023 dostanete toto chybové hlá¹ení, proto¾e handle ji¾ budou neplatné.</P>
1025 Pokud pou¾íváte interface podobné <SMALL>ODBC</SMALL> musíte nastavit <CODE>set
1026 auto_commit off</CODE>.
1028 <H4><A name="4.21">4.21</A>) Jak vytvoøit sloupec obsahující implicitnì aktuální datum?</H4>
1030 <P>Pou¾ijte <I>CURRENT_TIMESTAMP</I>:</P>
1033 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1036 <H4><A name="4.22">4.22</A>) Proè jsou moje vnoøené dotazy pou¾ívající IN tak pomalé?</H4>
1038 <P>Døívìj¹í verze (pøed 7.4) spojovali vnoøené dotazy k vnìj¹ím sekvenèním
1039 ètením výsledku poddotazu pro ka¾dý øádek vnìj¹ího dotazu. Pokud poddotaz
1040 vrátil nìkolik málo øádkù <SMALL>IN</SMALL> bylo rychlé. Pro ostatní pøípady je vhodné
1041 nahradit <SMALL>IN</SMALL> <SMALL>EXISTS</SMALL>:
1045 WHERE col IN (SELECT subcol FROM subtab);
1051 WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
1053 <P>Pro urychlení vytvoøete index pro subcol. </P>
1055 <P>Ve verzi 7.4 a pozdìj¹ích, <SMALL>IN</SMALL> pou¾ívá stejnì sofistikovanou techniku
1056 spojování tabulek jako ostatní dotazy a je preferovaný pøed <SMALL>EXISTS</SMALL>.</P>
1058 <H4><A name="4.23">4.23</A>) Jak provést vnìj¹í spojení (outer join)?</H4>
1060 <P>PostgreSQL podporuje vnìj¹í spojení tabulek standardními SQL pøíkazy.
1061 Zde jsou dva pøíklady:</P>
1064 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1069 FROM t1 LEFT OUTER JOIN USING (col);
1071 <P>Tyto identické dotazy napojí t1.col na t2.col a je¹tì pøidá nepøipojené
1072 øádky z t1 (které nemají obdoby v t2). Pravé spojení (<SMALL>RIGHT JOIN</SMALL>) pøidá
1073 nepøipojené øádky z t2. <SMALL>FULL JOIN</SMALL> vrátí v¹echny øádky, vèetnì
1074 nepøipojených z tbulek t1 a t2. Klíèové slovo <SMALL>OUTER</SMALL> je nepovinné a vá¾e
1075 se na <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> a <SMALL>FULL</SMALL> join. Bì¾né
1076 spojení se nazývá <SMALL>INNER JOIN</SMALL>.</P>
1078 <P>V døívìj¹ích verzích se vnìj¹í spojení tabulek mohlo simulovat pomocí
1079 <SMALL>UNION</SMALL> a <SMALL>NOT IN</SMALL>. Napøíklad pro spojení tabulek tab1 a tab2, je
1080 následující dotaz ekvivalentní k vnìj¹ímu spojení dvou tabulek:</P>
1082 SELECT tab1.col2, tab2.col2
1084 WHERE tab1.col1 = tab2.col1
1086 SELECT tab1.col2, NULL
1088 WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1092 <H4><A name="4.24">4.24</A>) Jak provést dotaz z více databází?</H4>
1094 <P>PostgreSQL nepodporuje dotazy do jiné ne¾ aktuální databáze.</P>
1096 <P><I>contrib/dblink</I> nabízí funkce umo¾òující provedení dotazu v jiné
1097 databázi. Klient si mù¾e otevøít simultální pøipojení do rùzných
1100 <H4><A name="4.25">4.25</A>) Mù¾e funkce vrátit více øádkù nebo sloupcù?</H4>
1102 <P>V PostgreSQL 7.3 mù¾ete jednodu¹e vracet více øádkù nebo sloupcù z
1104 <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.
1106 <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>
1108 <P>Pøelo¾ený kód PL/pgSQL funkce je ulo¾en ve vyrovnávací pamìti, tj.
1109 funkce je pøekládána pouze pøi zmìnì kódu, nikoliv pøed ka¾dým voláním
1110 funkce. Nechtìným vedlej¹ím efektem je, ¾e volání funkce sel¾e, kdy¾ se
1111 funkce odkazuje na doèasnou tabulku, pokud tato tabulka byla od pøekladu
1112 funkce zru¹ena (aèkoliv ji¾ byla znovu vytvoøena a existuje). Jediným
1113 øe¹ením problému je pøístup k doèasné tabulce pomocí <SMALL>EXECUTE</SMALL>, tj.
1114 dynamické provádìní dotazu. Tento pøíkaz zajistí opakovaný pøeklad
1115 dotazu pøi ka¾dém volání funkce.</P>
1117 <H4><A name="4.27">4.27</A>) Jaké jsou mo¾nosti replikace databází?</H4>
1119 <P>Existuje nìkolik dostupných øe¹ení master/slave replikací, tj umo¾òují
1120 modifikace master databáze a slave databázím umo¾òují pouze ètení. Na
1121 konci <A href="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</A> najdete
1122 jejich seznam. Na øe¹ení multi-master replikaci se pracuje na
1123 <A href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>.</P>
1125 <H4><A name="4.28">4.28</A>) Jaké jsou mo¾nosti ¹ifrování databází?</H4>
1127 <LI><I>contrib/pgcrypto</I> obsahuje ¹ifrovací funkce pou¾itelné v SQL
1129 <LI>K ¹ifrování pøenosu dat z klienta na server, musí být server
1130 pøelo¾en s podporou <I>ssl</I> a pøepínaè <I>ssl</I> v <I>postgresql.conf</I> musí být
1131 nastaven na hodnotu true. Klient musí mít vytvoøen záznam hostssl v
1132 <I>pg_hba.conf</I> a také mít povolen re¾im <I>ssl</I>. Lze pou¾ít i jiné
1133 prostøedky, nejen nativní podporu ssl v PostgreSQL, napø. stunel a
1135 <LI>Hesla u¾ivatelù databáze jsou za¹ifrována poèínaje verzí 7.3. Ve
1136 star¹ích verzích toto chování muselo být vynuceno volbou
1137 <I>PASSWORD_ENCRYPTION</I> v <I>postgresql.conf</I></LI>
1138 <LI> Server mù¾e bì¾et na ¹ifrovaném souborovém systému.</LI>
1142 <H2 align="center">Roz¹iøování PostgreSQL</H2>
1144 <H4><A name="5.1">5.1</A>) Napsal jsem UDF funkci, PostgreSQL v¹ak konèí dump core?</H4>
1146 <P>Problém mù¾e být zpùsoben mnoha okolnostmi. Vyzkou¹ejte si svoji funkci
1147 nejdøíve v nìjaké jednoduché aplikaci.</P>
1149 <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>
1151 <P>Po¹lete své roz¹íøení do konference pgsql-hackers, a ono pak mo¾ná
1152 skonèí v podadresáøi contrib.</P>
1154 <H4><A name="5.3">5.3</A>) Jak napsat funkci v C vracející ntici?</H4>
1156 <P>Funkce vracející tabulky jsou podporované PostgreSQL 7.3 a vy¹¹í pro
1157 jazyky C, PL/PgSQL a SQL. Více naleznete v The Programmer's Guide.
1158 Pøíklady tìchto funkcí pro C naleznete v <I>contrib/tablefunc</I>.</P>
1160 <H4><A name="5.4">5.4</A>) Modifikoval jsem zdrojové soubory. Tato zmìna nebyla pøi rekompilaci vzata v potaz. Proè?</H4>
1162 <P><I>Makefile</I> nemá informace o závislostech mezi hlavièkovými soubory. Musíte
1163 provést <I>make clean</I> a pak <I>make</I>. Pokud pou¾íváte <SMALL>gcc</SMALL>, mù¾ete pou¾ít
1164 pøepínaè <I>--enable-depend</I> pøíkazu <I>configure</I> k automatickému øe¹ení
1165 závislostí pøekladaèem.</P>