Make GROUP BY work properly for datatypes that only support hashing and not
[PostgreSQL.git] / doc / FAQ_czech
blobc556e9de1f9fc2f49d864b7499e8552ae9679bbd
2                           Frequently Asked Questions
3                                        
4    Casto kladené dotazy (FAQ) PostgreSQL
5    
6    Poslední aktualizace: 29. ríjna 2007 (aktualizováno pro PostgreSQL
7    8.3)
8    
9    Soucasný správce: Bruce Momjian (bruce@momjian.us)
10    
11    Prelozil: Pavel Stehule (pavel.stehule@gmail.com)
12    
13    Nejaktuálnejsí verzi tohoto dokumentu naleznete na adrese
14    http://www.postgresql.org/files/documentation/faqs/FAQ.html
15    
16    Odpovedi na otázky vázané na konkrétní platformy naleznete na adrese
17    http://www.postgresql.org/docs/faq/.
18      _________________________________________________________________
19    
20                                Obecné otázky
21                                       
22    1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
23    1.2) Kdo rídí vývoj PostgreSQL?
24    1.3) Pod jakou licencí je PostgreSQL?
25    1.4) Na kterých platformách lze provozovat PostgreSQL?
26    1.5) Kde mohu získat PostgreSQL?
27    1.6) Jaká je poslední verze?
28    1.7) Kde mohu získat podporu?
29    1.8) Jak a kam hlásit chyby?
30    1.9) Kde najdu informace o známých chybách nebo nepodporovaných
31    vlastnostech?
32    1.10) Jaká je dostupná dokumentace?
33    1.11) Jak se mohu naucit SQL?
34    1.12) Jak se mohu pripojit k týmu vývojáru?
35    1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
36    1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v
37    nekterých zemích?
38    
39                         Dotazy na klientská rozhraní
40                                       
41    2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
42    2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
43    2.3) Existuje grafické rozhraní pro PostgreSQL?
44    
45                            Administrativní dotazy
46                                       
47    3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
48    3.2) Jak nastavit pravidla pro prístup z jiných stanic?
49    3.3) Jak vyladit databázi na vyssí výkon?
50    3.4) Jaké mám ladící prostredky?
51    3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
52    3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu
53    PostgreSQL?
54    3.7) Jaký hardware bych mel pouzívat?
55    
56                               Provozní dotazy
57                                       
58    4.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
59    4.2) Jak získám seznam tabulek, indexu, databází, a definovaných
60    uzivatelu. Mohu videt dotazy, které pouzívá psql pro zobrazení techto
61    informací?
62    4.3) Jak zmenit datový typ sloupce?
63    4.4) Jaká je maximální velikost rádku, tabulky a databáze?
64    4.5) Kolik diskového prostoru je potreba k ulození dat z normálního
65    textového souboru?
66    4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
67    4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
68    4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index
69    pro case insensitive hledání?
70    4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit
71    dva retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli
72    je polozka NULL nebo ne?
73    4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
74    4.11.1) Jak vytvorit serial/auto-increment polozku?
75    4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
76    4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
77    prostredí?
78    4.11.4) Proc není vygenerované císlo pouzito pri prerusení
79    transakce?Proc vznikají díry v císlování prostrednictvím sekvence nebo
80    typu SERIAL?
81    4.12) Co to je OID? Co je to CTID?
82    4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
83    AllocSetAlloc()"?
84    4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
85    4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální
86    cas?
87    4.16) Jak provést vnejsí spojení (outer join)?
88    4.17) Jak provést dotaz napríc nekolika databázemi?
89    4.18) Muze funkce vrátit více rádku nebo sloupcu?
90    4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
91    4.20) Jaké jsou moznosti replikace databází?
92    4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí?
93    Proc jsou velká písmena v názvech automaticky prevedena na malá
94    písmena?
95      _________________________________________________________________
96    
97                                Obecné otázky
98                                       
99   1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
100   
101    Výslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres .
102    V rade jazyku je slovo PostgreSQL obtízne vyslovitelný, proto se v
103    hovoru casto pouzívá zjednodusená forma názvu. Pro ty, kterí by si
104    rádi poslechli výslovnost, je k dispozici audiozáznam v MP3 formátu.
105    
106    PostgreSQL je relacní databáze s nekterými objektovými rysy, která má
107    moznosti tradicních komercních databázových systému s nekolika
108    rozsíreními, které lze najít v DBMS systémech prístí generace.
109    Pouzívání PostgreSQL není omezené a veskeré zdrojové kódy jsou volne
110    dostupné.
111    
112    Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojáru
113    navzájem komunikujících prostrednictvím internetu. Tento projekt není
114    rízen zádnou obchodní organizací. Pokud se chcete pridat k projektu,
115    prectete si vývojárské FAQ na adrese
116    http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html .
117    
118   1.2) Kdo rídí vývoj PostgreSQL?
119   
120    Pokud budete hledat organizaci rídící vývoj PostgreSQL, budete
121    zklamáni. Nic takového neexistuje. Existují pouze "core" a CVS skupiny
122    uzivatelu, ale ty existují více z administrátorských duvodu nez z
123    organizacních. Projekt je smerován komunitou vývojáru a uzivatelu, ke
124    které se kdokoliv muze pripojit. Jediné co potrebuje, je prihlásit se
125    do elektronické konference. Více ve vývojárském FAQ.
126    
127   1.3) Pod jakou licencí je PostgreSQL?
128   
129    PostgreSQL je predmetem následujících autorských práv:
130    
131    Dílcí Copyright (c) 1996-2008, PostgreSQL Global Development Group
132    Dílcí Copyright (c) 1994-6, Regents of the University of California
133    
134    Udeluje se oprávnení k uzití, rozmnozování, provádení úprav a
135    rozsirování tohoto softwaru a dokumentace k nemu, pro jakékoli úcely,
136    bez licencního poplatku a bez písemné licencní smlouvy, za podmínky,
137    ze na vsech jeho kopiích je uvedeno oznámení o výse uvedených právech,
138    jakoz i obsah tohoto a dvou následujících odstavcu.
139    
140    THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ZÁDNÉM
141    PRÍPADE ODPOVEDNA ZÁDNÉ TRETÍ OSOBE ZA PRÍMOU, NEPRÍMOU, ZVLÁSTNÍ,
142    NAHODILOU NEBO VÝSLEDNOU SKODU, VCETNE USLÉHO ZISKU, ZPUSOBENOU UZITÍM
143    TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRÍPADE, ZE THE
144    UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOZNOSTI VZNIKU TAKOVÉ
145    SKODY.
146    
147    THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO
148    NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÝROBKU KE
149    SPECIFICKÝM ÚCELUM. NÍZE UVEDENÝ SOFTWARE JE POSKYTNUT "JAK STOJÍ A
150    LEZÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO
151    ÚDRZBU, PODPORU, AKTUALIZACI, VYLEPSENÍ NEBO MODIFIKACI.
152    
153    Výse uvedené je BSD licence, bezná licence otevreného zdroje. Není zde
154    zádné omezení ohledne uzití kódu zdroje. Jsme s tím spokojeni a nemáme
155    v úmyslu na této skutecnosti cokoli menit.
156    
157   1.4) Na kterých platformách lze provozovat PostgreSQL?
158   
159    Strucne receno, PostgreSQL bezí na vsech moderních unixových
160    systémech. Seznam tech, u kterých probehlo testování, naleznete v
161    instalacních instrukcích.
162    
163    PostreSQL také bezí nativne na vsech Microsof Windows systémech
164    odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP
165    a Windows2003. Instalacní balícek naleznete na adrese
166    http://pgfoundry.org/projects/pginstaller. Na starsích systémech s
167    jeste MS-DOS jádrem lze spustit PostgreSQL s emulacním programem
168    Cygwin.
169    
170    Dále existuje port pro Novell Netware 6 port na adrese
171    http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese
172    http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
173    SQL&stype=all&sort=type&dir=%2F .
174    
175   1.5) Kde mohu získat PostgreSQL?
176   
177    Pomocí webového klienta z adresy http://www.postgresql.org/ftp/ nebo
178    klienta ftp z adresy ftp://ftp.postgresql.org/pub/.
179    
180   1.6) Jaká je poslední verze?
181   
182    Nejnovejsí verzí PostgreSQL je verze 8.2.5
183    
184    V plánu je uvolnovat kazdorocne jednu velkou verzi a kazdých nekolik
185    mesícu malé verze.
186    
187   1.7) Kde mohu získat podporu?
188   
189    Nejcastejsí forma podpory uzivatelum PostgreSQL komunitou je
190    prostrednictvím e-mailu. Na nasem webovém serveru naleznete odkaz na
191    stránky,kde se muzete prihlásit do elektronické konference. Pro
192    zacátek jsou doporucené konference general nebo bugs.
193    
194    Dalsí cestou je IRC kanál #postgresql na Freenode (irc.freenode.net).
195    K pripojení pouzijte Unixový príkaz irc -x '#postgresql' "$USER"
196    irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti
197    existuje jeste spanelská (#postgresql-es) a francouzská
198    (#postgresqlfr) verze. Dalsí PostgreSQL kanál naleznete na EFNet.
199    
200    Seznam spolecností poskytující komercní podporu naleznete na adrese
201    http://techdocs.postgresql.org/companies.php.
202    
203   1.8) Jak a kam hlásit chyby?
204   
205    Vyplnte formulár na adrese
206    http://www.postgresql.org/support/submitbug. Na nasem ftp serveru
207    ftp://ftp.postgresql.org/pub/ si overte, ze pouzíváte aktuální verzi
208    PostreSQL.
209    
210    Chyby reportované prostrednictvím chybového formuláre nebo zasláním
211    mailu do PostgreSQL konference obvykle generuje následující odezvu:
212      * Nejedná se o chybu, a proc
213      * Jedná se o známou chybu, která je jiz v seznamu úkolu TODO
214      * Tato chyba byla opravena v aktuální verzi
215      * Tato chyba byla jiz opravena ve verzi, která zatím nebyla
216        oficiálne uvolnena
217      * Pozadavek na dalsí doplnující informace:
218           + Operacní systém
219           + Verze PostgreSQL
220           + Test reprodukující chybu
221           + Ladící informace
222           + Backtrace výstup debuggeru
223      * Jedná se o zatím nezjistenou chybu, pak muzete cekat
224           + Záplatu odstranující chybu, která bude vlozena do dalsí velké
225             nebo malé verze
226           + Informaci, ze se jedná o chybu, kterou nelze okamzite resit a
227             je proto pridána do TODO
228        
229   1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?
230   
231    PostgreSQL podporuje rozsírenou podmnozinu SQL:2003. V nasem TODO
232    naleznete seznam známých chyb, chybejících vlastností, a plány do
233    budoucna.
234    
235    Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle:
236      * Pozadavek je jiz v TODO
237      * Pozadovaná funkce není chtená protoze
238           + Duplikuje jiz existující funkci, která respektuje SQL
239             standard
240           + Implementací funkce by se prílis zkomplikoval kód bez
241             relevantního prínosu
242           + Funkce by mohla být nebezpecná nebo nespolehlivá
243      * Pozadavek je pridán do TODO
244        
245    PostgreSQL nepozívá systém pro sledování chyb, protoze jsme zjistili,
246    ze je efektivnejsí prímo reagovat na maily a udrzovat aktuální TODO. V
247    praxi je snaha o co nejrychlejsí resení chyb, a chyby, které by se
248    mohly projevit u mnoha uzivatelu jsou opravovány velice rychle. Jediné
249    místo, kde lze dohledat vsechny zmeny, rozsírení a opravy v PostgreSQL
250    je CVS log. Poznámky k verzi "Release notes" nezachycují vsechny
251    zmeny, k nemz doslo.
252    
253   1.10) Jaká je dostupná dokumentace?
254   
255    PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál,
256    manuálové stránky a testovací príklady. Podívejte se do adresáre /doc.
257    Manuál je prístupný online na http://www.postgresql.org/docs.
258    
259    K dispozici jsou zdarma dve online knihy na adresách
260    http://www.postgresql.org/docs/books/awbook.html a
261    http://www.commandprompt.com/ppbook/. Dalsí literaturu lze zakoupit.
262    Nejpopulárnejsí je od Kerryho Douglase. Seznam dostupné literatury je
263    na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je
264    kolekce technicky orientovaných clánku tematicky spojených s
265    PostgreSQL na adrese http://techdocs.postgresql.org/.
266    
267    Rádkový klient psql má \d príkazy pro zobrazení informací o typech,
268    operátorech, funkcích, agregacních funkcí, atd. Pouzijte \? pro
269    zobrazení dostupných príkazu.
270    
271    Dalsí dokumentaci najdete na nasem webu.
272    
273   1.11) Jak se mohu naucit SQL?
274   
275    Podívejte se do výse uvedené dokumentace. Dalsí online knihou je
276    "Teach Yourself SQL in 21 Days, Second Edition" na adrese
277    http://members.tripod.com/er4ebus/sql/index.htm. Mnoho nasich
278    uzivatelu doporucuje knihu The Practical SQL Handbook, Bowman, Judith
279    S., et al., Addison-Wesley. Dalsí The Complete Reference SQL, Groff et
280    al., McGraw-Hill.
281    
282    Dalsí online tutoriály jsou dostupné na adresách:
283      * http://www.intermedia.net/support/sql/sqltut.shtm
284      * http://sqlcourse.com
285      * http://www.w3schools.com/sql/default.asp
286      * http://mysite.verizon.net/Graeme_Birchall/id1.html
287        
288   1.12) Jak se mohu pripojit k týmu vývojáru?
289   
290    Prostudujte si Developer's FAQ.
291    
292   1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
293   
294    Software muzeme porovnávat z nekolika ruzných pohledu: vlastnosti,
295    výkon, spolehlivost, podpora a cena.
296    
297     Vlastnosti
298     
299    PostgreSQL nabízí vetsinu funkcí funkcionality velkých komercních DBMS
300    systému jako jsou: transakce, vnorené dotazy, spouste, referencní
301    integrita a sofistikovaný systém zamykání. Poskytujeme urcité funkce,
302    které ostatní systémy bezne nepodporují. Napr. uzivatelem definované
303    typy, dedicnost, pravidla (rules), a MVCC architekturu.
304    
305     Výkon
306     
307    Výkon PostgreSQL je srovnatelný s ostatními komercními nebo Open
308    Source databázemi. V nekterých prípadech je rychlejsí, jindy
309    pomalejsí. Nás výkon je obvykle +/-10% vuci ostatním databázím.
310    
311     Spolehlivost
312     
313    Uvedomujeme si, ze databáze musí být stoprocentne spolehlivá, jinak je
314    nepouzitelná. Snazíme se, aby kazdá verze byla dobre otestována a
315    obsahovala minimum chyb. Kazdá verze je minimálne nekolik mesícu v
316    beta testovacím rezimu. Do produkcního rezimu se dostane, az kdyz
317    nedochází k dalsím zmenám nebo opravám. Veríme, ze jsem více nez
318    srovnatelní s ostatními databázemi v této oblasti.
319    
320     Podpora
321     
322    Na nasich internetových konferencích se setkává velká skupina vývojáru
323    a uzivatelu pri resení vyskytujících se problému. Nase internetové
324    konference umoznují kontakt velké skupiny vývojáru a uzivatelu.
325    Nemuzeme garantovat opravu chyby, ale komercní DBMSs také vzdy
326    negarantují resení problému. Veríme ale, ze díky prímému kontaktu na
327    vývojáre, nasi uzivatelskou komunitu, manuálum, a dostupným zdrojovým
328    kódum máme lepsí podporu nez ostatní DBMSs. Pro ty, kterí preferují
329    komercní "per-incident" podporu, existuje spolecností, kterí ji
330    nabízejí (FAQ sekce 1.7.)
331    
332     Cena
333     
334    PostgreSQL lze pouzívat bezplatne (a to i pro komercní pouzití). Také
335    muzete neomezene pouzívat nás kód ve svých produktech s výjimkami
336    specifikovanými v nasí licenci (prebíráme BSD licenci).
337    
338   1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v nekterých
339   zemích?
340   
341    Pocínaje verzí 8.0.[4+] podporuje PostgreSQL letní cas také pro USA.
342    Podpora letního casu (daylight saving time) pro Kanadu a Západní
343    Austrálii je obsazena ve verzích 8.0.[10+] a 8.1.[6+] a vsech
344    následujících verzích. Starsí verze pouzívaly systémovou databázi
345    casových zón obsahující, krome jiného, informaci o tom, zda se pro
346    danou casovou zónu rozlisuje mezi letním a zimním casem.
347      _________________________________________________________________
348    
349                         Dotazy na klientská rozhraní
350                                       
351   2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
352   
353    PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C.
354    Vsechna dalsí rozhraní predstavují nezávislé projekty, které je treba
355    stáhnout z internetu samostatne. Osamostatnení techto projektu
356    umoznuje nezávislost vývojových týmu a moznost vydávat nové verze bez
357    ohledu na vydání nové verze PostgreSQL.
358    
359    Nekteré programovací jazyky jako je napr. PHP obsahují rozhraní pro
360    PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho
361    dalsích jsou dostupné na adrese: http://gborg.postgresql.org v sekci
362    Drivers/Interfaces.
363    
364   2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
365   
366    Dobrým úvodem do problematiky databází v prostredí webových stránek
367    muze být web http://www.webreview.com.
368    
369    PHP (http://www.php.net) je vynikajícím rozhraním pro tvorbu webu.
370    
371    Pro slozitejsí úlohy se casto pouzívá Perl a jeho BDB:Pg rozhraní s
372    podporou CGI - CGI.pm nebo mod_perl(u).
373    
374   2.3) Existuje grafické rozhraní pro PostgreSQL?
375   
376    K dispozici je rada grafických nástroju podporujících PostgreSQL a to
377    od komercních nebo open source vývojáru. Podrobný seznam naleznete na
378    adrese http://www.postgresql.org/docs/techdocs.54.
379      _________________________________________________________________
380    
381                            Administrativní dotazy
382                                       
383   3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
384   
385    Pri spoustení configure nastavte parametr --prefix
386    
387   3.2) Jak nastavit pravidla pro prístup z jiných stanic?
388   
389    Ve výchozí konfiguraci, PostgreSQL umoznuje pouze pripojení z
390    lokálního uzivatele prostrednictvím Unix domain sockets nebo TCP/IP
391    spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a
392    povolení adresy v souboru $PGDATA/pg_hba.conf se nelze pripojit k
393    PostgreSQL z ostatních stanic. Zmena výse zmínených parametru vyzaduje
394    restart databázového serveru.
395    
396   3.3) Jak vyladit databázi na vyssí výkon?
397   
398    Výkon systému muzete ovlivnit ve trech oblastech:
399    
400     Zmeny dotazu
401     
402      * Pouzitím indexu vcetne cástecných a funkcionálních
403      * Pouzitím COPY místo opakovaných INSERTu
404      * Sloucením mnoha SQL príkazu do jedné transakce snízením rezie na
405        commit
406      * Pouzíváním CLUSTERU, pokud nacítáte vetsí pocet rádek podle indexu
407      * Pouzitím klauzule LIMIT v poddotazech
408      * Pouzitím predpripravených dotazu
409      * Pouzíváním ANALYZE. Tento príkaz aktualizuje statistiky, které se
410        pouzívají pri optimalizaci dotazu
411      * Pravidelné pouzití VACUUM nebo pouzívání pg_autovacuum
412      * Odstranením indexu pred rozsáhlými zmenami v datech
413        
414     Konfigurace serveru
415     
416    Urcité parametry v souboru postgresql.conf mají vliv na výkon serveru.
417    Detaily naleznete v prírucce Administrátora v Server Run-time
418    Environment/Run-time Configuration. Dalsí komentáre naleznete v
419    http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht
420    ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
421    
422     Výber hardware
423     
424    Vliv hardware na výkon serveru je popsán v dokumentech
425    http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html
426    a http://www.powerpostgresql.com/PerfList/.
427    
428   3.4) Jaké mám ladící prostredky?
429   
430    Nastavením log_* promenných v konfiguraci serveru si vynutíte logování
431    dotazu a procesních statistik, které Vám mohou pomoci pri ladení a
432    optimalizaci výkonu.
433    
434   3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
435   
436    Prekrocil jste výchozí limit, který je 100 soucasne pripojených
437    uzivatelu. V konfiguraci serveru v postgresql.conf tuto hodnotu muzete
438    zvetsit zmenou hodnoty max_connection. Nezapomente restartovat server.
439    
440   3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu PostgreSQL?
441   
442    Zpusob císlování je popsán v dokumentaci na
443    http://www.postgresql.org/support/versioning. Instrukce k provedení
444    migrace na vyssí verzi jsou taktéz v dokumentaci na adrese
445    http://www.postgresql.org/docs/current/static/install-upgrading.html.
446    
447   3.7) Jaký hardware bych mel pouzívat?
448   
449    Jelikoz PC jsou vetsinou kompatibilní, lidé mají tendence verit, ze
450    vsechna PC jsou stejne kvalitní. Coz není pravda. Pameti ECC, SCSI a
451    kvalitní základní desky jsou mnohem spolehlivejsí a výkonnejsí nez
452    lacinejsí hardware. PostgreSQL pobezí na vetsine hardwaru, nicméne
453    pokud je pro Vás spolehlivost a výkon systému dulezitá, je dobré
454    venovat cas nalezení vhodné hardwarové konfigurace. Na nasich
455    elektronických konferencích muzete diskutovat o vhodných konfiguracích
456    a znackách.
457      _________________________________________________________________
458    
459                               Provozní dotazy
460                                       
461   4.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
462   
463    Pokud potrebujete pouze nekolik rádku a pokud víte kolik, pouzijte
464    SELECT LIMIT. Pokud bude mozné pouzít index shodující se s ORDER BY,
465    je mozné, ze se nebude provádet celý dotaz. Pokud neznáte pocet
466    záznamu, pouzijte kurzor a príkaz FETCH.
467    
468    Pro výber náhodného rádku pouzijte príkaz ve tvaru:
469 SELECT col
470 FROM tab
471 ORDER BY random()
472 LIMIT 1;
474   4.2) Jak získám seznam tabulek, indexu, databází, a definovaných uzivatelu.
475   Mohu videt dotazy, které pouzívá psql pro zobrazení techto informací?
476   
477    V psql príkazem \dt získáte seznam tabulek. Úplný seznam príkazu psql
478    získáte príkazem \?. Alternativne si muzete prostudovat zdrojový kód
479    psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL
480    príkazy, které jsou generovány pro získání výstupu psql "backslash"
481    príkazu. Také muzete nastartovat psql s parametrem -E, který zpusobí
482    zobrazení vsech SQL príkazu, které se odesílají na server. PostgreSQL
483    také podporuje SQL standard INFORMACNÍ SCHÉMATA (standardní systémové
484    tabulky). Klasickým dotazem do systémových tabulek získáte pozadované
485    informace o strukture databáze.
486    
487    Systémové tabulky PostgreSQL (mimo rámec SQL standardu) pouzívají
488    prefix pg_. Pro zjistení struktury databáze je muzete pouzít také, i
489    kdyz preferovány jsou dotazy do informacního schématu.
490    
491    Seznam vsech databází získáte príkazem psql -l
492    
493    Dalsí inspiraci najdete v souboru pgsql/src/tutorial/syscat.source.
494    Obsahuje ilustracní SELECTy potrebné k získání informací z systémových
495    tabulek databáze.
496    
497   4.3) Jak zmenit datový typ sloupce?
498   
499    Ve verzích 8.0 a pozdejsích jednoduse:
500 ALTER TABLE ALTER COLUMN TYPE
502    V starsích verzích:
503 BEGIN;
504 ALTER TABLE tab ADD COLUMN new_col new_data_type;
505 UPDATE tab SET new_col = CAST(old_col AS new_data_type);
506 ALTER TABLE tab DROP COLUMN old_col;
507 COMMIT;
509    Po zmene spustte príkaz VACUUM FULL, aby doslo k uvolnení diskového
510    prostoru pouzitého v tu chvíli jiz neplatnými záznamy.
511    
512   4.4) Jaká je maximální velikost rádku, tabulky a databáze?
513   
514    PostgreSQL má tato omezení:
515    
516    Maximální velikost databáze:       neomezena (existují 32TB db)
517    Maximální velikost tabulky:        32 TB
518    Maximální velikost rádky:          480GB
519    Maximální velikost polozky         1 GB
520    Maximální pocet rádku v tabulce:   neomezeno
521    Maximální pocet sloupcu v tabulce: 250-1600 podle typu
522    Maximální pocet indexu na tabulce: neomezeno
523    
524    Ve skutecnosti nic není neomezeno, limitem bývá vzdy dostupná disková
525    pamet nebo velikost operacní pameti. Pokud máte nekterou z techto
526    hodnot neobvykle velkou, muze dojít ke snízení výkonu.
527    
528    Maximální velikost tabulky je 32 TB a nevyzaduje podporu velkých
529    souboru operacním systémem. Velké tabulky se ukládají do nekolika 1 GB
530    souboru takze limity souborového systému nejsou podstatné.
531    
532    Maximální velikost tabulky a maximální pocet sloupcu muzeme
533    zectyrnásobit nastavením velikosti bloku na 32K.
534    
535    Indexy jsou povolené pouze na sloupcích jejichz délka je mensí nez
536    2000 znaku. Pokud tuto délku prekrocíme a index potrebujeme pro
537    zajistení jednoznacnosti, je vhodnejsí pouzít funkcionální index nad
538    MD5 funkcí nebo fulltextový index.
539    
540   4.5) Kolik diskového prostoru je potreba k ulození dat z normálního textového
541   souboru?
542   
543    PostgreSQL vyzaduje az petinásobek diskového prostoru k ulození dat z
544    textového souboru.
545    
546    Napríklad, uvazujme soubor se 100 tisíci rádky obsahující na kazdé
547    rádce celé císlo a textový popis. Text je v prumerne dvacet bytu
548    dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze
549    obsahující odpovídající data bude zhruba 5.2 MB.
550     24 bytu: hlavicka rádku (priblizne)
551     24 bytu: jedna celocíselná polozka a jedna textová
552    + 4 byty: ukazatel na stránku k entici
553    ------------------------------------------------------
554     52 bytu na rádek
556    Velikost datové stránky PostgreSQL je 8192 bytu (8KB)
557  8192 bytu na stránce
558 ---------------------- = 158 rádek na stránku
559   52 bytu za rádek
561 100000 rádek
562 ----------------------- = 633 stránek (zaokrouhleno nahoru)
563    158 rádek na stránce
565 633 datových stránek * 8192 bytu na kazdou stránku = 5,185,536 bytu (5.2 MB)
567    Indexy nemají tak velkou rezii, ale mohou být také velké, protoze
568    obsahují indexovaná data.
569    
570    Hodnoty NULL jsou ulozeny v bitmapách, takze zabírají jen velmi málo
571    diskového prostoru.
572    
573   4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
574   
575    Kazdý dotaz nemusí nutne pouzít existující indexy. Index se pouzije
576    tehdy, kdyz je tabulka vetsí nez urcitá minimální velikost, a dotaz
577    vybírá pouze procentuálne malou cást rádku tabulky. To proto, ze
578    náhodný prístup k disku daný ctením indexu muze být pomalejsí nez
579    lineární ctení tabulky nebo sekvencní ctení.
580    
581    PostgreSQL rozhoduje o pouzití indexu na základe statistiky prístupu k
582    tabulce. Tyto statistiky se shromazdují príkazy VACUUM ANALYZE nebo
583    ANALYZE. Díky statistikám má optimizer informaci o poctu rádek v
584    tabulce a muze lépe rozhodnout o pouzití indexu. Statistiky se uplatní
585    pri urcení optimálního poradí a metody spojení tabulek. Statistiky by
586    se meli aktualizovat opakovane, tak jak se mení obsah tabulek.
587    
588    Indexy nejsou obycejne pouzity pro setrídení nebo spojení tabulek.
589    Sekvencní zpracování následované explicitním trídením je obycejne
590    rychlejsí nez pouzití indexu na velké tabulce.
591    
592    Jinak je tomu v prípade pouzití LIMIT a ORDER BY, pri kterém se
593    vetsinou index pouzije, jelikoz je výsledkem pouze malá cást tabulky.
594    
595    Pokud si myslíte, ze optimizer mylne zvolil sekvencní prohledávání
596    tabulky, pouzijte príkaz SET enable_seqscan TO 'off' a zkuste zda je
597    prohledávání s indexem rychlejsí.
598    
599    Pri vyhledávání na základe vzoru jako je napr. operátor LIKE nebo ~ se
600    indexy pouzijí pouze za urcitých skutecností:
601      * zacátek hledaného vzoru musí být ukotven k zacátku, tj.
602           + vzor LIKE nesmí zacínat %
603           + ~ regulární výraz musí zacínat ^
604      * vzor nesmí zacínat intervalem, napr. [a-e]
605      * vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~*
606        nepouzívá indexy. Muzete ale pouzít funkcionální indexy, které
607        jsou popsány v sekci 4.8
608      * pri inicializaci databáze (initdb) musí být pouzito C locale nebo
609        vytvorte speciální text_pattern_index, který umozní, pri
610        respektování zmínených podmínek pouzití indexu operací LIKE. Pro
611        vyhledávání celých slov je mozné a výhodné pouzít fulltext.
612        
613   4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
614   
615    Podívejte se do nápovedy k príkazu EXPLAIN.
616    
617   4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index pro case
618   insensitive hledání?
619   
620    Vyhledávání prostrednictvím regulárních vzoru zajistuje operátor ~,
621    který je case-sensitive. Jeho case-insensitive varianta je operátor
622    ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE.
623    
624    Case-insensitive vyhledání se resí:
625 SELECT *
626 FROM tab
627 WHERE lower(col) = 'abc';
629    Tento dotaz nepouzije standardní index. Musíte pouzít tzv.
630    funkcionální index:
631 CREATE INDEX tabindex ON tab (lower(col));
633    Pokud index vytvoríme jako unikátní, tak muzeme ukládat retezce
634    obsahující malá i velká písmena, ale nikoliv retezce, které se od sebe
635    odlisují jen v malých a velkých písmenech. K zajistení zápisu retezce
636    obsahující pouze malá nebo pouze velká písmena pouzijte CHECK kontroly
637    nebo triggery.
638    
639   4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit dva
640   retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli je polozka
641   NULL nebo ne?
642   
643    Pokud chcete testovat hodnotu NULL pouzijte operátor IS:
644    SELECT *
645    FROM tab
646    WHERE col IS NULL;
648    K spojení retezcu, které mohou obsahovat hodnotu NULL, pouzívejte
649    funkci COALESCE(), napr.:
650    SELECT COALESCE(col1, '') || COALESCE(col2, '')
651    FROM tab
653    Pokud chcete trídit podle hodnoty NULL, pouzijte výraz IS NULL nebo IS
654    NOT NULL v klauzuli ORDER. Hodnota pravda má prednost pred hodnotou
655    false a tedy pokud pouzijete:
656    SELECT *
657    FROM tab
658    ORDER BY (col IS NOT NULL)
660    tak záznamy s NULL budou na zacátku setrídených dat.
661    
662   4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
663   
664    Typ        Interní název Poznámky
665    VARCHAR(n) varchar       n urcuje maximální délku
666    CHAR(n)    bpchar        retezec je do dané délky rozsíren mezerami
667    TEXT       text          bez omezení délky
668    BYTEA      bytea         pole bytu nespecifikované délky
669    "char"     char          jeden znak
670    
671    Na interní názvy muzete narazit v systémovém katalogu nebo v nekterých
672    chybových hláseních.
673    
674    Ctyri první typy jsou tzv. varlena typy (první ctyri byty na disku
675    jsou obsahují délku, ostatní obsahují vlastní data). Skutecne obsazený
676    prostor je tedy o neco málo vetsí nez deklarovaná velikost. Na druhou
677    stranu, delsí retezce jsou komprimovány, takze obsazený prostor na
678    disku muze být mensí nez se ceká.
679    
680    VARCHAR(n) je vhodný pro ukládání ruzne dlouhých retezcu u kterých
681    známe délkové omezení, TEXT pro retezce bez omezení délky (maximum je
682    jeden gigabyte).
683    
684    CHAR(n) se pouzívá pro ulození stejne dlouhých retezcu. CHAR(n) doplní
685    mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak
686    jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot.
687    Vsechny zmínené typy mají podobné výkonové charakteristiky.
688    
689   4.11.1) Jak vytvorit serial/auto-increment polozku?
690   
691    V PostgreSQL muzete pouzít datový typ SERIAL. Jeho pouzitím se
692    automaticky vytvorí sekvence. Napríklad:
693 CREATE TABLE person (
694   id   SERIAL,
695   name TEXT
698    je automaticky transformováno na:
699 CREATE SEQUENCE person_id_seq;
700 CREATE TABLE person (
701   id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
702   name TEXT
705    Podrobnejsí informace najdete v manuálu v popisu príkazu
706    create_sequence.
707    
708   4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
709   
710    Nejjednodussím zpusob, jak získat vygenerovanou hodnotu typu SERIAL,
711    je vyuzít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto:
712 INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
714    Také muzete pouzít funkci nextvall() a její výsledek pouzít v príkazu
715    INSERT, nebo zavolat currval() po provedení príkazu INSERT.
716    
717   4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
718   prostredí?
719   
720    Ne, currval vrací vzdy hodnotu, která byla vygenerována pro vás.
721    
722   4.11.4) Proc není vygenerované císlo pouzito pri prerusení transakce?Proc
723   vznikají díry v císlování prostrednictvím sekvence nebo typu SERIAL?
724   
725    Poté co sekvence vygeneruje nové císlo, tak se nedochází k zamcení
726    sekvence a neceká se na úspesné nebo neúspesné dokoncení transakce.
727    Odvoláním transakce, která si vyzádala císla sekvence se tato císla
728    nenávratne ztratí.
729    
730   4.12) Co to je OID? Co je to CTID?
731   
732    V prípade, ze tabulku nezalozíme s atributem WITHOUT OIDS, tak má
733    kazdý rádek unikátní identifikacní císlo OID. Toto císlo je 4 bajtové
734    celé císlo, které je jedinecné v celé instalaci. Pretece po 4
735    miliardách rádku. PostgreSQL pouzívá OIDs jako interní linky v
736    interních systémových tabulkách.
737    
738    K získání unikátního císla v nesystémových tabulkách je vhodnejsí
739    pouzití typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzívá pouze
740    pro jednu tabulku a je tudíz méne náchylná na pretecení. Pokud byste
741    se toho obávali, pouzijte typ SERIAL8.
742    
743    CTID se pouzívá k identifikaci konkrétního fyzického rádku. CTID se
744    mení pokud je rádek modifikován nebo znovu nacten. Pouzívají ho indexy
745    jako adresaci fyzických rádku.
746    
747   4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
748   AllocSetAlloc()"?
749   
750    Pravdepodobne jste vycerpal dostupnou virtuální pamet, nebo tvuj
751    kernel má prílis nízké limity u urcitých zdroju. Pred startem
752    PostgreSQL vyzkousejte:
753 ulimit -d 262144
754 limit datasize 256m
756    Mozná, ze se projde pouze jeden príkaz - zálezí to na vasem shellu.
757    Mel by zvednout limity datových segmentu vasich procesu na dostatecne
758    velkou hodnotu a snad umoznit dokoncení dotazu. Zmena limitu se bude
759    aplikovat pouze na aktuální proces a na vsechny nove vytvorené
760    procesy. Jestlize máte problém s SQL klientem, protoze vám server
761    vrátil prílis dat, zkuste to pred startem klienta.
762    
763   4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
764   
765    V psql napiste:
766 SELECT version();
768   4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální cas?
769   
770    Pouzijte CURRENT_TIMESTAMP:
771 CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
773   4.16) Jak provést vnejsí spojení (outer join)?
774   
775    PostgreSQL podporuje standardní SQL syntaxi pro vnejsí spojení. Zde
776    jsou dva príklady:
777 SELECT *
778 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
780    nebo
781 SELECT *
782 FROM t1 LEFT OUTER JOIN t2 USING (col);
784    Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a jeste
785    vrátí vsechny nespárované rádky t2 (ty, které nedohledá v t2). RIGHT
786    JOIN by pripojil vsechny nespárované rádky z t2. FULL JOIN vrátí
787    vsechny spárované rádky i vsechny zbývající rádky z obou tabulek.
788    Klícové slovo OUTER je volitelné. Bezná operace JOIN se také oznacuje
789    jako vnitrní spojení.
790    
791   4.17) Jak provést dotaz napríc nekolika databázemi?
792   
793    Neexistuje zádný zpusob, jak se v dotazu odkazovat na tabulky z jiné
794    nez aktuální databáze. A to protoze má systémové tabulky ulozené
795    nezávisle v kazdé databázi a není tak úplne zrejmé, jak by se dotaz
796    provedený napríc databázemi mel chovat.
797    
798    Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomocí
799    funkcí. Druhý zpusob je simultální pripojení klienta ke vsem
800    relevantním databázím a sloucení výsledku na strane klienta.
801    
802   4.18) Muze funkce vrátit více rádku nebo sloupcu?
803   
804    Jde to jednoduse pomocí set-returning funkce. Více na
805    http://www.postgresql.org/docs/techdocs.17.
806    
807   4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
808   
809    Nechteným vedlejsím efektem kesování SQL dotazu v PL/pgSQL funkci je
810    problém s neplatnými odkazy na docasné tabulky, které byly od prvního
811    spustení funkce zruseny a znovu vytvoreny pred dalsím spustením
812    PL/pgSQL funkce. Resením je pouzít príkaz EXECUTE a to proto, ze
813    provádecí plán SQL príkazu spousteného príkazem EXECUTE se vytvárí
814    pokazdé znovu (neukládá se do cache).
815    
816    Tento problém by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssích
817    verzích.
818    
819   4.20) Jaké jsou moznosti replikace databází?
820   
821    Replikaci databáze umoznuje nekolik technoligií. Kazdá má urcité
822    výhody a nevýhody.
823    
824    Master/Slave replikaci podporuje jeden hlavní server, který prijímá
825    pozadavky na zápis a ctení, a nekolik podrízených serveru, které
826    umoznují pouze ctení (SELECT). Nejrozsírenejsím volne dostupným
827    resením tohoto typu je Slony-I.
828    
829    Replikace typu Multi-master podporuje existenci nekolika serveru s
830    povoleným zápisem na více replikovaných serverech. Toto resení zvysuje
831    zátez serveru, protoze je nutná synchronizace serveru.
832    Nejrozsírenejsím volne dostupným resením je PGCluster.
833    
834    Jeste existuje nekolik komercních a hardware resení replikací
835    podporujících ruzné modely replikace.
836    
837   4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proc
838   jsou velká písmena v názvech automaticky prevedena na malá písmena?
839   
840    Nejcastejsím duvodem nerozpoznání názvu objektu bylo pouzití vlození
841    názvu sloupce nebo tabulky mezi uvozovky pri zakládání tabulky. Pokud
842    se název zapíse mezi uvozovky, pak je case sensitive, a v dusledku
843    toho je nutné názvy techto sloupcu nebo tabulek v SQL príkazech také
844    vkládat mezi uvozovky (pokud obsahují velká písmena). Nekteré
845    programy, jako je napríklad pgAdmin, automaticky pouzívají uvozovky.
846    Takze pokud chcete, aby systém identifikoval identifikátor, musíte:
847      * nepouzívat uvozovky v príkazu CREATE TABLE
848      * v identifikátoru pouzít pouze malá písmena
849      * v dotazech vkládat identifikátory do uvozovek