2 Frequently Asked Questions
4 Casto kladené dotazy (FAQ) PostgreSQL
6 Poslední aktualizace: 29. ríjna 2007 (aktualizováno pro PostgreSQL
9 Soucasný správce: Bruce Momjian (bruce@momjian.us)
11 Prelozil: Pavel Stehule (pavel.stehule@gmail.com)
13 Nejaktuálnejsí verzi tohoto dokumentu naleznete na adrese
14 http://www.postgresql.org/files/documentation/faqs/FAQ.html
16 Odpovedi na otázky vázané na konkrétní platformy naleznete na adrese
17 http://www.postgresql.org/docs/faq/.
18 _________________________________________________________________
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
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
39 Dotazy na klientská rozhraní
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?
45 Administrativní dotazy
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
54 3.7) Jaký hardware bych mel pouzívat?
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
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
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
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
81 4.12) Co to je OID? Co je to CTID?
82 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
84 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
85 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální
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á
95 _________________________________________________________________
99 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
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.
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
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 .
118 1.2) Kdo rídí vývoj PostgreSQL?
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.
127 1.3) Pod jakou licencí je PostgreSQL?
129 PostgreSQL je predmetem následujících autorských práv:
131 Dílcí Copyright (c) 1996-2009, PostgreSQL Global Development Group
132 Dílcí Copyright (c) 1994-6, Regents of the University of California
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.
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É
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.
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.
157 1.4) Na kterých platformách lze provozovat PostgreSQL?
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.
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
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 .
175 1.5) Kde mohu získat PostgreSQL?
177 Pomocí webového klienta z adresy http://www.postgresql.org/ftp/ nebo
178 klienta ftp z adresy ftp://ftp.postgresql.org/pub/.
180 1.6) Jaká je poslední verze?
182 Nejnovejsí verzí PostgreSQL je verze 8.2.5
184 V plánu je uvolnovat kazdorocne jednu velkou verzi a kazdých nekolik
187 1.7) Kde mohu získat podporu?
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.
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.
200 Seznam spolecností poskytující komercní podporu naleznete na adrese
201 http://techdocs.postgresql.org/companies.php.
203 1.8) Jak a kam hlásit chyby?
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
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
217 * Pozadavek na dalsí doplnující informace:
220 + Test reprodukující chybu
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é
226 + Informaci, ze se jedná o chybu, kterou nelze okamzite resit a
227 je proto pridána do TODO
229 1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?
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
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
240 + Implementací funkce by se prílis zkomplikoval kód bez
242 + Funkce by mohla být nebezpecná nebo nespolehlivá
243 * Pozadavek je pridán do TODO
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
253 1.10) Jaká je dostupná dokumentace?
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.
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/.
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.
271 Dalsí dokumentaci najdete na nasem webu.
273 1.11) Jak se mohu naucit SQL?
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
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
288 1.12) Jak se mohu pripojit k týmu vývojáru?
290 Prostudujte si Developer's FAQ.
292 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
294 Software muzeme porovnávat z nekolika ruzných pohledu: vlastnosti,
295 výkon, spolehlivost, podpora a cena.
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.
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.
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.
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.)
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).
338 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v nekterých
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 _________________________________________________________________
349 Dotazy na klientská rozhraní
351 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
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.
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
364 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
366 Dobrým úvodem do problematiky databází v prostredí webových stránek
367 muze být web http://www.webreview.com.
369 PHP (http://www.php.net) je vynikajícím rozhraním pro tvorbu webu.
371 Pro slozitejsí úlohy se casto pouzívá Perl a jeho BDB:Pg rozhraní s
372 podporou CGI - CGI.pm nebo mod_perl(u).
374 2.3) Existuje grafické rozhraní pro PostgreSQL?
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 _________________________________________________________________
381 Administrativní dotazy
383 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
385 Pri spoustení configure nastavte parametr --prefix
387 3.2) Jak nastavit pravidla pro prístup z jiných stanic?
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.
396 3.3) Jak vyladit databázi na vyssí výkon?
398 Výkon systému muzete ovlivnit ve trech oblastech:
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
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
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.
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/.
428 3.4) Jaké mám ladící prostredky?
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
434 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
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.
440 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu PostgreSQL?
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.
447 3.7) Jaký hardware bych mel pouzívat?
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
457 _________________________________________________________________
461 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
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.
468 Pro výber náhodného rádku pouzijte príkaz ve tvaru:
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í?
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.
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.
491 Seznam vsech databází získáte príkazem psql -l
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
497 4.3) Jak zmenit datový typ sloupce?
499 Ve verzích 8.0 a pozdejsích jednoduse:
500 ALTER TABLE ALTER COLUMN TYPE
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;
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.
512 4.4) Jaká je maximální velikost rádku, tabulky a databáze?
514 PostgreSQL má tato omezení:
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
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.
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é.
532 Maximální velikost tabulky a maximální pocet sloupcu muzeme
533 zectyrnásobit nastavením velikosti bloku na 32K.
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.
540 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního textového
543 PostgreSQL vyzaduje az petinásobek diskového prostoru k ulození dat z
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 ------------------------------------------------------
556 Velikost datové stránky PostgreSQL je 8192 bytu (8KB)
558 ---------------------- = 158 rádek na stránku
562 ----------------------- = 633 stránek (zaokrouhleno nahoru)
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.
570 Hodnoty NULL jsou ulozeny v bitmapách, takze zabírají jen velmi málo
573 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
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í.
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.
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.
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.
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í.
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.
613 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
615 Podívejte se do nápovedy k príkazu EXPLAIN.
617 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index pro case
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.
624 Case-insensitive vyhledání se resí:
627 WHERE lower(col) = 'abc';
629 Tento dotaz nepouzije standardní index. Musíte pouzít tzv.
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
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
643 Pokud chcete testovat hodnotu NULL pouzijte operátor IS:
648 K spojení retezcu, které mohou obsahovat hodnotu NULL, pouzívejte
649 funkci COALESCE(), napr.:
650 SELECT COALESCE(col1, '') || COALESCE(col2, '')
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:
658 ORDER BY (col IS NOT NULL)
660 tak záznamy s NULL budou na zacátku setrídených dat.
662 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
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
671 Na interní názvy muzete narazit v systémovém katalogu nebo v nekterých
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á.
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
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.
689 4.11.1) Jak vytvorit serial/auto-increment polozku?
691 V PostgreSQL muzete pouzít datový typ SERIAL. Jeho pouzitím se
692 automaticky vytvorí sekvence. Napríklad:
693 CREATE TABLE person (
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'),
705 Podrobnejsí informace najdete v manuálu v popisu príkazu
708 4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
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.
717 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
720 Ne, currval vrací vzdy hodnotu, která byla vygenerována pro vás.
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?
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
730 4.12) Co to je OID? Co je to CTID?
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.
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.
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.
747 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
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:
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.
763 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
768 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální cas?
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)?
775 PostgreSQL podporuje standardní SQL syntaxi pro vnejsí spojení. Zde
778 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
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í.
791 4.17) Jak provést dotaz napríc nekolika databázemi?
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.
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.
802 4.18) Muze funkce vrátit více rádku nebo sloupcu?
804 Jde to jednoduse pomocí set-returning funkce. Více na
805 http://www.postgresql.org/docs/techdocs.17.
807 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
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).
816 Tento problém by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssích
819 4.20) Jaké jsou moznosti replikace databází?
821 Replikaci databáze umoznuje nekolik technoligií. Kazdá má urcité
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.
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.
834 Jeste existuje nekolik komercních a hardware resení replikací
835 podporujících ruzné modely replikace.
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?
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