Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META name="generator" content="HTML Tidy, see www.w3.org">
<META http-equiv="Content-Type" content="text/html; charset="iso-8859-2">
<META http-equiv="Content-language" content="cs">
<META name="description" lang="en" content="Czech translation of FAQ for PostgreSQL">
<META name="description" lang="cs" content="esk peklad FAQ PostgreSQL">
<TITLE>PostgreSQL FAQ</TITLE>
</HEAD>
<BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
alink="#0000ff">
<H1>asto kladen dotazy (FAQ) PostgreSQL</H1>
<P>Posledn aktualizace: Steda 23. ervna 21:10:00 EST 2004</P>
<P>Souasn sprvce: Bruce Momjian (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)</P>
<P>Peloil: Pavel Sthule (<A href=
"mailto:stehule@kix.fsv.cvut.cz">stehule@kix.fsv.cvut.cz</A>)</P>
<P>Aktuln verzi tohoto dokumentu naleznete na adrese: <A href=
"http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.
esk peklad na adrese: <A href="http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html">
http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html</A>.</P>
<P>Odpovdi na dotazy relevantn ke konkrtnm platformm
lze nalzt na adrese: <A href="http://www.PostgreSQL.org/docs/index.html">
http://www.PostgreSQL.org/docs/index.html</A>.</P>
<HR>
<H2 align="center">Obecn otzky</H2>
<A href="#1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?<BR>
<A href="#1.2">1.2</A>) Jak je licence na PostgreSQL?<BR>
<A href="#1.3">1.3</A>) Na kterch Unixex lze spustit PostgreSQL?<BR>
<A href="#1.4">1.4</A>) Kter ne-unixov platformy jsou podporovan?<BR>
<A href="#1.5">1.5</A>) Kde mohu zskat PostgreSQL?<BR>
<A href="#1.6">1.6</A>) Kde mohu zskat podporu?<BR>
<A href="#1.7">1.7</A>) Kde je posledn verze?<BR>
<A href="#1.8">1.8</A>) Jak je dostupn dokumentace?<BR>
<A href="#1.9">1.9</A>) Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?<BR>
<A href="#1.10">1.10</A>) Jak se mohu nauit SQL?<BR>
<A href="#1.11">1.11</A>) Nem PostgreSQL problmy s rokem 2000?<BR>
<A href="#1.12">1.12</A>) Jak se pipojit k vvojskmu tmu?<BR>
<A href="#1.13">1.13</A>) Kam podat report o chyb?<BR>
<A href="#1.14">1.14</A>) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?<BR>
<A href="#1.15">1.15</A>) Jak lze finann pomoci PostgreSQL?<BR>
<H2 align="center">User client dotazy</H2>
<A href="#2.1">2.1</A>) Kde naleznu ODBC ovladae pro PostgreSQL?<BR>
<A href="#2.2">2.2</A>) Jak nstroje lze pout pro PostgreSQL a web?<BR>
<A href="#2.3">2.3</A>) Existuje grafick rozhran pro PostgreSQL?<BR>
<A href="#2.4">2.4</A>) Kter programovac jazyky maj podporu pro PostgreSQL?<BR>
<H2 align="center">Administrativn dotazy</H2>
<A href="#3.1">3.1</A>) Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?<BR>
<A href="#3.2">3.2</A>) Pi startu postmaster, dostanu chybov hlen Bad System Call nebo
core dump. Pro?<BR>
<A href="#3.3">3.3</A>) Pi startu postmastera dostanu hlen o chyb
IpcMemoryCreate. Pro?<BR>
<A href="#3.4">3.4</A>) Pi startu postmastera dostanu hlen o chyb IpcSemaphoreCreate.
Pro?<BR>
<A href="#3.5">3.5</A>) Jak povolit nebo zakzat pstup z jinch stanic?<BR>
<A href="#3.6">3.6</A>) Jak ladit databzov stroj na lep vkon?<BR>
<A href="#3.7">3.7</A>) Jak jsou monosti ladn?<BR>
<A href="#3.8">3.8</A>) Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?<BR>
<A href="#3.9">3.9</A>) K emu slou adres pgsql_tmp?<BR>
<A href="#3.10">3.10</A>) Pro je poadovno dump a obnoven (load) databze bhem upgrade
mezi velkmi verzemi PostgreSQL?<BR>
<H2 align="center">Provozn dotazy</H2>
<A href="#4.1">4.1</A>) m se li binrn a normln kurzor?<BR>
<A href="#4.2">4.2</A>) Jak zskat pouze prvn dek dotazu? Nhodn dek?<BR>
<A href="#4.3">4.3</A>) Jak zskm seznam tabulek nebo jinak jak jej zsk psql?<BR>
<A href="#4.4">4.4</A>) Jak odstranm sloupec tabulky, jak zmnm jeho typ?<BR>
<A href="#4.5">4.5</A>) Jak je maximln velikost dku, tabulky a databze?<BR>
<A href="#4.6">4.6</A>) Kolik diskovho prostoru je poteba k uloen dat z normlnho
textovho souboru?<BR>
<A href="#4.7">4.7</A>) Jak zskm seznam vytvoench tabulek, index,
databz?<BR>
<A href="#4.8">4.8</A>) Mj dotaz je pomal a nepouv vytvoen indexy. Pro?<BR>
<A href="#4.9">4.9</A>) Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?<BR>
<A href="#4.10">4.10</A>) Co to je R-tree index?<BR>
<A href="#4.11">4.11</A>) Co je Genetic Query Optimizer?<BR>
<A href="#4.12">4.12</A>) Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn?<BR>
<A href="#4.13">4.13</A>) Jak v dotazu detekovat, e poloka je NULL?<BR>
<A href="#4.14">4.14</A>) Jak jsou rozdly mezi rznmi znakovmi typy?<BR>
<A href="#4.15.1">4.15.1</A>) Jak vytvoit serial/auto-increment pole?<BR>
<A href="#4.15.2">4.15.2</A>) Jak zskat hodnotu SERIAL po vloen dku?<BR>
<A href="#4.15.3">4.15.3</A>) Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s
jinmi uivateli?<BR>
<A href="#4.15.4">4.15.4</A>) Pro nen vygenerovan slo pouito pi peruen transakce?
Pro vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?<BR>
<A href="#4.16">4.16</A>) Co to je OID? Co je to TID?<BR>
<A href="#4.17">4.17</A>) Jak je vznam nkterch vraz pouitch v PostgreSQL?<BR>
<A href="#4.18">4.18</A>) Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
AllocSetAlloc()"?<BR>
<A href="#4.19">4.19</A>) Jak se dozvm, kterou verzi PostgreSQL pouvm?<BR>
<A href="#4.20">4.20</A>) Pro operace s velkmi objekty kon "invalid large obj descriptor"?<BR>
<A href="#4.21">4.21</A>) Jak vytvoit sloupec obsahujc implicitn aktuln datum?<BR>
<A href="#4.22">4.22</A>) Pro jsou moje vnoen dotazy pouvajc IN tak pomal?<BR>
<A href="#4.23">4.23</A>) Jak provst vnj spojen (outer join)?<BR>
<A href="#4.24">4.24</A>) Jak provst dotaz nap nkolika databzemi?<BR>
<A href="#4.25">4.25</A>) Me funkce vrtit vce dk nebo sloupc?<BR>
<A href="#4.26">4.26</A>) Pro nelze spolehliv vytvet a ruit doasn tabulky
v PL/pgSQL funkcch?<BR>
<A href="#4.27">4.27</A>) Jak jsou monosti replikace databz?<BR>
<A href="#4.28">4.28</A>) Jak jsou monosti ifrovn databz?<BR>
<H2 align="center">Roziovn PostgreSQL</H2>
<A href="#5.1">5.1</A>) Napsal jsem UDF funkci, PostgreSQL vak kon dump core?<BR>
<A href="#5.2">5.2</A>) Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
PostgreSQL?<BR>
<A href="#5.3">5.3</A>) Jak napsat funkci v C vracejc ntici?<BR>
<A href="#5.4">5.4</A>) Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci
vzata v potaz. Pro?<BR>
<HR>
<H2 align="center">Obecn otzky</H2>
<H4><A name="1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?</H2>
<P>PostgreSQL se vyslovuje <I>Post-Gres-Q-L</I>. Zvukov zznam je
dostupn na adrese <A href="http://www.postgresql.org/postgresql.mp3"></A>.</P>
<P>PostgreSQL vychz z databze POSTGRES (a stle je nkdy oznaovn
zjednoduen jako Postgres) - vzkumnho prototypu <SMALL>DBMS</SMALL> nov
generace. Z postgresu byl pevzat siln datov model a bohat soubor
datovch typ a jeho dotazovac jazyk PostQuel byl nahrazen rozenou
podmnoinou jazyka <SMALL>SQL</SMALL>. PostgreSQL lze pouvat bez omezen a jeho
zdrojov kdy jsou voln k dispozici.</P>
<P>PostgreSQL vyvj tm vvoj pihlench do vvojsk konference
PostgreSQL. Souasnm koordintorem je Marc G. Fournier (<A href=
"mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>).
(viz <A href="#1.6">1.6</A> - jak se zapojit). Tento tm je zodpovdn za veker vvoj
PostgreSQL. Jedn se o veejn projekt, kter nen zen dnou firmou.
Pokud se chcete zapojit, pette si developer's FAQ na adrese <A href=
"http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html">http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A></P>
<P>Autory prvn verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
portace, testovn, ladn a roziovn kdu se zapojilo mnoho dalch
vvoj . Pvodni kd Postgresu, ze kterho PostgreSQL vychz, je
vsledkem sil mnoha student a programtor pracujcch pod vedenm
prof. Michaela Stonebrakera na University of California v Berkley.</P>
<P>Pvodn nzev software z Berkley byl Postgres. Po pidn jazyka <SMALL>SQL</SMALL> se
nzev zmnil na Postgres95. Koncem roku 1996 byl RDBMS pejmenovn na
PostgreSQL.</P>
<H4><A name="1.2">1.2</A>) Jak je licence na PostgreSQL?</H4>
<P>PostgreSQL je pedmtem nsledujcch autorskch prv:</P>
<P>Dl Copyright (c) 1996-2005, PostgreSQL Global Development Group
Dl Copyright (c) 1994-6, Regents of the University of California</P>
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
<P>Udluje se oprvnn k uit, rozmnoovn, provdn prav a
roziovn tohoto softwaru a dokumentace k nmu, pro jakkoli ely,
bez licennho poplatku a bez psemn licenn smlouvy, za podmnky, e
na vech jeho kopich je uvedeno oznmen o ve uvedench prvech,
jako i obsah tohoto a dvou nsledujcch odstavc.</P>
<P>THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V DNM
PPAD ODPOVDNA DN TET OSOB ZA PMOU, NEPMOU, ZVLTN,
NAHODILOU NEBO VSLEDNOU KODU, VETN ULHO ZISKU, ZPSOBENOU UITM
TOHOTO SOFTWARU A DOKUMENTACE K NMU, A TO I V PPAD, E THE
UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MONOSTI VZNIKU TAKOV
KODY.</P>
<P>HE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE SPECIFICKM
ELM. NͮE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A LE" A THE
UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO DRBU, PODPORU,
AKTUALIZACI, VYLEPEN NEBO MODIFIKACI.</P>
<P>Ve uveden je BSD licence, bn licence otevenho zdroje. Nen zde
dn omezen ohledn uit kdu zdroje. Jsme s tm spokojeni a nemme v
myslu na tto skutenosti cokoli mnit.</P>
<H4><A name="1.3">1.3</A>) Na kterch Unixex lze spustit PostgreSQL?</H4>
<P>PostgreSQL b na vech modernch unixovch platformch. V instalanch
instrukcch naleznete aktuln seznam vech platforem na kterch byla
testovnm ovena funkcionalita PostgreSQL.</P>
<H4><A name="1.4">1.4</A>) Kter ne-unixov platformy jsou podporovan?</H4>
<P><STRONG>Klient</STRONG></P>
<P>Knihovna <I>libpq</I>, psql a nkter dal moduly byly peloeny pro MS
Windows. Klienta lze provozovat na MS Windows, ten prostednictvm
TCP/IP protokolu komunikuje se serverem bcm na nkter z
podporovanch Unixovch platforem. K pekladu lze pout <I>win32.mak</I> a
Win32 knihovny <I>libpq</I> a <I>psql</I>. K databzi PostgerSQL lze pistupovat skrze
rozhran <SMALL>ODBC</SMALL>.</P>
<P><STRONG>Server</STRONG><P>
<P>Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou
Cygwin, Cygnus Unix/NT porting library. Vce <I>pgsql/doc/FAQ_MSWIN</I> v
distribuci nebo MS Windows FAQ na adrese
<A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>.
<P>Na nativnm portu pro MS Win NT/2000/XP se pracuje. Dal informace
o aktulnm stavu PostgreSQL pro Windows naleznet na adrese
<A href="http://techdocs.postgresql.org/guides/Windows">http://techdocs.postgresql.org/guides/Windows</A> a
<A href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">
http://momjian.postgresql.org/main/writings/pgsql/win32.html</A>.
<P>Existujc port pro Novell Netware 6 naleznete na
<A href="http://forge.novell.com">http://forge.novell.com</A>.</P>
<H4><A name="1.5">1.5</A>) Kde mohu zskat PostgreSQL?</H4>
<P>Primrnm anonymnm ftp serverem pro PostgreSQL je
<A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
Seznam zrcadel naleznete na naich webovch strnkch.</P>
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
<H4><A name="1.6">1.6</A>) Kde mohu zskat podporu?</H4>
<P>Hlavn mailov konference je: <A href="mailto:pgsql-general@PostgreSQL.org">
pgsql-general@PostgreSQL.org</A>. Slou k
diskuzm ohledn PostgreSQL. Pihlste se zaslnm mailu obsahujc
nsledujc dky v tle dopisu (nikoliv v zhlav - subjectu):</P>
<PRE>
subscribe
end
</PRE>
na adresu <A href="mailto:pgsql-general-request@PostgreSQL.org">
pgsql-general-request@PostgreSQL.org</A>.</P>
<P>Mete si vydat denn pehled (diggest), kter m zhruba 30K denn
zprv.</P>
<P>Konference psql-bugs je urena k zasln zprv o chybch. Pro
pihlen polete mail se stejnm obsahem jako v pedchozm ppad na
adresu <A href="mailto:pgsql-bugs-request@PostgreSQL.org">
pgsql-bugs-request@PostgreSQL.org</A>.</P>
<P>Do vvojsk konference se pihlste odeslnm dopisu s ji zmiovanm
obsahem na mailto:pgsql-hackers-request@PostgreSQL.org.</P>
<P>Seznam dalch konferenc naleznete na strnkch PostgreSQL:</P>
<BLOCKQUOTE>
<A href="http://www.postgresql.org">http://www.postgresql.org</A>
</BLOCKQUOTE>
<H4><A name="1.7">1.7</A>) Jak je posledn verze?</H4>
<P>Posledn verze PostgreSQL je 7.4.3. Plnujeme uvolnit vznamnou verzi
kadch est a osm msc.</P>
<H4><A name="1.8">1.8</A>) Jak je dostupn dokumentace?</H4>
<P>Rzn manuly, manulov strnky a nkolik malch testovacch pklad
jsou sousti distribuce. Podvejte se do adrese <I>/doc</I>. Manuly jsou
pstupn online na <A href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
<P>Na adresch <A href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> a
<A href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>
naleznezte dv online knihy o PostgreSQL. Seznam dostupn literatury je na
<A href="http://techdocs.PostgreSQL.org/techdocs/bookreviews.php">
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>. Soubor
technickch lnk s tematikou PostgresQL najdete na <A href=
"http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P>
<P><I>psql</I> m uiten metapkaz \d slouc k zobrazen informac o typech,
opertorech, funkc, agreganch funkc atd.</P>
<P>Vce dokumentace naleznete na naich webovch strnkch.</P>
<H4><A name="1.9">1.9</A>) Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?</H4>
<P>PostgreSQL podporuje rozenou podmnoinu <SMALL>SQL-92</SMALL>. V naem
<A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
najdete seznam znmch chyb, chybjcch vlastnost a seznam vlastnost,
kter budou do systmu implementovny v budoucnu (vetn priorit).</P>
<H4><A name="1.10">1.10</A>) Jak se mohu nauit SQL?</H4>
<P>V knize The PostgreSQL book na <A href=
"http://www.PostgreSQL.org/docs/awbook.html">
http://www.PostgreSQL.org/docs/awbook.html</A> je vysvtlen jazyk SQL (vyla
esky). Dal dostupnou knihou je <A href=
"http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</A>.
Kvalitn nvody naleznete na <A href=
"http://www.intermedia.net/support/sql/sqltut.shtm">
http://www.intermedia.net/support/sql/sqltut.shtm</A>, a na
<A href="http://sqlcourse.com">http://sqlcourse.com</A>.</P>
<P>Dal je Teach Yourself SQL in 21 days, Second Edition na <A href=
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.</P>
<P>Mnoho uivatel doporuuje <I>The Practical SQL Handbook</I>, Bowman, Judith
S., et al., Addison-Wesley. Jin preferuj <I>The Complete Reference SQL</I>,
Groff et al., McGraw-Hill.</P>
<H4><A name="1.11">1.11</A>) Nem PostgreSQL problmy s rokem 2000?</H4>
<P>Nem, meme pracovat s datumy po roce 2000 naeho letopotu i ped
rokem 2000 p.n.l.</P>
<H4><A name="1.12">1.12</A>) Jak se pipojit k vvojskmu tmu?</H4>
<P>Nejdve si sthnte nejnovj zdroje a pette si vvojskou
dokumentaci na naem webu nebo v distribuci. Pak se pihlate do
konferenc <I>pgsql-hackers</I> a <P>pgsql-patches</I>. Kvalitn zplaty poslejte do
pgsql-patches.</P>
<P>Prvo commit m v <SMALL>CVS</SMALL> archivu asi tincti lid. Kad z nich poslal
mnoho kvalitnch zplat, take tehdej commiters mli jistotu, e budou
pedkldat jenom kvalitn zplaty a mohli jim pedlit vt prva.</P>
<H4><A name="1.13">1.13</A>) Kam podat report o chyb?</H4>
<P>Navtivte nai PostgreSQL BugTool strnku na <A href=
"http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>,
kter obsahuje nvod a smrnice jak podat chybov report.</P>
<P>Ovte si na naem ftp serveru <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>,
zda-li mte nejnovj verzi PostgreSQL a zda-li k n neexistuj njak zplaty.</P>
<H4><A name="1.14">1.14</A>) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?</H4>
<P>Existuje nkolik hledisek jak porovnvat software: vlastnosti, vkon,
spolehlivost, podpora a cena.</P>
<DL>
<DT><B>Vlastnosti</B></DT>
<DD>PostgreSQL m hodn spolench vlastnost s velkmi komernmi
<SMALL>DBMS</SMALL>, nap. transakce, vnoen dotazy, spout, pohledy, kontrolu
referenn integrity a sofistikovan zamykn. Podporuje nkter
vlastnosti, kter tyto systmy nemaj, uivatelem definovan typy,
ddinost, pravidla, MVCC redukujc zamykn.</BR></BR></DD>
<DT><B>Vkon</B></DT>
<DD>Vkonnostn je na tom PostgreSQL podobn jako dal komern ale
i open source databze, v nem je rychlej, jindy pomalej.
V porovnn s MySQL a podobnmi databzovmi systmy je PostgreSQL
rychlej pi vceuivatelskm pstupu, sloitjch dotazech
a zaten read/write dotazy. MySQL je rychlej v jednoduch
dotazech s malm potem uivatel. Navc, MySQL nepodporuje mnoh
vlatnosti zmnn v sekci <I>vlastnosti</I>. Zapracovali jsme na
spolehlivosti a podporovanch vlastnostech, a vkon zvyujeme
v kad verzi. Zajmavou strnku porovnvajc PostgreSQL a MySQL
naleznete na <A href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A>.
Za vvojem MySQL nen Open Source komunita, ale komern spolenost,
pestoe svoje produkty distribuuje jako Open Source.<BR><BR></DD>
<DT><B>Spolehlivost</B></DT>
<DD>Jsme si vdomi, e databze mus bt spolehliv, jinak je
nepouiteln. Sname se zveejovat dobe otestovan, stabiln
kd s minimem chyb. Kad verze je vce ne msc v beta testovn,
a nae historie verz ukazuje, e meme nabdnout stabiln, solidn
verze, kter jsou pipraveny pro reln nasazen. V tto oblasti
jsme srovnateln s dalmi databzemi.</BR></BR></DD>
<DT><B>Podpora</B></DT>
<DD>Na na mailov konferenci mete kontaktovat velkou skupinu
vvoj a uivatel.problm. Nememe garantovat opravu,
nicmn komern databze tak ne vdy nabdnou opravu. Podle
ohlas je nae podpora hodnocena lpe ne u jinch <SMALL>DBMS</SMALL> a to
dky pmmu kontaktu s vvoji, velkou komunitou uivatel,
kvalitnmi manuly a pstupnm zdrojovm kdem. Pro uivatele,
kte vyaduj podporu ke konkrtnm ppadm, existuje placen
podpora (<A href="#1.6">FAQ sekce 1.6</A>).<BR><BR></DD>
<DT><B>Cena</B><DT>
<DD>PosgreSQL lze voln pouvat pro nekomern i komern pouit.
Mete do svch produkt pidat n kd bez omezen, respektive
v souladu s podmnkami na licenn smlouvy (v duchu BSD licence).<BR>
<BR></DD>
</DL>
<H4><A name="1.15">1.15</A>) Jak lze finann pomoci PostgreSQL?</H4>
<P>PosgreSQL m prvotdn infrastrukturu od naeho zatku v roce 1996.
Vdme za to Marku Fournierovi, kter zaloil a spravoval tuto
infrastrukturu nkolik let.</P>
<P>Kvalitn infrastruktura je velice dleit pro kad open source
projekt. Pedchz nedorozumnm, kter velice zdruj pokrok v
projektu.</P>
<P>Tato infrastruktura nen lacin. K jejmu zajitn je teba stle
hradit urit msn a jednorzov stky. Pokud mte Vy nebo Vae
spolenost penze, kter nm mete darovat, obrae se na <A href=
"http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> a darujte je.</P>
<P>Akoliv webov strnka zmiuje PostgreSQL, Inc. vklady jsou ureny pouze
k podpoe projektu PostgreSQL a nepodporuj dnou existujc
spolenost. Pokud to vyadujete, mete poslat kontrolu na nai
kontaktn adresu.</P>
<HR>
<P>Pokud mte pklad spnho nasazen PostgreSQL, pihlat se na n
advocacy site na <A href="http://advocacy.postgresql.org">http://advocacy.postgresql.org</A>.</P>
<H4><A name="2.1">2.1</A>) Kde naleznu <SMALL>ODBC</SMALL> ovladae pro PostgreSQL?</H4>
<P>Pro PostgreSQL existuj dva <SMALL>ODBC</SMALL> ovladae - PsqlODBC a OpenLink ODBC.</P>
<P>PsqlODBC je ke staen na <A href=
"http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P>
<P>OpenLink mete zskat na <A href="http://www.openlinksw.com">http://www.openlinksw.com</A>.
Spolupracuje s jejich klientskm programovm vybavenm a je dostupn pro vechny jimi
podporovan platformy (Win, Mac, Unix, VMS).</P>
<P>Tento ovlada je uren pro ty, kte vyaduj podporu komern kvality,
nicmn freeware verze je dostupn a funkn. Dotazy zaslejte na <A href=
"mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
<H4><A name="2.2">2.2</A>) Jak nstroje lze pout pro PostgreSQL a web?</H4>
<P>Pkn vod do databzovch technologi zabezpeujcch chod webovch
strnek najdete na <A href="http://www.webreview.com">http://www.webreview.com</A>.</P>
<P>Pro tvorbu webu existuje excelentn rozhran PHP, kter naleznete na
<A href="http://www.php.net">http://www.php.net</A>.</P>
<P>Pro sloitj ppady se asto pouv Perl a CGI.pm nebo mod_perl.</P>
<H4><A name="2.3">2.3</A>) Existuje grafick rozhran pro PostgreSQL?</H4>
<P>Pro PostgreSQL existuje nkolik grafickch rozhran: PgAccess
(<A href="http://www.php.net">http://www.php.net</A>), PgAdmin III
(<A href="http://www.php.net">http://www.php.net</A>), RHDB Admin
(<A href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</A>) a Rekall (
<A href="http://www.thekompany.com/products/rekall/">http://www.thekompany.com/products/rekall/</A>).
Dle jet PhpPgAdmin
(<A href="http://phppgadmin.sourceforge.net/">http://phppgadmin.sourceforge.net/</A>) co je rozhran PostgreSQL
zaloen na web technologii.</P>
<P>plnj seznam najdete na <A href=
"http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>.</P>
<H4><A name="2.4">2.4</A>) Kter programovac jazyky maj podporu pro PostgreSQL?</H4>
<P>Vtina programovacch jazyk obsahuje rozhran pro PostgreSQL.
Podvejte se do roziujcch modul Vaeho programovacho jazyka.</P>
<P>Distribuce PostgreSQL obsahuje tato rozhran:</P>
<UL>
<LI>C (libpq)</LI>
<LI>Embbedded C (ecpg)</LI>
<LI>Java (jdbc)</LI>
<LI>Python (PyGreSQL)</LI>
<LI>TCL (libpgtcl)</LI>
</UL>
<P>Dal rozhran jsou dostupn na <A href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
v sekci <I>Drivers/Interfaces</I>.</P>
<HR>
<H4><A name="3.1">3.1</A>) Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?</H4>
<H4><A name="3.2">3.2</A>) Pi startu postmaster, dostanu chybov hlen Bad System Call
nebo core dump. Pro?</H4>
<P>Dvody mohou bt rzn, ale nejprve zkontrolujte, zda V systm
podporuje System V extensions. PostgreSQL vyaduje v jde podporu
sdlen pamti a semafor.</P>
<H4><A name="3.3">3.3</A>) Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate. Pro?</H4>
<P>Buto nemte sprvn nakonfigurovanou sdlenou pam v jde nebo musite
zvtit jej velikost. Potebn velikost je zvisl na architektue a na
tom, kolik pamovch buffer a backend mte povoleno pro postmastera.
Pro vtinu systm s peddefinovanm potem backend a pamovch
buffer je minimum zhruba 1MB. V PostgreSQL Administrator's Guide
naleznete podrobnj informace o sdlen pamti a semaforech.</P>
<H4><A name="3.4">3.4</A>) Pi startu postmastera dostanu hlen o chyb IpcSemaphoreCreate.
Pro?</H4>
<P>Pokud dostane chybovou zprvu IpcSemaphoreCreate: semget failed (No
space left on device), pak vae jdro nem dost volnch semafor.
PostgreSQL vyaduje jeden semafor pro kad backend v pozad. Doasnm
eenm je start <I>postmaster</I> s limitem backend. Pouijte pepna <I>-N</I> s
hodnotou men ne 32. plnm eenm je zven hodnot <SMALL>SEMMNS</SMALL>
a <SMALL>SEMMNI</SMALL> jadra.</P>
<P>Nefunkn semafory mohou zpsobit pd bhem intenzivnch databzovch
operac.</P>
<P>Pokud se tato chyba vyskytuje jet nkde jinde, mon nemte vbec
nakonfigurovny semafory ve vaem jde. V PostgreSQL Administrator's
Guide najdete podrobnj popis poadavk na sdlenou pamt a semafory.</P>
<H4><A name="3.5">3.5</A>) Jak povolit nebo zakzat pstup z jinch stanic?</H4>
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
<P>Pi vchozm nastaven PostgreSQL odepe pstup z jinch stanic ne
lokln s pouitm UDP. Pstup z jinch stroj nen mon dokud
jej nepovolte nastavenm tcpip_socket v postgresql.conf <B>a</B> urenm
zpsobu autentifikace v <I>$PGDATA/pg_hba.conf</I>.</P>
<H4><A name="3.6">3.6</A>) Jak ladit databzov stroj na lep vkon?</H4>
<P>Urit pomohou indexy. Pkaz <SMALL>EXPLAIN ANALYZE</SMALL> Vm umon sledovat
jak PostgreSQL interpretuje V dotaz a kter indexy pouv.</P>
<P>Pi vt dvce INSERT uvaujte o nhrad pkazem <SMALL>COPY</SMALL>. Ten je mnohem
rychlej neli samotn <SMALL>INSERT</SMALL>. Kad pkaz mimo blok <SMALL>BEGIN WORK/COMMIT</SMALL>
se provd ve vlastn transakci. Zvate, zda-li by se nedalo nkolik
pkaz spojit do jedn transakce. Tm se sn reie na transakce. Ped
provedenm rozshlch zmn zrute indexy, kter po dokonen zmn opt
vytvote.</P>
<P>Mte nkolik dalch monost, jak zlepit vkon. Mete zakzat <I>fsyn()</I>
pi startu postmastera pepnai <I>-o -F</I>. Tyto pepnae zabrn <I>fsync()</I>,
tj. zpisu na disk po kad transakci.</P>
<P>Mete zvit velikost pamovch buffer pouitch backendy tj.
parametr <I>-B</I> postmasteru. Pokud ale tato hodnota bude pli velk, tak
mon nespustte postmastera jeliko doshnete limitu sdlen pamti.
Kad buffer m 8K a implicitn je 64 buffer.</P>
<P>Dle mete pout pepna <I>-S</I> k zven limitu pamti pro backendy na
doasn tdn. Hodnota je mnna v kilobytech a vchoz nastaven je
512, tj. 512K.</P>
<P>Mete pout pkaz <SMALL>CLUSTER</SMALL>, kter uspod fyzicky data v tabulkch
podle indexu. Vce na manulovch strnkch pkazu <SMALL>CLUSTER</SMALL>.</P>
<H4><A name="3.7">3.7</A>) Jak jsou monosti ladn?</H4>
<P>Mte nkolik monost jak se dostat k uitenm stavovm informacm.</P>
<P>Zaprv, pi pekladu pouijte pepna <I>--enable-cassert</I>, tm se zapne
monitorovn a nsledn zastaven aplikace, kdy se proces v backendu
dostane do neoekvanho stavu.</P>
<P>Jak postmaster tak postgres m nkolik pepna umoujcch ladn.
Postmaster nastartujte tak, abyste si byli jisti, e je standartn
vstup a standartn chybov vstup pesmrovn do souboru logu,
napklad:</P>
<PRE>
cd /usr/local/pgsql
./bin/postmaster > server.log 2>&1 &
</PRE>
<P>Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje uiten
informace o problmech a chybch vyskytlch se na serveru. Postmaster m
pepna <I>-d</I> urujc, jak podrobn maj bt reportovan informace, tj.
debug level. Pozor, pi velk hodnot debug levelu rychle roste velikost
souboru logu.</P>
<P>Pokud neb postmaster, mete spustit backend PostgreSQL z pkazov
dky a napsat svj <SMALL>SQL</SMALL> dotaz pmo v backendu (doporueno <B>pouze</B> pro
ladn). Dotaz je v tomto ppad ukonen novou dkou, nikoliv
stednkem. Pokud mte aplikaci peloenou s ladcmi symboly, mete
pout debbuger k monitorovn procesu. Pokud nen backend sputn
postmasterem, pak neb ve svm obvyklm prosted a tud nkter
problmy dan interakc mezi backendy nemohou bt nasimulovny.</P>
<P>Pokud b <I>postmaster</I>, spuse <I>psql</I> v jednom okn a pak si zjistte <SMALL>PID</SMALL>
procesu postgres pouitho psql. V debuggeru sepipojte k postgresql
<SMALL>PID</SMALL>. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql. Pokud
ladte startup postgresu, pak nastavte PGOPTIONS="-W n" a spuse <I>psql</I>.
Tento pepna zpsob pauzu n sekund, take budete mt as se pipojit
k procesu, a nastavit breakpointy a pokraovat v startup posloupnosti.</P>
<P>Pro ladn a men vkonu mohou bt uiten pepnae <I>-s, -A</I> a <I>-t</I>
programu postgres (backend).</P>
<P>Mete provst peklad s profilac, tak abyste vidli kolik asu
zabraj jednotliv funkce. Soubory s profily backend jsou uloeny v
adresi <I>pgsql/data/base/dbname</I>. Profil klienta pak v jeho aktulnm
adresi. Korektn profilace v prosted Linux poaduje konfiguraci
systmu s parametrem <I>-DLINUX_PROFILE</I>.</P>
<H4><A name="3.8">3.8</A>) Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?</H4>
<P>Zvyte limit postmastera na maximln poet souasn sputnch
backend.</P>
<P>Vchoz hodnota je 32 backend. Tuto hodnotu zvte zastavenm a
optovnm sputnm postmastera s parametrem <I>-N</I> nebo pravou
<I>postgresql.conf</I>.</P>
<P>Pi zven hodnoty <I>-N</I> nad 32 muste zvit hodnotu <I>-B</I> nad vchoz 64,
<I>-B</I> mus bt minimln dvakrt vt, nebo jet lpe vce. Pravdpodobn
zjistte, e pro velk poet proces backendu je nutn zvit nkter
parametry jdra. Jsou to pedevm maximln velikost sdlen pamti
<SMALL>SHMMAX</SMALL>, maximln poet semafr <SMALL>SEMMNS</SMALL> a <SMALL>SEMMNI</SMALL>, maximln poet
proces <SMALL>NPROC</SMALL>, maximln poet proces uivatele <SMALL>MAXUPRC</SMALL> a maximln
poet otevench soubor <SMALL>NFILE</SMALL> a <SMALL>NINODE</SMALL>. Dvod pro omezen maximlnho
potu backend je fakt, e by mohlo dojt k vyerpn zdroj Vaeho
systmu.</P>
<H4><A name="3.9">3.9</A>) K emu slou adres pgsql_tmp?</H4>
<P>Tento adres obsahuje doasn soubory vytvoen exekutorem dotaz.
Napklad, kdy je nutn tdn k zajitn <SMALL>ORDER BY</SMALL> a tdn m vt
nroky na prostor ne povoluje parametr <I>-S</I> backendu, pak je vytvoen
doasn soubor k uloen extra daj.</P>
<P>Doasn soubory jsou obvykle mazny automaticky, ale me se stt, e
bhem tdn server spadne. Zastaven a dal start postmastera zajist
odstrann soubor s tchto adres.</P>
<H4><A name="3.10">3.10</A>) Pro je poadovno dump a obnoven (load) databze bhem
upgrade mezi velkmi verzemi PostgreSQL?</H4>
<P>PostgreSQL se minimln mn bhem malch verz, take nap. pi upgrade
z 7.2 na 7.2.1 nen nutn dump a load databze. Ale vynamn verze asto
mn intern formt systmovch tabulek a datovch soubor. Tyto zmny
jsou natolik rozshl, e nelze zajistit zptnou kompatibilitu pro
datov soubory. Dump ulo data v obecnm formtu, take mohou bt
natena a pouvna v novm internm formtu.</P>
<HR>
<H2 align="center">Provozn dotazy</H2>
<H4><A name="4.1">4.1</A>) m se li binrn a normln kurzor?</H4>
<P>Popis najdete v manulov strnce <SMALL>DECLARE</SMALL></P>
<H4><A name="4.2">4.2</A>) Jak zskat pouze prvn dek dotazu? Nhodn dek?</H4>
<P>Podvejte se do man. strnky pkazu <SMALL>FETCH</SMALL>, nebo pouijte <SMALL>SELECT</SMALL> ...
<SMALL>LIMIT</SMALL> ...</P>
<P>I kdy potebujete zskat pouze prvnch nkolik dk, je teba
zpracovat vechna data, nap. pokud dotaz m <SMALL>ORDER BY</SMALL>. Pokud vak
existuje index, kter odpovd <SMALL>ORDER BY</SMALL>, PostgreSQL me zskat
pouze prvnch n dk a ukonit zpracovn dotazu.</P>
<P>K zskn nhodnho dku pouijte:</P>
<PRE>
SELECT col
FROM tab
ORDER BY random()
LIMIT 1;
</PRE>
<H4><A name="4.3">4.3</A>) Jak zskm seznam tabulek nebo jinak jak jej zsk psql?</H4>
<P>Pkaz \dt v psql zobraz seznam tabulek. pln seznam pkaz <I>psql</I>
dostanete pkazem \?. Tak se mete podvat do zdrojovch kd <I>psql</I>
do souboru <I>pgsql/src/bin/psql/describe.c</I>. Ten obsahuje <SMALL>SQL</SMALL> pkazy,
kter se pouvaj v psql metapkazech. Dle mete spustit <I>psql</I>
s pepnaem <I>-E</I>, kter zpsob zobrazen kadho dotazu, kter
zpracovn metapkazu vyvol. PostgreSQL nabz SQLi INFORMATION
SCHEMA s tabulkami obsahujc informace o databzi.</P>
<H4><A name="4.4">4.4</A>) Jak odstranm sloupec tabulky, jak zmnm jeho typ?</H4>
<P>Ponaje verz 7.3 mete pout pkaz <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Ve
starch verzch mete pout nsledujc postup:</P>
<PRE>
BEGIN;
LOCK TABLE old_table;
SELECT ... -- mimo sloupec, kter chceme odstranit
INTO TABLE new_table;
DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table;
COMMIT;
</PRE>
<P>Pro zmnu typu sloupce je teba provst:</P>
<PRE>
BEGIN;
ALTER TABLE tab ADD COLUMN new_col new_data_type;
UPDATE tab SET new_col = CAST(old_col AS new_data_type;
ALTER TABLE tab DROP COLUMN old_col;
COMMIT;
</PRE>
Pot provete <I>VACUUM FULL tab</I> - uvolnte tm diskov prostor zabran
nyn ji neplatnmi dky.
<H4><A name="4.5">4.5</A>) Jak je maximln velikost dku, tabulky a databze?</H4>
<P>PostgreSQL m tato omezen:</P>
<PRE>
Maximln velikost databze: neomezena (existuj 32TB db)
Maximln velikost tabulky: 32 TB
Maximln velikost dky: 1.6 TB
Maximln velikost poloky 1 GB
Maximln poet dk v tabulce: neomezeno
Maximln poet sloupc v tabulce: 250-1600 podle typ
Maximln poet index na tabulce: neomezeno
</PRE>
<P>Ve skutenosti nic nen neomezeno, limitem bv vdy dostupn diskov
pam nebo velikost operan pamti. Pokud mte nkterou z tchto hodnot
neobvykle velkou, me dojt ke snen vkonu.</P>
<P>Maximln velikost tabulky je 32 TB a nevyaduje podporu velkch soubor
operanm systmem. Velk tabulky se ukldaj do nkolika 1 GB soubor
take limity souborovho systmu nejsou podstatn.</P>
<P>Maximln velikost tabulky a maximln poet sloupc meme
zetynsobit nastavenm velikosti bloku na 32K.</P>
<H4><A name="4.6">4.6</A>) Kolik diskovho prostoru je poteba k uloen dat z </H4>
normlnho textovho souboru?
<P>PostgreSQL vyaduje a ptinsobek diskovho prostoru k uloen dat z
textovho souboru.</P>
<P>Napklad, uvaujme soubor se 100 tisci dky obsahujc na kad dce
cel slo a textov popis. Text je v prmru dvacet byt dlouh.
Textov soubor bude 2.8 MB dlouh. Velikost databze obsahujc
odpovdajc data bude zhruba 6.4 MB.</P>
<PRE>
36 byt: hlavika dku (piblin)
24 byt: jedna celoseln poloka a jedna textov
+ 4 byty: ukazatel na strnku k ntici
------------------------------------------------------
64 byt na dek
Velikost datov strnky PostgreSQL je 8KB
8192 byt na strnce
---------------------- = 128 dek na strnku
64 byt za dek
100000 dek
-------------------- = 782 strnek (zaokrouhleno nahoru)
128 dek na strnce
782 * 8192 = 6, 406, 144 byt (6.4 MB)
</PRE>
<P>Indexy nemaj tak velkou reii, ale mohou bt tak velk, protoe
obsahuj indexovan data.</P>
<P>Hodnoty <SMALL>NULL</SMALL> jsou uloeny v bitmapch, take spotebuj jen velmi mlo
diskovho prostoru.</P>
<H4><A name="4.7">4.7</A>) Jak zskm seznam vytvoench tabulek, index, databz?</H4>
<P><I>psql</I> m sadu metapkaz k zobrazen tchto informac. Jejich seznam
zskte pkazem \?. Dle se mete podvat na obsah systmovch tabulek
zanajcch <I>pg_</I>. Sputn <I>psql</I> s parametrem <I>-l</I> provede vpis nzv
vech databz.</P>
<P>Soubor <I>pgsql/src/tutorial/syscat.source</I> obsahuje <SMALL>SELECT</SMALL>y pistupujc k
systmovm tabulkmm.</P>
<H4><A name="4.8">4.8</A>) Mj dotaz je pomal a nepouv vytvoen indexy. Pro?</H4>
<P>Kad dotaz nemus nutn pout existujc indexy. Index se pouije
tehdy, kdy je tabulka vt ne urit minimln velikost, a dotaz
vybr pouze procentuln malou st dk tabulky. To proto, e nhodn
pstup k disku dan tenm indexu me bt pomalej ne linern ten
tabulky nebo sekvenn ten.</P>
<P>PostgreSQL rozhoduje o pouit index na zklad statistiky pstup k
tabulce. Tyto statistiky se shromauj pkazy <SMALL>VACUUM ANALYZE</SMALL> nebo
<SMALL>ANALYZE</SMALL>. Dky statistikm m optimizer informaci o potu dek v tabulce
a me lpe rozhodnout o pouit index. Statistiky se uplatn pi
uren optimlnho poad a metody spojen tabulek. Statistiky by se
mli aktualizovat opakovan, tak jak se mn obsah tabulek.</P>
<P>Indexy nejsou obyejn pouity pro setdn nebo spojen tabulek.
Sekvenn zpracovn nsledovan explicitnm tdnm je obyejn
rychlej ne indexn ten na velk tabulce.</P>
<P>Jinak je tomu v ppad pouit <SMALL>LIMIT</SMALL> a <SMALL>ORDER BY</SMALL>, pi kterm se vtinou
index pouije, vsledkem je pouze mal st tabulky. Funkce MAX() a
MIN() nepouvaj indexy, ale je mon tut hodnotu zskat:
<PRE>
SELECT col
FROM tab
ORDER BY col [ DESC ]
LIMIT 1;
</PRE>
<P>Pokud si myslte, e optimizer myln zvolil sekvenn prohledvn
tabulky, pouijte pkaz <CODE>SET enable_seqscan TO 'off'</CODE> a zkuste zda je
indexn prohledvn rychlej.</P>
<P>Pi vyhledvn na zklad vzoru jako je nap. opertor <SMALL>LIKE</SMALL> nebo <I>~</I> se
indexy pouj pouze za uritch skutenost:</P>
<UL>
<LI>zatek hledanho vzoru mus bt ukotven k zatku, tj.
<UL>
<LI>vzor <SMALL>LIKE</SMALL> nesm zanat <I>%</I></LI>
<LI><I>~</I> regulrn vraz mus zanat <I>^</I></LI>
</UL>
<LI>vzor nesm zanat intervalem, nap. [a-e]</LI>
<LI>vyhledvan, kter nen Case sensitiv jako je <SMALL>ILIKE</SMALL> nebo <I>~*</I>
nepouv indexy. Mete ale pout funkcionln indexy, kter jsou
posny v sekci <A href="#4.12">4.12</A></LI>
<LI>pi inicializaci databze (<I>initdb</I>) mus bt pouito C locale
(pozn. pekladatele - tud v naich podmnkch nepouiteln,
nepracovalo by esk tdn).</LI>
</UL>
<H4><A name="4.9">4.9</A>) Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?</H4>
Podvejte se do manulov strnky pkazu <SMALL>EXPLAIN</SMALL>.
<H4><A name="4.10">4.10</A>) Co to je R-tree index?</H4>
<P>R-tree index se pouv pro indexovn prostorovch dat. Hash index
neme obslouit prohledvn oblast. B-tree index me dit vyhledn
oblast v jedn dimenzi. R-tree index me podporovat hledn v
multidimenzionlnch datech. Pouijeme-li napklad R-tree index na
atributy typu <I>point</I>, pak systm me efektivn odpovdt na dotaz -
vyber vechny body uvnit obdlnk.</P>
<P>Pvodn nvrh R-tree je Guttman, A. "R-trees: A Dynamic Index Structure
for Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on
Mgmt of Data, 45-57</P>
<P>Tyto materily naleznete v Stonebraker's "Readings in Database Systems".</P>
<P>Vestavn R-tree me slouit k indexaci polygon a oblast. Teoreticky
meme R-tree pout i pro vce dimenz (jin ne 3D). Ve skutenosti
ale takov rozen R-tree vyaduje trochu prce a ve souastnosti
chyb dokumentace jak na to.</P>
<H4><A name="4.11">4.11</A>) Co je Genetic Query Optimizer?</H4>
<P><SMALL>GEQO</SMALL> modul urychluje optimalizaci dotaz pi spojovn mnostv tabulek
metodou Genetickch algoritm (GA). To umouje zskat velkho mnostv
variant spojen pi neplnm prohledvnm.</P>
<H4><A name="4.12">4.12</A>) Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn?</H4>
<P>Opertor <I>~</I> slou k porovn s regulrnm vrazem, jeho modifikace <I>*~</I>
pedstavuje case insensitive vyhledvn. Jedn se o obdobu <SMALL>LIKE</SMALL> a
<SMALL>ILIKE</SMALL>.</P>
<P>Pro vyhledvn bez ohledu na velk mal psmena pouijeme:</P>
<PRE>
SELECT *
FROM tab
WHERE lower(col) = 'abc';
</PRE>
V tomto ppad se nepouije standardn index. Nicmn, pouije se
funkcionln index, pokud jej vytvote:
<PRE>
CREATE INDEX tabindex ON tab (lower(col));
</PRE>
<H4><A name="4.13">4.13</A>) Jak v dotazu detekovat, e poloka je NULL?</H4>
<P>Urte pomoc <SMALL>IS NULL</SMALL> nebo <SMALL>IS NOT NULL</SMALL></P>
<H4><A name="4.14">4.14</A>) Jak jsou rozdly mezi rznmi znakovmi typy?</H4>
<PRE>
Typ Intern nzev Poznmka
--------------------------------------------------------------------------
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
VARCHAR(n) varchar omezeno maximln dlkou, bez doplnn mezerami
CHAR(n) bpchar etzec je doplnn mezerami do dan dlky
TEXT text bez hornho limitu na dlku
BYTEA bytea pole byt (bezpen lze uloit i znak NULL)
"char" char jeden znak
</PRE>
<P>S internmi nzvy se setkte v systmovm katalogu a v nkterch
chybovch hlench.</P>
<P>Prvn tyi uveden typy jsou tzv. varlena typy (tj. prvn tyi byty na
disku nesou daj o dlce, nsleduj samotn data). Proto skuten
pouit prostor je vdy o nco mlo vt ne deklarovan dlka. Naopak,
tyto datov typy jsou komprimovnty <SMALL>TOAST</SMALL>em, take prostor na disku me
bt ni ne je oekvno.</P>
<P><SMALL>VARCHAR(n)</SMALL> je vhodn pro ukldn text prommn dlky s pevn
stanovenou maximln dlkou. <SMALL>TEXT</SMALL> je pro etzce bez omezen dlky s
maximem jeden gigabajt.</P>
<P><SMALL>CHAR(n)</SMALL> slou k ukldn etzc stejn dlky. <SMALL>CHAR(n)</SMALL> dopln przdn
znaky do specifikovan dlky, zatmco VARCHAR(n) ulo pouze pedan
znaky. <SMALL>BYTEA</SMALL> je ureno pro ukldn binrnch dat, vetn <SMALL>NULL</SMALL> byte.
Vechny zde popsan typy maj podobn vkonnostn charakteristiky.</P>
<H4><A name="4.15.1">4.15.1</A>) Jak vytvoit serial/auto-increment pole?</H4>
<P>PostgreSQL podporuje typ <SMALL>SERIAL</SMALL>. Pi jeho pouit se automaticky vytvo
SEQUENCE. Napklad:</P>
<PRE>
CREATE TABLE person (
id SERIAL,
name TEXT
);
</PRE>
je automaticky pevedeno do
<PRE>
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT
);
CREATE UNIQUE INDEX person_id_key ON person(id);
</PRE>
Viz dokumentace <I>create_sequence</I> v manulovch strnkch. Dle mete
pout uniktn hodnotu <I>OID</I> kadho dku. Potom ale muste spoutt
<I>pg_dump</I> s pepnaem <I>-o</I>, tak aby zstaly zachovny hodnoty <SMALL>OID</SMALL> (u
pkazu copy <SMALL>COPY WITH OIDS</SMALL>).
<H4><A name="4.15.2">4.15.2</A>) Jak zskat hodnotu <SMALL>SERIAL</SMALL> po vloen dku?</H4>
<P>Jednou z monost je zskat budouc hodnotu <SMALL>SERIAL</SMALL> funkc <I>nextval()</I> ped
samotnm vloenm a pak ji vloit explicitn. Napklad v jakmsi
pseudojazyku:</P>
<PRE>
newid = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
</PRE>
<P>Mete pak jet pout hodnotu newid v dalch dotazech, nap. jako
hodnotu cizho kle. Nzev automaticky vytvoen sekvence je
<I>tabulka_sloupec_seq</I>.</P>
<P>Alternativn mete zskat hodnotu posledn generovou sekvenc funkc
<I>currval()</I> po vloen:</P>
<PRE>
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");
</PRE>
<P>Konen mete pout <SMALL>OID</SMALL> hodnotu vrcenou pkazem <SMALL>INSERT</SMALL>, ale to je
pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI
modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme <I>$sth->{pg_oid_status}</I>
po kadm <I>$sth->execute()</I>.
<H4><A name="4.15.3">4.15.3</A>) Nepovede <I>currval()</I> a <I>nextval()</I> k rozhozen
podmnek pi soubhu s jinmi uivateli?</H4>
<P>Nikoliv, <I>currval()</I> vrac hodnotu naposledy generovanou ve vaem
backendu, a ta tud nen spolen vem uivatelm.</P>
<H4><A name="4.15.4">4.15.4</A>) Pro nen vygenerovan slo pouito pi peruen transakce?
Pro vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?</H4>
<P>K zajitn efektivnosti soubhu, jsou hodnoty posloupnosti, kdy se o
n pod, a sekvence nen zamena do ukonen transakce. To zpsobuje
dry v slovn ze zruench transakc.</P>
<H4><A name="4.16">4.16</A>) Co to je <SMALL>OID</SMALL>? Co je to <SMALL>TID</SMALL>?</H4>
<P>Kad dek vytvoen v PostgreSQL zsk jedinen <SMALL>OID</SMALL>. Vechna <SMALL>OID</SMALL>
generovan bhem inicializace databze jsou men ne 16384
(include/access/transam.h). Vechna <SMALL>OID</SMALL> generovan na poadavek
uivatele jsou rovna nebo vy tto hodnot. Normln, vechna <SMALL>OID</SMALL> jsou
jedinen nejen uvnit tabulky nebo databze, ale v rmci cel instalace
PostgreSQL</P>
<P>PostgreSQL pouv <SMALL>OID</SMALL> ve svm internm systmu tabulek k vytvoen
relac. Tato <SMALL>OID</SMALL> mohou bt pouita k identifikaci konkrtnho uivatele
a pouita v spojen. Pro <SMALL>OID</SMALL> hodnoty je doporuen typ <SMALL>OID</SMALL>. Nad tmto
sloupcem mete vytvoit index pro urychlen pstupu.</P>
<P><SMALL>OID</SMALL> jsou dna vem dkm z centrln oblasti a jsou pouita v kad
databzi. Pokud potebujete zmnit <SMALL>OID</SMALL>, nebo chcete zkoprovat tabulku s
pvodnmi <SMALL>OID</SMALL>, lze pout:</P>
<PRE>
CREATE TABLE new_table(old_oid oid, mycol int);
SELECT old_oid, mycol INTO new FROM old;
COPY new TO '/tmp/pgtable';
DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable';
</PRE>
<P><SMALL>OID</SMALL> jsou uloena jako 4bajtov integer a peteou po tyech miliardch.
Nebylo hleno, e by se tak nkdy stalo, pesto ale plnujeme odstranit
tento limit dv ne se tak stane.</P>
<P><SMALL>TID</SMALL> se pouvaj i identifikaci fyzickch dk s hodnotou bloku a
offsetu. TIDs se mn modifikac dk (pouv se jako ukazatel indexu
fyzickho dku).</P>
<H4><A name="4.17">4.17</A>) Jak je vznam nkterch vraz pouitch v PostgreSQL?</H4>
<P>V nkterch zdrojovch kdech nebo star dokumentaci se mete setkat s
nsledujcmi vrazy, kter maj ir vznam. Zde je pklad nekterch:</P>
<UL>
<LI> tabulka, relace, tda (table, relation, class)</LI>
<LI> dek, zznam, ntice (row, record, tuple)</LI>
<LI> sloupec, poloka, atribut (column, field, attribute)</LI>
<LI> vyhledn, vbr (retrieve, select)</LI>
<LI> nhrada, prava (replace, update)</LI>
<LI> pidn, vkldn (append, insert)</LI>
<LI> OID, serial value (OID, serial value)</LI>
<LI> portal, kurzor (portal, cursor)</LI>
<LI> range variable, jmno tabulky, alias tabulky (range</LI>
variable, table name, table alias)</LI>
</UL>
<P>seznam tchto vraz mete nalzt na
<A href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A>.</P>
<H4><A name="4.18">4.18</A>) Pro jsem zskal chybov hlen "ERROR: Memory exhausted in AllocSetAlloc()"?</H4>
<P>Pravdpodobn dolo k vyerpn virtuln pami na Vaem systmu, nebo
jdro m nzk limit pro urit zdroje. Vyzkouejte ped startem
posmatera</P>