]> granicus.if.org Git - postgresql/blob - doc/src/FAQ/FAQ_czech.html
59806e7487415e0fdfdffd052f95a983547657b7
[postgresql] / doc / src / FAQ / FAQ_czech.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2 <HTML>
3   <HEAD>
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">
9
10     <TITLE>PostgreSQL FAQ</TITLE>
11   </HEAD>
12
13   <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
14   alink="#0000ff">
15
16
17    <H1>Èasto kladené dotazy (FAQ) PostgreSQL</H1>
18
19    <P>Poslední aktualizace: Støeda 23. èervna 21:10:00 EST 2004</P>
20
21    <P>Souèasný správce: Bruce Momjian (<A href=
22    "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)</P>
23
24    <P>Pøelo¾il: Pavel Stìhule (<A href=
25    "mailto:stehule@kix.fsv.cvut.cz">stehule@kix.fsv.cvut.cz</A>)</P>
26
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>
31
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>
35    <HR>
36    <H2 align="center">Obecné otázky</H2>
37
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>
53
54    <H2 align="center">User client dotazy</H2>
55
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>
60
61    <H2 align="center">Administrativní dotazy</H2>
62  
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
65    core dump. Proè?<BR>
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. 
69    Proè?<BR>
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>
77
78    <H2 align="center">Provozní dotazy</H2>
79
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ù,
88    databází?<BR>
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>
118
119    <H2 align="center">Roz¹iøování PostgreSQL</H2>
120
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
123    PostgreSQL?<BR>
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>
127
128    <HR>
129  
130    <H2 align="center">Obecné otázky</H2>
131
132    <H4><A name="1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?</H2>
133
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>
136
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>
143
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>
151
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>
157
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
160    PostgreSQL.</P>
161
162    <H4><A name="1.2">1.2</A>) Jaká je licence na PostgreSQL?</H4>
163
164    <P>PostgreSQL je pøedmìtem následujících autorských práv:</P>
165
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>
168
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>
174
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É
180    ©KODY.</P>
181
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>
187
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>
191
192    <H4><A name="1.3">1.3</A>) Na kterých Unixex lze spustit PostgreSQL?</H4>
193
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>
197
198    <H4><A name="1.4">1.4</A>) Které ne-unixové platformy jsou podporované?</H4>
199
200    <P><STRONG>Klient</STRONG></P>
201
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>
208
209    <P><STRONG>Server</STRONG><P>
210
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>.
215
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>.
221
222    <P>Existující port pro Novell Netware 6 naleznete na
223    <A href="http://forge.novell.com">http://forge.novell.com</A>.</P>
224
225    <H4><A name="1.5">1.5</A>) Kde mohu získat PostgreSQL?</H4>
226
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>
230
231    <H4><A name="1.6">1.6</A>) Kde mohu získat podporu?</H4>
232
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>
237 <PRE>
238     subscribe
239     end
240 </PRE>
241    na adresu <A href="mailto:pgsql-general-request@PostgreSQL.org">
242    pgsql-general-request@PostgreSQL.org</A>.</P>
243
244    <P>Mù¾ete si vy¾ádat denní pøehled (diggest), který má zhruba 30K dennì
245    zpráv.</P>
246
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>
251
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>
254
255    <P>Seznam dal¹ích konferencí naleznete na stránkách PostgreSQL:</P>
256    <BLOCKQUOTE>
257    <A href="http://www.postgresql.org">http://www.postgresql.org</A>
258    </BLOCKQUOTE>
259    <H4><A name="1.7">1.7</A>) Jaká je poslední verze?</H4>
260
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>
263
264    <H4><A name="1.8">1.8</A>) Jaká je dostupná dokumentace?</H4>
265
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>
269
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>
277
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>
280
281    <P>Více dokumentace naleznete na na¹ich webových stránkách.</P>
282
283    <H4><A name="1.9">1.9</A>) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?</H4>
284
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>
289
290    <H4><A name="1.10">1.10</A>) Jak se mohu nauèit SQL?</H4>
291
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>
301
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>
304
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>
308
309    <H4><A name="1.11">1.11</A>) Nemá PostgreSQL problémy s rokem 2000?</H4>
310
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>
313
314    <H4><A name="1.12">1.12</A>) Jak se pøipojit k vývojáøskému týmu?</H4>
315
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
319    pgsql-patches.</P>
320
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>
324
325    <H4><A name="1.13">1.13</A>) Kam podat report o chybì?</H4>
326
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>
330
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>
333
334    <H4><A name="1.14">1.14</A>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?</H4>
335
336    <P>Existuje nìkolik hledisek jak porovnávat software: vlastnosti, výkon,
337    spolehlivost, podpora a cena.</P>
338    <DL>
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>
345
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>
359
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>
367
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>
377
378    <DT><B>Cena</B><DT>
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>
382         <BR></DD>
383    </DL>
384
385    <H4><A name="1.15">1.15</A>) Jak lze finanènì pomoci PostgreSQL?</H4>
386
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>
390
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
393    projektu.</P>
394
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>
399
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>
404    <HR>
405
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>
408
409    <H2 align="center">User client dotazy</H2>
410
411    <H4><A name="2.1">2.1</A>) Kde naleznu <SMALL>ODBC</SMALL> ovladaèe pro PostgreSQL?</H4>
412
413    <P>Pro PostgreSQL existují dva <SMALL>ODBC</SMALL> ovladaèe - PsqlODBC a OpenLink ODBC.</P>
414
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>
418
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>
422
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>
426
427    <H4><A name="2.2">2.2</A>) Jaké nástroje lze pou¾ít pro PostgreSQL a web?</H4>
428
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>
431
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>
434
435    <P>Pro slo¾itìj¹í pøípady se èasto pou¾ívá Perl a CGI.pm nebo mod_perl.</P>
436
437    <H4><A name="2.3">2.3</A>) Existuje grafické rozhraní pro PostgreSQL?</H4>
438
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>
447
448    <P>Úplnìj¹í seznam najdete na <A href=
449    "http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>.</P>
450
451    <H4><A name="2.4">2.4</A>) Které programovací jazyky mají podporu pro PostgreSQL?</H4>
452
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>
455
456    <P>Distribuce PostgreSQL obsahuje tato rozhraní:</P>
457    <UL>
458       <LI>C (libpq)</LI>
459       <LI>Embbedded C (ecpg)</LI>
460       <LI>Java (jdbc)</LI>
461       <LI>Python (PyGreSQL)</LI>
462       <LI>TCL (libpgtcl)</LI>
463    </UL>
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>
466   <HR>
467
468   <H2 align="center">Administrativní dotazy</H2>
469
470    <H4><A name="3.1">3.1</A>) Jak nainstalovat PostgreSQL jinam ne¾ do /usr/local/pgsql?</H4>
471
472    <P>Pou¾ijte volbu <I>--prefix</I> pøi spu¹tìní configure.</P>
473
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>
476
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>
480
481    <H4><A name="3.3">3.3</A>) Pøi startu postmastera dostanu hlá¹ení o chybì IpcMemoryCreate. Proè?</H4>
482
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>
489
490    <H4><A name="3.4">3.4</A>) Pøi startu postmastera dostanu hlá¹ení o chybì IpcSemaphoreCreate. 
491     Proè?</H4>
492
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>
499
500    <P>Nefunkèní semafory mohou zpùsobit pád bìhem intenzivních databázových
501    operací.</P>
502
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>
506
507    <H4><A name="3.5">3.5</A>) Jak povolit nebo zakázat pøístup z jiných stanic?</H4>
508
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> 
513
514    <H4><A name="3.6">3.6</A>) Jak ladit databázový stroj na lep¹í výkon?</H4>
515
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>
518
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
524    vytvoøte.</P>
525
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>
529
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>
534
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
537    512, tj. 512K.</P>
538
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>
541
542    <H4><A name="3.7">3.7</A>) Jaké jsou mo¾nosti ladìní?</H4>
543
544    <P>Máte nìkolik mo¾ností jak se dostat k u¾iteèným stavovým informacím.</P>
545
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>
549
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,
553    napøíklad:</P>
554 <PRE>
555     cd /usr/local/pgsql
556     ./bin/postmaster > server.log 2>&1 &
557 </PRE>
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
562    souboru logu.</P>
563
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>
571
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>
578
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>
581
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>
587
588    <H4><A name="3.8">3.8</A>) Proè dostanu "Sorry, too many clients", kdy¾ se zkou¹ím pøipojit?</H4>
589
590    <P>Zvy¹te limit postmastera na maximální poèet souèasnì spu¹tìných
591    backendù.</P>
592
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>
596
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
605    systému.</P>
606
607    <H4><A name="3.9">3.9</A>) K èemu slou¾í adresáø pgsql_tmp?</H4>
608
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>
613
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>
617
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>
620
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>
627
628    <HR>
629
630    <H2 align="center">Provozní dotazy</H2>
631
632    <H4><A name="4.1">4.1</A>) Èím se li¹í binární a normální kurzor?</H4>
633
634    <P>Popis najdete v manuálové stránce <SMALL>DECLARE</SMALL></P>
635
636    <H4><A name="4.2">4.2</A>) Jak získat pouze první øádek dotazu? Náhodný øádek?</H4>
637
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>
640
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>
645
646    <P>K získání náhodného øádku pou¾ijte:</P>
647 <PRE>
648     SELECT col 
649     FROM tab
650     ORDER BY random() 
651     LIMIT 1;
652 </PRE>
653    <H4><A name="4.3">4.3</A>) Jak získám seznam tabulek nebo jinak jak jej získá psql?</H4>
654
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>
662
663    <H4><A name="4.4">4.4</A>) Jak odstraním sloupec tabulky, jak zmìním jeho typ?</H4>
664
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>
667 <PRE>
668     BEGIN;
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;
674     COMMIT;
675 </PRE>
676    <P>Pro zmìnu typu sloupce je tøeba provést:</P>
677 <PRE>
678     BEGIN;
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;
682     COMMIT;
683 </PRE>
684    Poté proveïte <I>VACUUM FULL tab</I> - uvolníte tím diskový prostor zabraný
685    nyní ji¾ neplatnými øádky.
686
687    <H4><A name="4.5">4.5</A>) Jaká je maximální velikost øádku, tabulky a databáze?</H4>
688
689    <P>PostgreSQL má tato omezení:</P>
690 <PRE>
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
698 </PRE>
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>
702
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>
706
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>
709
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?
712
713    <P>PostgreSQL vy¾aduje a¾ pìtinásobek diskového prostoru k ulo¾ení dat z
714    textového souboru.</P>
715
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>
720 <PRE>
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    ------------------------------------------------------
725     64 bytù na øádek
726
727    Velikost datové stránky PostgreSQL je 8KB
728
729     8192 bytù na stránce
730     ---------------------- = 128 øádek na stránku
731       64 bytù za øádek
732
733     100000 øádek
734     -------------------- = 782 stránek (zaokrouhleno nahoru)
735        128 øádek na stránce
736
737     782 * 8192 = 6, 406, 144 bytù (6.4 MB)
738 </PRE>
739    <P>Indexy nemají tak velkou re¾ii, ale mohou být také velké, proto¾e
740    obsahují indexovaná data.</P>
741
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>
744
745    <H4><A name="4.7">4.7</A>) Jak získám seznam vytvoøených tabulek, indexù, databází?</H4>
746
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ù
750    v¹ech databází.</P>
751
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>
754
755    <H4><A name="4.8">4.8</A>) Mùj dotaz je pomalý a nepou¾ívá vytvoøené indexy. Proè?</H4>
756
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>
762
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>
769
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>
773
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:
777 <PRE>
778     SELECT col 
779     FROM tab
780     ORDER BY col [ DESC ] 
781     LIMIT 1;
782 </PRE>
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>
786
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>
789    <UL>
790     <LI>zaèátek hledaného vzoru musí být ukotven k zaèátku, tj.
791       <UL>
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>
794       </UL>
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>
802    </UL>
803    <H4><A name="4.9">4.9</A>) Jak zjistím, jak optimizer dotazu vyhodnocuje mùj dotaz?</H4>
804
805    Podívejte se do manuálové stránky pøíkazu <SMALL>EXPLAIN</SMALL>.
806
807    <H4><A name="4.10">4.10</A>) Co to je R-tree index?</H4>
808
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>
815    
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>
819
820    <P>Tyto materiály naleznete v Stonebraker's "Readings in Database Systems".</P>
821
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>
826
827    <H4><A name="4.11">4.11</A>) Co je Genetic Query Optimizer?</H4>
828
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>
832
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>
835
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>
839
840    <P>Pro vyhledávání bez ohledu na velká malá písmena pou¾ijeme:</P>
841 <PRE>
842     SELECT * 
843     FROM tab
844     WHERE lower(col) = 'abc';
845 </PRE>
846    V tomto pøípadì se nepou¾ije standardní index. Nicménì, pou¾ije se
847    funkcionální index, pokud jej vytvoøíte:
848 <PRE>
849     CREATE INDEX tabindex ON tab (lower(col));
850 </PRE>
851    <H4><A name="4.13">4.13</A>) Jak v dotazu detekovat, ¾e polo¾ka je NULL?</H4>
852
853    <P>Urèíte pomocí <SMALL>IS NULL</SMALL> nebo <SMALL>IS NOT NULL</SMALL></P>
854
855  <H4><A name="4.14">4.14</A>) Jaké jsou rozdíly mezi rùznými znakovými typy?</H4>
856 <PRE>
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
864 </PRE>
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>
867
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>
873
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>
877
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>
882
883    <H4><A name="4.15.1">4.15.1</A>) Jak vytvoøit serial/auto-increment pole?</H4>
884
885    <P>PostgreSQL podporuje typ <SMALL>SERIAL</SMALL>. Pøi jeho pou¾ití se automaticky vytvoøí
886    SEQUENCE. Napøíklad:</P>
887 <PRE>
888     CREATE TABLE person (
889         id   SERIAL,
890         name TEXT
891     );
892 </PRE>
893    je automaticky pøevedeno do
894 <PRE>
895     CREATE SEQUENCE person_id_seq;
896     CREATE TABLE person (
897         id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
898         name TEXT
899     );
900     CREATE UNIQUE INDEX person_id_key ON person(id);
901 </PRE>
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>).
906
907    <H4><A name="4.15.2">4.15.2</A>) Jak získat hodnotu <SMALL>SERIAL</SMALL> po vlo¾ení øádku?</H4>
908
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
911    pseudojazyku:</P>
912 <PRE>
913     newid = execute("SELECT nextval('person_id_seq')");
914     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
915 </PRE>
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>
919
920    <P>Alternativnì mù¾ete získat hodnotu poslednì generovou sekvencí funkcí
921    <I>currval()</I> po vlo¾ení:</P>
922 <PRE>
923     execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
924     new_id = execute("SELECT currval('person_id_seq')");
925 </PRE>
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>.
930
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>
933
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>
936
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>
939
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>
943
944    <H4><A name="4.16">4.16</A>) Co to je <SMALL>OID</SMALL>? Co je to <SMALL>TID</SMALL>?</H4>
945
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
951    PostgreSQL</P>
952
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>
957
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>
961 <PRE>
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';
965         DELETE FROM new;
966         COPY new WITH OIDS FROM '/tmp/pgtable';
967 </PRE>
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>
971     
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>
975
976    <H4><A name="4.17">4.17</A>) Jaký je význam nìkterých výrazù pou¾itých v PostgreSQL?</H4>
977
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>
980    <UL>
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>
991    </UL>
992
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>
995
996    <H4><A name="4.18">4.18</A>) Proè jsem získal chybové hlá¹ení "ERROR: Memory exhausted in AllocSetAlloc()"?</H4>
997
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
1000    posmatera</P>
1001 <PRE>
1002     ulimit -d 262144
1003     limit datasize 256m
1004 </PRE>
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>
1011
1012    <H4><A name="4.19">4.19</A>) Jak se dozvím, kterou verzi PostgreSQL pou¾ívám?</H4>
1013
1014    <P>V psql spus»te <CODE>SELECT version();</CODE></P>
1015
1016    <H4><A name="4.20">4.20</A>) Proè operace s velkými objekty konèí "invalid large obj descriptor"?</H4>
1017
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>
1020
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>
1024
1025    Pokud pou¾íváte interface podobné <SMALL>ODBC</SMALL> musíte nastavit <CODE>set 
1026    auto_commit off</CODE>.
1027
1028    <H4><A name="4.21">4.21</A>) Jak vytvoøit sloupec obsahující implicitnì aktuální datum?</H4>
1029
1030    <P>Pou¾ijte <I>CURRENT_TIMESTAMP</I>:</P>
1031 <PRE>
1032 <CODE>
1033 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1034 </CODE>
1035 </PRE>
1036    <H4><A name="4.22">4.22</A>) Proè jsou moje vnoøené dotazy pou¾ívající IN tak pomalé?</H4>
1037
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>:
1042 <PRE>
1043     SELECT * 
1044     FROM tab
1045     WHERE col IN (SELECT subcol FROM subtab);
1046 </PRE>
1047   na:
1048 <PRE>
1049    SELECT * 
1050    FROM tab
1051    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
1052 </PRE>
1053    <P>Pro urychlení vytvoøete index pro subcol. </P>
1054
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>
1057
1058    <H4><A name="4.23">4.23</A>) Jak provést vnìj¹í spojení (outer join)?</H4>
1059
1060    <P>PostgreSQL podporuje vnìj¹í spojení tabulek standardními SQL pøíkazy.
1061    Zde jsou dva pøíklady:</P>
1062 <PRE>
1063     SELECT * 
1064     FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1065 </PRE>
1066    nebo
1067 <PRE>
1068     SELECT * 
1069     FROM t1 LEFT OUTER JOIN USING (col);
1070 </PRE>
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>
1077
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>
1081 <PRE>
1082     SELECT tab1.col2, tab2.col2 
1083     FROM tab1, tab2
1084     WHERE tab1.col1 = tab2.col1
1085     UNION ALL
1086     SELECT tab1.col2, NULL 
1087     FROM tab1
1088     WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1089     ORDER BY col1;
1090 </PRE>
1091
1092    <H4><A name="4.24">4.24</A>) Jak provést dotaz z více databází?</H4>
1093
1094    <P>PostgreSQL nepodporuje dotazy do jiné ne¾ aktuální databáze.</P>
1095
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
1098    db bez omezení.</P>
1099
1100    <H4><A name="4.25">4.25</A>) Mù¾e funkce vrátit více øádkù nebo sloupcù?</H4>
1101
1102    <P>V PostgreSQL 7.3 mù¾ete jednodu¹e vracet více øádkù nebo sloupcù z
1103    funkce, viz:
1104    <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.
1105
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>
1107
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>
1116
1117    <H4><A name="4.27">4.27</A>) Jaké jsou mo¾nosti replikace databází?</H4>
1118
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>
1124
1125    <H4><A name="4.28">4.28</A>) Jaké jsou mo¾nosti ¹ifrování databází?</H4>
1126      <UL>
1127      <LI><I>contrib/pgcrypto</I> obsahuje ¹ifrovací funkce pou¾itelné v SQL
1128        dotazech.</LI>
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
1134        ssh.</LI>
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>
1139     </UL>
1140    <HR>
1141
1142    <H2 align="center">Roz¹iøování PostgreSQL</H2>
1143
1144    <H4><A name="5.1">5.1</A>) Napsal jsem UDF funkci, PostgreSQL v¹ak konèí dump core?</H4>
1145  
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>
1148
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>
1150
1151    <P>Po¹lete své roz¹íøení do konference pgsql-hackers, a ono pak mo¾ná
1152    skonèí v podadresáøi contrib.</P>
1153
1154    <H4><A name="5.3">5.3</A>) Jak napsat funkci v C vracející ntici?</H4>
1155
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>
1159
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>
1161
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>
1166  </BODY>
1167 </HTML>