]> granicus.if.org Git - postgresql/blob - doc/FAQ_czech
Un-break plperl for non-set case.
[postgresql] / doc / FAQ_czech
1
2                      Èasto kladené dotazy (FAQ) PostgreSQL
3                                        
4    Poslední aktualizace: Støeda 23. èervna 21:10:00 EST 2004
5    
6    Souèasný správce: Bruce Momjian (pgman@candle.pha.pa.us)
7    
8    Pøelo¾il: Pavel Stìhule (stehule@kix.fsv.cvut.cz)
9    
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.
13    
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      _________________________________________________________________
17    
18                                Obecné otázky
19                                       
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?
35    
36                              User client dotazy
37                                       
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?
42    
43                            Administrativní dotazy
44                                       
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
47    nebo core dump. Proè?
48    3.3) Pøi startu postmastera dostanu hlá¹ení o chybì IpcMemoryCreate.
49    Proè?
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?
59    
60                               Provozní dotazy
61                                       
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
68    textového souboru?
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
87    AllocSetAlloc()"?
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
90    descriptor"?
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
97    PL/pgSQL funkcích?
98    4.27) Jaké jsou mo¾nosti replikace databází?
99    4.28) Jaké jsou mo¾nosti ¹ifrování databází?
100    
101                            Roz¹iøování PostgreSQL
102                                       
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
105    PostgreSQL?
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      _________________________________________________________________
110    
111                                Obecné otázky
112                                       
113     1.1) Co je PostgreSQL? Jak se vyslovuje?
114     
115    PostgreSQL se vyslovuje Post-Gres-Q-L. Zvukový záznam je dostupný na
116    adrese .
117    
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.
124    
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
132    
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
138    Berkley.
139    
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
142    na PostgreSQL.
143    
144     1.2) Jaká je licence na PostgreSQL?
145     
146    PostgreSQL je pøedmìtem následujících autorských práv:
147    
148    Dílèí Copyright (c) 1996-2005, PostgreSQL Global Development Group
149    Dílèí Copyright (c) 1994-6, Regents of the University of California
150    
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ù.
156    
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É
162    ©KODY.
163    
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.
169    
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.
173    
174     1.3) Na kterých Unixex lze spustit PostgreSQL?
175     
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.
179    
180     1.4) Které ne-unixové platformy jsou podporované?
181     
182    Klient
183    
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
189    skrze rozhraní ODBC.
190    
191    Server
192    
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.
197    
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.
202    
203    Existující port pro Novell Netware 6 naleznete na
204    http://forge.novell.com.
205    
206     1.5) Kde mohu získat PostgreSQL?
207     
208    Primárním anonymním ftp serverem pro PostgreSQL je
209    ftp://ftp.PostgreSQL.org/pub. Seznam zrcadel naleznete na na¹ich
210    webových stránkách.
211    
212     1.6) Kde mohu získat podporu?
213     
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):
217     subscribe
218     end
219
220    na adresu pgsql-general-request@PostgreSQL.org.
221    
222    Mù¾ete si vy¾ádat denní pøehled (diggest), který má zhruba 30K dennì
223    zpráv.
224    
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.
228    
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.
231    
232    Seznam dal¹ích konferencí naleznete na stránkách PostgreSQL:
233    
234      http://www.postgresql.org
235      
236     1.7) Jaká je poslední verze?
237     
238    Poslední verze PostgreSQL je 7.4.3. Plánujeme uvolnit významnou verzi
239    ka¾dých ¹est a¾ osm mìsícù.
240    
241     1.8) Jaká je dostupná dokumentace?
242     
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.
246    
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/.
253    
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.
256    
257    Více dokumentace naleznete na na¹ich webových stránkách.
258    
259     1.9) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?
260     
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ì
264    priorit).
265    
266     1.10) Jak se mohu nauèit SQL?
267     
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.
274    
275    Dal¹í je Teach Yourself SQL in 21 days, Second Edition na
276    http://members.tripod.com/er4ebus/sql/index.htm.
277    
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.
281    
282     1.11) Nemá PostgreSQL problémy s rokem 2000?
283     
284    Nemá, mù¾eme pracovat s datumy po roce 2000 na¹eho letopoètu i pøed
285    rokem 2000 pø.n.l.
286    
287     1.12) Jak se pøipojit k vývojáøskému týmu?
288     
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
292    do pgsql-patches.
293    
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¹í
297    práva.
298    
299     1.13) Kam podat report o chybì?
300     
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.
304    
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é
307    záplaty.
308    
309     1.14) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
310     
311    Existuje nìkolik hledisek jak porovnávat software: vlastnosti, výkon,
312    spolehlivost, podpora a cena.
313    
314    Vlastnosti
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
320           redukující zamykání.
321           
322    Výkon
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.
336           
337    Spolehlivost
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.
344           
345    Podpora
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).
354           
355    Cena
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
359           licence).
360           
361     1.15) Jak lze finanènì pomoci PostgreSQL?
362     
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.
366    
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
369    projektu.
370    
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.
375    
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
379    kontaktní adresu.
380      _________________________________________________________________
381    
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.
384    
385                              User client dotazy
386                                       
387     2.1) Kde naleznu ODBC ovladaèe pro PostgreSQL?
388     
389    Pro PostgreSQL existují dva ODBC ovladaèe - PsqlODBC a OpenLink ODBC.
390    
391    PsqlODBC je ke sta¾ení na
392    http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
393    
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).
397    
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.
401    
402     2.2) Jaké nástroje lze pou¾ít pro PostgreSQL a web?
403     
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.
406    
407    Pro tvorbu webu existuje excelentní rozhraní PHP, které naleznete na
408    http://www.php.net.
409    
410    Pro slo¾itìj¹í pøípady se èasto pou¾ívá Perl a CGI.pm nebo mod_perl.
411    
412     2.3) Existuje grafické rozhraní pro PostgreSQL?
413     
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.
420    
421    Úplnìj¹í seznam najdete na
422    http://techdocs.postgresql.org/guides/GUITools.
423    
424     2.4) Které programovací jazyky mají podporu pro PostgreSQL?
425     
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.
428    
429    Distribuce PostgreSQL obsahuje tato rozhraní:
430      * C (libpq)
431      * Embbedded C (ecpg)
432      * Java (jdbc)
433      * Python (PyGreSQL)
434      * TCL (libpgtcl)
435        
436    Dal¹í rozhraní jsou dostupná na http://gborg.postgresql.org v sekci
437    Drivers/Interfaces.
438      _________________________________________________________________
439    
440                            Administrativní dotazy
441                                       
442     3.1) Jak nainstalovat PostgreSQL jinam ne¾ do /usr/local/pgsql?
443     
444    Pou¾ijte volbu --prefix pøi spu¹tìní configure.
445    
446     3.2) Pøi startu postmaster, dostanu chybové hlá¹ení Bad System Call nebo
447     core dump. Proè?
448     
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ù.
452    
453     3.3) Pøi startu postmastera dostanu hlá¹ení o chybì IpcMemoryCreate. Proè?
454     
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
461    a semaforech.
462    
463     3.4) Pøi startu postmastera dostanu hlá¹ení o chybì IpcSemaphoreCreate.
464     Proè?
465     
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
471    SEMMNI jadra.
472    
473    Nefunkèní semafory mohou zpùsobit pád bìhem intenzivních databázových
474    operací.
475    
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
479    semafory.
480    
481     3.5) Jak povolit nebo zakázat pøístup z jiných stanic?
482     
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.
487    
488     3.6) Jak ladit databázový stroj na lep¹í výkon?
489     
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á.
492    
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.
499    
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.
503    
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ù.
508    
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
511    512, tj. 512K.
512    
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.
515    
516     3.7) Jaké jsou mo¾nosti ladìní?
517     
518    Máte nìkolik mo¾ností jak se dostat k u¾iteèným stavovým informacím.
519    
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.
523    
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,
527    napøíklad:
528     cd /usr/local/pgsql
529     ./bin/postmaster > server.log 2>&1 &
530
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.
536    
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.
544    
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
551    posloupnosti.
552    
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).
555    
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.
561    
562     3.8) Proè dostanu "Sorry, too many clients", kdy¾ se zkou¹ím pøipojit?
563     
564    Zvy¹te limit postmastera na maximální poèet souèasnì spu¹tìných
565    backendù.
566    
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
569    postgresql.conf.
570    
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.
580    
581     3.9) K èemu slou¾í adresáø pgsql_tmp?
582     
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ù.
587    
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áøù.
591    
592     3.10) Proè je po¾adováno dump a obnovení (load) databáze bìhem upgrade mezi
593     velkými verzemi PostgreSQL?
594     
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      _________________________________________________________________
602    
603                               Provozní dotazy
604                                       
605     4.1) Èím se li¹í binární a normální kurzor?
606     
607    Popis najdete v manuálové stránce DECLARE
608    
609     4.2) Jak získat pouze první øádek dotazu? Náhodný øádek?
610     
611    Podívejte se do man. stránky pøíkazu FETCH, nebo pou¾ijte SELECT ...
612    LIMIT ...
613    
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.
618    
619    K získání náhodného øádku pou¾ijte:
620     SELECT col
621     FROM tab
622     ORDER BY random()
623     LIMIT 1;
624
625     4.3) Jak získám seznam tabulek nebo jinak jak jej získá psql?
626     
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.
634    
635     4.4) Jak odstraním sloupec tabulky, jak zmìním jeho typ?
636     
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:
639     BEGIN;
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;
645     COMMIT;
646
647    Pro zmìnu typu sloupce je tøeba provést:
648     BEGIN;
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;
652     COMMIT;
653
654    Poté proveïte VACUUM FULL tab - uvolníte tím diskový prostor zabraný
655    nyní ji¾ neplatnými øádky.
656    
657     4.5) Jaká je maximální velikost øádku, tabulky a databáze?
658     
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
667
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.
671    
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é.
675    
676    Maximální velikost tabulky a maximální poèet sloupcù mù¾eme
677    zeètyønásobit nastavením velikosti bloku na 32K.
678    
679     4.6) Kolik diskového prostoru je potøeba k ulo¾ení dat z
680     
681    normálního textového souboru?
682    
683    PostgreSQL vy¾aduje a¾ pìtinásobek diskového prostoru k ulo¾ení dat z
684    textového souboru.
685    
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    ------------------------------------------------------
694     64 bytù na øádek
695
696    Velikost datové stránky PostgreSQL je 8KB
697
698     8192 bytù na stránce
699     ---------------------- = 128 øádek na stránku
700       64 bytù za øádek
701
702     100000 øádek
703     -------------------- = 782 stránek (zaokrouhleno nahoru)
704        128 øádek na stránce
705
706     782 * 8192 = 6, 406, 144 bytù (6.4 MB)
707
708    Indexy nemají tak velkou re¾ii, ale mohou být také velké, proto¾e
709    obsahují indexovaná data.
710    
711    Hodnoty NULL jsou ulo¾eny v bitmapách, tak¾e spotøebují jen velmi málo
712    diskového prostoru.
713    
714     4.7) Jak získám seznam vytvoøených tabulek, indexù, databází?
715     
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í.
720    
721    Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy pøistupující
722    k systémovým tabulkámm.
723    
724     4.8) Mùj dotaz je pomalý a nepou¾ívá vytvoøené indexy. Proè?
725     
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í.
731    
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.
738    
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.
742    
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:
746     SELECT col
747     FROM tab
748     ORDER BY col [ DESC ]
749     LIMIT 1;
750
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¹í.
754    
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í).
767        
768     4.9) Jak zjistím, jak optimizer dotazu vyhodnocuje mùj dotaz?
769     
770    Podívejte se do manuálové stránky pøíkazu EXPLAIN.
771    
772     4.10) Co to je R-tree index?
773     
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ù.
780    
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
784    
785    Tyto materiály naleznete v Stonebraker's "Readings in Database
786    Systems".
787    
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.
792    
793     4.11) Co je Genetic Query Optimizer?
794     
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.
798    
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í?
801     
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
804    ILIKE.
805    
806    Pro vyhledávání bez ohledu na velká malá písmena pou¾ijeme:
807     SELECT *
808     FROM tab
809     WHERE lower(col) = 'abc';
810
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));
814
815     4.13) Jak v dotazu detekovat, ¾e polo¾ka je NULL?
816     
817    Urèíte pomocí IS NULL nebo IS NOT NULL
818    
819     4.14) Jaké jsou rozdíly mezi rùznými znakovými typy?
820     
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
828
829    S interními názvy se setkáte v systémovém katalogu a v nìkterých
830    chybových hlá¹eních.
831    
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.
837    
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.
841    
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.
846    
847     4.15.1) Jak vytvoøit serial/auto-increment pole?
848     
849    PostgreSQL podporuje typ SERIAL. Pøi jeho pou¾ití se automaticky
850    vytvoøí SEQUENCE. Napøíklad:
851     CREATE TABLE person (
852         id   SERIAL,
853         name TEXT
854     );
855
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'),
860         name TEXT
861     );
862     CREATE UNIQUE INDEX person_id_key ON person(id);
863
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).
868    
869     4.15.2) Jak získat hodnotu SERIAL po vlo¾ení øádku?
870     
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
873    pseudojazyku:
874     newid = execute("SELECT nextval('person_id_seq')");
875     execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
876
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
879    tabulka_sloupec_seq.
880    
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')");
885
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().
890    
891     4.15.3) Nepovede currval() a nextval() k rozhození podmínek pøi soubìhu s
892     jinými u¾ivateli?
893     
894    Nikoliv, currval() vrací hodnotu naposledy generovanou ve va¹em
895    backendu, a ta tudí¾ není spoleèná v¹em u¾ivatelùm.
896    
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?
899     
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í.
903    
904     4.16) Co to je OID? Co je to TID?
905     
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é
911    instalace PostgreSQL
912    
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.
917    
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';
924         DELETE FROM new;
925         COPY new WITH OIDS FROM '/tmp/pgtable';
926
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.
930    
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).
934    
935     4.17) Jaký je význam nìkterých výrazù pou¾itých v PostgreSQL?
936     
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
939    nekterých:
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)
950        
951    seznam tìchto výrazù mù¾ete nalézt na
952    http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
953    /glossary.html.
954    
955     4.18) Proè jsem získal chybové hlá¹ení "ERROR: Memory exhausted in
956     AllocSetAlloc()"?
957     
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
960    posmatera
961     ulimit -d 262144
962     limit datasize 256m
963
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.
970    
971     4.19) Jak se dozvím, kterou verzi PostgreSQL pou¾ívám?
972     
973    V psql spus»te SELECT version();
974    
975     4.20) Proè operace s velkými objekty konèí "invalid large obj descriptor"?
976     
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.
979    
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
984    off.
985    
986     4.21) Jak vytvoøit sloupec obsahující implicitnì aktuální datum?
987     
988    Pou¾ijte CURRENT_TIMESTAMP:
989
990 CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
991
992     4.22) Proè jsou moje vnoøené dotazy pou¾ívající IN tak pomalé?
993     
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:
998     SELECT *
999     FROM tab
1000     WHERE col IN (SELECT subcol FROM subtab);
1001
1002    na:
1003    SELECT *
1004    FROM tab
1005    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
1006
1007    Pro urychlení vytvoøete index pro subcol.
1008    
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.
1011    
1012     4.23) Jak provést vnìj¹í spojení (outer join)?
1013     
1014    PostgreSQL podporuje vnìj¹í spojení tabulek standardními SQL pøíkazy.
1015    Zde jsou dva pøíklady:
1016     SELECT *
1017     FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1018
1019    nebo
1020     SELECT *
1021     FROM t1 LEFT OUTER JOIN USING (col);
1022
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
1028    nazývá INNER JOIN.
1029    
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
1034     FROM tab1, tab2
1035     WHERE tab1.col1 = tab2.col1
1036     UNION ALL
1037     SELECT tab1.col2, NULL
1038     FROM tab1
1039     WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1040     ORDER BY col1;
1041
1042     4.24) Jak provést dotaz z více databází?
1043     
1044    PostgreSQL nepodporuje dotazy do jiné ne¾ aktuální databáze.
1045    
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
1048    bez omezení.
1049    
1050     4.25) Mù¾e funkce vrátit více øádkù nebo sloupcù?
1051     
1052    V PostgreSQL 7.3 mù¾ete jednodu¹e vracet více øádkù nebo sloupcù z
1053    funkce, viz:
1054    http://techdocs.postgresql.org/guides/SetReturningFunctions.
1055    
1056     4.26) Proè nelze spolehlivì vytváøet a ru¹it doèasné tabulky v PL/pgSQL
1057     funkcích?
1058     
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.
1067    
1068     4.27) Jaké jsou mo¾nosti replikace databází?
1069     
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.
1075    
1076     4.28) Jaké jsou mo¾nosti ¹ifrování databází?
1077     
1078      * contrib/pgcrypto obsahuje ¹ifrovací funkce pou¾itelné v SQL
1079        dotazech.
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
1085        ssh.
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      _________________________________________________________________
1091    
1092                            Roz¹iøování PostgreSQL
1093                                       
1094     5.1) Napsal jsem UDF funkci, PostgreSQL v¹ak konèí dump core?
1095     
1096    Problém mù¾e být zpùsoben mnoha okolnostmi. Vyzkou¹ejte si svoji
1097    funkci nejdøíve v nìjaké jednoduché aplikaci.
1098    
1099     5.2) Jak mohu pøispìt nìjakými ¹ikovnými datovými typy a funkcemi do
1100     PostgreSQL?
1101     
1102    Po¹lete své roz¹íøení do konference pgsql-hackers, a ono pak mo¾ná
1103    skonèí v podadresáøi contrib.
1104    
1105     5.3) Jak napsat funkci v C vracející ntici?
1106     
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.
1110    
1111     5.4) Modifikoval jsem zdrojové soubory. Tato zmìna nebyla pøi rekompilaci
1112     vzata v potaz. Proè?
1113     
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.