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