mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			850 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			850 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
                          Frequently Asked Questions
 | 
						|
                                       
 | 
						|
   Casto kladené dotazy (FAQ) PostgreSQL
 | 
						|
   
 | 
						|
   Poslední aktualizace: 29. ríjna 2007 (aktualizováno pro PostgreSQL
 | 
						|
   8.3)
 | 
						|
   
 | 
						|
   Soucasný správce: Bruce Momjian (bruce@momjian.us)
 | 
						|
   
 | 
						|
   Prelozil: Pavel Stehule (pavel.stehule@gmail.com)
 | 
						|
   
 | 
						|
   Nejaktuálnejsí verzi tohoto dokumentu naleznete na adrese
 | 
						|
   http://www.postgresql.org/files/documentation/faqs/FAQ.html
 | 
						|
   
 | 
						|
   Odpovedi na otázky vázané na konkrétní platformy naleznete na adrese
 | 
						|
   http://www.postgresql.org/docs/faq/.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                               Obecné otázky
 | 
						|
                                      
 | 
						|
   1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
 | 
						|
   1.2) Kdo rídí vývoj PostgreSQL?
 | 
						|
   1.3) Pod jakou licencí je PostgreSQL?
 | 
						|
   1.4) Na kterých platformách lze provozovat PostgreSQL?
 | 
						|
   1.5) Kde mohu získat PostgreSQL?
 | 
						|
   1.6) Jaká je poslední verze?
 | 
						|
   1.7) Kde mohu získat podporu?
 | 
						|
   1.8) Jak a kam hlásit chyby?
 | 
						|
   1.9) Kde najdu informace o známých chybách nebo nepodporovaných
 | 
						|
   vlastnostech?
 | 
						|
   1.10) Jaká je dostupná dokumentace?
 | 
						|
   1.11) Jak se mohu naucit SQL?
 | 
						|
   1.12) Jak se mohu pripojit k týmu vývojáru?
 | 
						|
   1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
 | 
						|
   1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v
 | 
						|
   nekterých zemích?
 | 
						|
   
 | 
						|
                        Dotazy na klientská rozhraní
 | 
						|
                                      
 | 
						|
   2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
 | 
						|
   2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
 | 
						|
   2.3) Existuje grafické rozhraní pro PostgreSQL?
 | 
						|
   
 | 
						|
                           Administrativní dotazy
 | 
						|
                                      
 | 
						|
   3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
 | 
						|
   3.2) Jak nastavit pravidla pro prístup z jiných stanic?
 | 
						|
   3.3) Jak vyladit databázi na vyssí výkon?
 | 
						|
   3.4) Jaké mám ladící prostredky?
 | 
						|
   3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
 | 
						|
   3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu
 | 
						|
   PostgreSQL?
 | 
						|
   3.7) Jaký hardware bych mel pouzívat?
 | 
						|
   
 | 
						|
                              Provozní dotazy
 | 
						|
                                      
 | 
						|
   4.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
 | 
						|
   4.2) Jak získám seznam tabulek, indexu, databází, a definovaných
 | 
						|
   uzivatelu. Mohu videt dotazy, které pouzívá psql pro zobrazení techto
 | 
						|
   informací?
 | 
						|
   4.3) Jak zmenit datový typ sloupce?
 | 
						|
   4.4) Jaká je maximální velikost rádku, tabulky a databáze?
 | 
						|
   4.5) Kolik diskového prostoru je potreba k ulození dat z normálního
 | 
						|
   textového souboru?
 | 
						|
   4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
 | 
						|
   4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
 | 
						|
   4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index
 | 
						|
   pro case insensitive hledání?
 | 
						|
   4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit
 | 
						|
   dva retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli
 | 
						|
   je polozka NULL nebo ne?
 | 
						|
   4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
 | 
						|
   4.11.1) Jak vytvorit serial/auto-increment polozku?
 | 
						|
   4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
 | 
						|
   4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
 | 
						|
   prostredí?
 | 
						|
   4.11.4) Proc není vygenerované císlo pouzito pri prerusení
 | 
						|
   transakce?Proc vznikají díry v císlování prostrednictvím sekvence nebo
 | 
						|
   typu SERIAL?
 | 
						|
   4.12) Co to je OID? Co je to CTID?
 | 
						|
   4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
 | 
						|
   AllocSetAlloc()"?
 | 
						|
   4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
 | 
						|
   4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální
 | 
						|
   cas?
 | 
						|
   4.16) Jak provést vnejsí spojení (outer join)?
 | 
						|
   4.17) Jak provést dotaz napríc nekolika databázemi?
 | 
						|
   4.18) Muze funkce vrátit více rádku nebo sloupcu?
 | 
						|
   4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
 | 
						|
   4.20) Jaké jsou moznosti replikace databází?
 | 
						|
   4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí?
 | 
						|
   Proc jsou velká písmena v názvech automaticky prevedena na malá
 | 
						|
   písmena?
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                               Obecné otázky
 | 
						|
                                      
 | 
						|
  1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
 | 
						|
  
 | 
						|
   Výslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres .
 | 
						|
   V rade jazyku je slovo PostgreSQL obtízne vyslovitelný, proto se v
 | 
						|
   hovoru casto pouzívá zjednodusená forma názvu. Pro ty, kterí by si
 | 
						|
   rádi poslechli výslovnost, je k dispozici audiozáznam v MP3 formátu.
 | 
						|
   
 | 
						|
   PostgreSQL je relacní databáze s nekterými objektovými rysy, která má
 | 
						|
   moznosti tradicních komercních databázových systému s nekolika
 | 
						|
   rozsíreními, které lze najít v DBMS systémech prístí generace.
 | 
						|
   Pouzívání PostgreSQL není omezené a veskeré zdrojové kódy jsou volne
 | 
						|
   dostupné.
 | 
						|
   
 | 
						|
   Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojáru
 | 
						|
   navzájem komunikujících prostrednictvím internetu. Tento projekt není
 | 
						|
   rízen zádnou obchodní organizací. Pokud se chcete pridat k projektu,
 | 
						|
   prectete si vývojárské FAQ na adrese
 | 
						|
   http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html .
 | 
						|
   
 | 
						|
  1.2) Kdo rídí vývoj PostgreSQL?
 | 
						|
  
 | 
						|
   Pokud budete hledat organizaci rídící vývoj PostgreSQL, budete
 | 
						|
   zklamáni. Nic takového neexistuje. Existují pouze "core" a CVS skupiny
 | 
						|
   uzivatelu, ale ty existují více z administrátorských duvodu nez z
 | 
						|
   organizacních. Projekt je smerován komunitou vývojáru a uzivatelu, ke
 | 
						|
   které se kdokoliv muze pripojit. Jediné co potrebuje, je prihlásit se
 | 
						|
   do elektronické konference. Více ve vývojárském FAQ.
 | 
						|
   
 | 
						|
  1.3) Pod jakou licencí je PostgreSQL?
 | 
						|
  
 | 
						|
   PostgreSQL je predmetem následujících autorských práv:
 | 
						|
   
 | 
						|
   Dílcí Copyright (c) 1996-2008, PostgreSQL Global Development Group
 | 
						|
   Dílcí Copyright (c) 1994-6, Regents of the University of California
 | 
						|
   
 | 
						|
   Udeluje se oprávnení k uzití, rozmnozování, provádení úprav a
 | 
						|
   rozsirování tohoto softwaru a dokumentace k nemu, pro jakékoli úcely,
 | 
						|
   bez licencního poplatku a bez písemné licencní smlouvy, za podmínky,
 | 
						|
   ze na vsech jeho kopiích je uvedeno oznámení o výse uvedených právech,
 | 
						|
   jakoz i obsah tohoto a dvou následujících odstavcu.
 | 
						|
   
 | 
						|
   THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ZÁDNÉM
 | 
						|
   PRÍPADE ODPOVEDNA ZÁDNÉ TRETÍ OSOBE ZA PRÍMOU, NEPRÍMOU, ZVLÁSTNÍ,
 | 
						|
   NAHODILOU NEBO VÝSLEDNOU SKODU, VCETNE USLÉHO ZISKU, ZPUSOBENOU UZITÍM
 | 
						|
   TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRÍPADE, ZE THE
 | 
						|
   UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOZNOSTI VZNIKU TAKOVÉ
 | 
						|
   SKODY.
 | 
						|
   
 | 
						|
   THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO
 | 
						|
   NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÝROBKU KE
 | 
						|
   SPECIFICKÝM ÚCELUM. NÍZE UVEDENÝ SOFTWARE JE POSKYTNUT "JAK STOJÍ A
 | 
						|
   LEZÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO
 | 
						|
   ÚDRZBU, PODPORU, AKTUALIZACI, VYLEPSENÍ NEBO MODIFIKACI.
 | 
						|
   
 | 
						|
   Výse uvedené je BSD licence, bezná licence otevreného zdroje. Není zde
 | 
						|
   zádné omezení ohledne uzití kódu zdroje. Jsme s tím spokojeni a nemáme
 | 
						|
   v úmyslu na této skutecnosti cokoli menit.
 | 
						|
   
 | 
						|
  1.4) Na kterých platformách lze provozovat PostgreSQL?
 | 
						|
  
 | 
						|
   Strucne receno, PostgreSQL bezí na vsech moderních unixových
 | 
						|
   systémech. Seznam tech, u kterých probehlo testování, naleznete v
 | 
						|
   instalacních instrukcích.
 | 
						|
   
 | 
						|
   PostreSQL také bezí nativne na vsech Microsof Windows systémech
 | 
						|
   odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP
 | 
						|
   a Windows2003. Instalacní balícek naleznete na adrese
 | 
						|
   http://pgfoundry.org/projects/pginstaller. Na starsích systémech s
 | 
						|
   jeste MS-DOS jádrem lze spustit PostgreSQL s emulacním programem
 | 
						|
   Cygwin.
 | 
						|
   
 | 
						|
   Dále existuje port pro Novell Netware 6 port na adrese
 | 
						|
   http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese
 | 
						|
   http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
 | 
						|
   SQL&stype=all&sort=type&dir=%2F .
 | 
						|
   
 | 
						|
  1.5) Kde mohu získat PostgreSQL?
 | 
						|
  
 | 
						|
   Pomocí webového klienta z adresy http://www.postgresql.org/ftp/ nebo
 | 
						|
   klienta ftp z adresy ftp://ftp.postgresql.org/pub/.
 | 
						|
   
 | 
						|
  1.6) Jaká je poslední verze?
 | 
						|
  
 | 
						|
   Nejnovejsí verzí PostgreSQL je verze 8.2.5
 | 
						|
   
 | 
						|
   V plánu je uvolnovat kazdorocne jednu velkou verzi a kazdých nekolik
 | 
						|
   mesícu malé verze.
 | 
						|
   
 | 
						|
  1.7) Kde mohu získat podporu?
 | 
						|
  
 | 
						|
   Nejcastejsí forma podpory uzivatelum PostgreSQL komunitou je
 | 
						|
   prostrednictvím e-mailu. Na nasem webovém serveru naleznete odkaz na
 | 
						|
   stránky,kde se muzete prihlásit do elektronické konference. Pro
 | 
						|
   zacátek jsou doporucené konference general nebo bugs.
 | 
						|
   
 | 
						|
   Dalsí cestou je IRC kanál #postgresql na Freenode (irc.freenode.net).
 | 
						|
   K pripojení pouzijte Unixový príkaz irc -x '#postgresql' "$USER"
 | 
						|
   irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti
 | 
						|
   existuje jeste spanelská (#postgresql-es) a francouzská
 | 
						|
   (#postgresqlfr) verze. Dalsí PostgreSQL kanál naleznete na EFNet.
 | 
						|
   
 | 
						|
   Seznam spolecností poskytující komercní podporu naleznete na adrese
 | 
						|
   http://techdocs.postgresql.org/companies.php.
 | 
						|
   
 | 
						|
  1.8) Jak a kam hlásit chyby?
 | 
						|
  
 | 
						|
   Vyplnte formulár na adrese
 | 
						|
   http://www.postgresql.org/support/submitbug. Na nasem ftp serveru
 | 
						|
   ftp://ftp.postgresql.org/pub/ si overte, ze pouzíváte aktuální verzi
 | 
						|
   PostreSQL.
 | 
						|
   
 | 
						|
   Chyby reportované prostrednictvím chybového formuláre nebo zasláním
 | 
						|
   mailu do PostgreSQL konference obvykle generuje následující odezvu:
 | 
						|
     * Nejedná se o chybu, a proc
 | 
						|
     * Jedná se o známou chybu, která je jiz v seznamu úkolu TODO
 | 
						|
     * Tato chyba byla opravena v aktuální verzi
 | 
						|
     * Tato chyba byla jiz opravena ve verzi, která zatím nebyla
 | 
						|
       oficiálne uvolnena
 | 
						|
     * Pozadavek na dalsí doplnující informace:
 | 
						|
          + Operacní systém
 | 
						|
          + Verze PostgreSQL
 | 
						|
          + Test reprodukující chybu
 | 
						|
          + Ladící informace
 | 
						|
          + Backtrace výstup debuggeru
 | 
						|
     * Jedná se o zatím nezjistenou chybu, pak muzete cekat
 | 
						|
          + Záplatu odstranující chybu, která bude vlozena do dalsí velké
 | 
						|
            nebo malé verze
 | 
						|
          + Informaci, ze se jedná o chybu, kterou nelze okamzite resit a
 | 
						|
            je proto pridána do TODO
 | 
						|
       
 | 
						|
  1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?
 | 
						|
  
 | 
						|
   PostgreSQL podporuje rozsírenou podmnozinu SQL:2003. V nasem TODO
 | 
						|
   naleznete seznam známých chyb, chybejících vlastností, a plány do
 | 
						|
   budoucna.
 | 
						|
   
 | 
						|
   Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle:
 | 
						|
     * Pozadavek je jiz v TODO
 | 
						|
     * Pozadovaná funkce není chtená protoze
 | 
						|
          + Duplikuje jiz existující funkci, která respektuje SQL
 | 
						|
            standard
 | 
						|
          + Implementací funkce by se prílis zkomplikoval kód bez
 | 
						|
            relevantního prínosu
 | 
						|
          + Funkce by mohla být nebezpecná nebo nespolehlivá
 | 
						|
     * Pozadavek je pridán do TODO
 | 
						|
       
 | 
						|
   PostgreSQL nepozívá systém pro sledování chyb, protoze jsme zjistili,
 | 
						|
   ze je efektivnejsí prímo reagovat na maily a udrzovat aktuální TODO. V
 | 
						|
   praxi je snaha o co nejrychlejsí resení chyb, a chyby, které by se
 | 
						|
   mohly projevit u mnoha uzivatelu jsou opravovány velice rychle. Jediné
 | 
						|
   místo, kde lze dohledat vsechny zmeny, rozsírení a opravy v PostgreSQL
 | 
						|
   je CVS log. Poznámky k verzi "Release notes" nezachycují vsechny
 | 
						|
   zmeny, k nemz doslo.
 | 
						|
   
 | 
						|
  1.10) Jaká je dostupná dokumentace?
 | 
						|
  
 | 
						|
   PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál,
 | 
						|
   manuálové stránky a testovací príklady. Podívejte se do adresáre /doc.
 | 
						|
   Manuál je prístupný online na http://www.postgresql.org/docs.
 | 
						|
   
 | 
						|
   K dispozici jsou zdarma dve online knihy na adresách
 | 
						|
   http://www.postgresql.org/docs/books/awbook.html a
 | 
						|
   http://www.commandprompt.com/ppbook/. Dalsí literaturu lze zakoupit.
 | 
						|
   Nejpopulárnejsí je od Kerryho Douglase. Seznam dostupné literatury je
 | 
						|
   na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je
 | 
						|
   kolekce technicky orientovaných clánku tematicky spojených s
 | 
						|
   PostgreSQL na adrese http://techdocs.postgresql.org/.
 | 
						|
   
 | 
						|
   Rádkový klient psql má \d príkazy pro zobrazení informací o typech,
 | 
						|
   operátorech, funkcích, agregacních funkcí, atd. Pouzijte \? pro
 | 
						|
   zobrazení dostupných príkazu.
 | 
						|
   
 | 
						|
   Dalsí dokumentaci najdete na nasem webu.
 | 
						|
   
 | 
						|
  1.11) Jak se mohu naucit SQL?
 | 
						|
  
 | 
						|
   Podívejte se do výse uvedené dokumentace. Dalsí online knihou je
 | 
						|
   "Teach Yourself SQL in 21 Days, Second Edition" na adrese
 | 
						|
   http://members.tripod.com/er4ebus/sql/index.htm. Mnoho nasich
 | 
						|
   uzivatelu doporucuje knihu The Practical SQL Handbook, Bowman, Judith
 | 
						|
   S., et al., Addison-Wesley. Dalsí The Complete Reference SQL, Groff et
 | 
						|
   al., McGraw-Hill.
 | 
						|
   
 | 
						|
   Dalsí online tutoriály jsou dostupné na adresách:
 | 
						|
     * http://www.intermedia.net/support/sql/sqltut.shtm
 | 
						|
     * http://sqlcourse.com
 | 
						|
     * http://www.w3schools.com/sql/default.asp
 | 
						|
     * http://mysite.verizon.net/Graeme_Birchall/id1.html
 | 
						|
       
 | 
						|
  1.12) Jak se mohu pripojit k týmu vývojáru?
 | 
						|
  
 | 
						|
   Prostudujte si Developer's FAQ.
 | 
						|
   
 | 
						|
  1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
 | 
						|
  
 | 
						|
   Software muzeme porovnávat z nekolika ruzných pohledu: vlastnosti,
 | 
						|
   výkon, spolehlivost, podpora a cena.
 | 
						|
   
 | 
						|
    Vlastnosti
 | 
						|
    
 | 
						|
   PostgreSQL nabízí vetsinu funkcí funkcionality velkých komercních DBMS
 | 
						|
   systému jako jsou: transakce, vnorené dotazy, spouste, referencní
 | 
						|
   integrita a sofistikovaný systém zamykání. Poskytujeme urcité funkce,
 | 
						|
   které ostatní systémy bezne nepodporují. Napr. uzivatelem definované
 | 
						|
   typy, dedicnost, pravidla (rules), a MVCC architekturu.
 | 
						|
   
 | 
						|
    Výkon
 | 
						|
    
 | 
						|
   Výkon PostgreSQL je srovnatelný s ostatními komercními nebo Open
 | 
						|
   Source databázemi. V nekterých prípadech je rychlejsí, jindy
 | 
						|
   pomalejsí. Nás výkon je obvykle +/-10% vuci ostatním databázím.
 | 
						|
   
 | 
						|
    Spolehlivost
 | 
						|
    
 | 
						|
   Uvedomujeme si, ze databáze musí být stoprocentne spolehlivá, jinak je
 | 
						|
   nepouzitelná. Snazíme se, aby kazdá verze byla dobre otestována a
 | 
						|
   obsahovala minimum chyb. Kazdá verze je minimálne nekolik mesícu v
 | 
						|
   beta testovacím rezimu. Do produkcního rezimu se dostane, az kdyz
 | 
						|
   nedochází k dalsím zmenám nebo opravám. Veríme, ze jsem více nez
 | 
						|
   srovnatelní s ostatními databázemi v této oblasti.
 | 
						|
   
 | 
						|
    Podpora
 | 
						|
    
 | 
						|
   Na nasich internetových konferencích se setkává velká skupina vývojáru
 | 
						|
   a uzivatelu pri resení vyskytujících se problému. Nase internetové
 | 
						|
   konference umoznují kontakt velké skupiny vývojáru a uzivatelu.
 | 
						|
   Nemuzeme garantovat opravu chyby, ale komercní DBMSs také vzdy
 | 
						|
   negarantují resení problému. Veríme ale, ze díky prímému kontaktu na
 | 
						|
   vývojáre, nasi uzivatelskou komunitu, manuálum, a dostupným zdrojovým
 | 
						|
   kódum máme lepsí podporu nez ostatní DBMSs. Pro ty, kterí preferují
 | 
						|
   komercní "per-incident" podporu, existuje spolecností, kterí ji
 | 
						|
   nabízejí (FAQ sekce 1.7.)
 | 
						|
   
 | 
						|
    Cena
 | 
						|
    
 | 
						|
   PostgreSQL lze pouzívat bezplatne (a to i pro komercní pouzití). Také
 | 
						|
   muzete neomezene pouzívat nás kód ve svých produktech s výjimkami
 | 
						|
   specifikovanými v nasí licenci (prebíráme BSD licenci).
 | 
						|
   
 | 
						|
  1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v nekterých
 | 
						|
  zemích?
 | 
						|
  
 | 
						|
   Pocínaje verzí 8.0.[4+] podporuje PostgreSQL letní cas také pro USA.
 | 
						|
   Podpora letního casu (daylight saving time) pro Kanadu a Západní
 | 
						|
   Austrálii je obsazena ve verzích 8.0.[10+] a 8.1.[6+] a vsech
 | 
						|
   následujících verzích. Starsí verze pouzívaly systémovou databázi
 | 
						|
   casových zón obsahující, krome jiného, informaci o tom, zda se pro
 | 
						|
   danou casovou zónu rozlisuje mezi letním a zimním casem.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                        Dotazy na klientská rozhraní
 | 
						|
                                      
 | 
						|
  2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
 | 
						|
  
 | 
						|
   PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C.
 | 
						|
   Vsechna dalsí rozhraní predstavují nezávislé projekty, které je treba
 | 
						|
   stáhnout z internetu samostatne. Osamostatnení techto projektu
 | 
						|
   umoznuje nezávislost vývojových týmu a moznost vydávat nové verze bez
 | 
						|
   ohledu na vydání nové verze PostgreSQL.
 | 
						|
   
 | 
						|
   Nekteré programovací jazyky jako je napr. PHP obsahují rozhraní pro
 | 
						|
   PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho
 | 
						|
   dalsích jsou dostupné na adrese: http://gborg.postgresql.org v sekci
 | 
						|
   Drivers/Interfaces.
 | 
						|
   
 | 
						|
  2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
 | 
						|
  
 | 
						|
   Dobrým úvodem do problematiky databází v prostredí webových stránek
 | 
						|
   muze být web http://www.webreview.com.
 | 
						|
   
 | 
						|
   PHP (http://www.php.net) je vynikajícím rozhraním pro tvorbu webu.
 | 
						|
   
 | 
						|
   Pro slozitejsí úlohy se casto pouzívá Perl a jeho BDB:Pg rozhraní s
 | 
						|
   podporou CGI - CGI.pm nebo mod_perl(u).
 | 
						|
   
 | 
						|
  2.3) Existuje grafické rozhraní pro PostgreSQL?
 | 
						|
  
 | 
						|
   K dispozici je rada grafických nástroju podporujících PostgreSQL a to
 | 
						|
   od komercních nebo open source vývojáru. Podrobný seznam naleznete na
 | 
						|
   adrese http://www.postgresql.org/docs/techdocs.54.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                           Administrativní dotazy
 | 
						|
                                      
 | 
						|
  3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
 | 
						|
  
 | 
						|
   Pri spoustení configure nastavte parametr --prefix
 | 
						|
   
 | 
						|
  3.2) Jak nastavit pravidla pro prístup z jiných stanic?
 | 
						|
  
 | 
						|
   Ve výchozí konfiguraci, PostgreSQL umoznuje pouze pripojení z
 | 
						|
   lokálního uzivatele prostrednictvím Unix domain sockets nebo TCP/IP
 | 
						|
   spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a
 | 
						|
   povolení adresy v souboru $PGDATA/pg_hba.conf se nelze pripojit k
 | 
						|
   PostgreSQL z ostatních stanic. Zmena výse zmínených parametru vyzaduje
 | 
						|
   restart databázového serveru.
 | 
						|
   
 | 
						|
  3.3) Jak vyladit databázi na vyssí výkon?
 | 
						|
  
 | 
						|
   Výkon systému muzete ovlivnit ve trech oblastech:
 | 
						|
   
 | 
						|
    Zmeny dotazu
 | 
						|
    
 | 
						|
     * Pouzitím indexu vcetne cástecných a funkcionálních
 | 
						|
     * Pouzitím COPY místo opakovaných INSERTu
 | 
						|
     * Sloucením mnoha SQL príkazu do jedné transakce snízením rezie na
 | 
						|
       commit
 | 
						|
     * Pouzíváním CLUSTERU, pokud nacítáte vetsí pocet rádek podle indexu
 | 
						|
     * Pouzitím klauzule LIMIT v poddotazech
 | 
						|
     * Pouzitím predpripravených dotazu
 | 
						|
     * Pouzíváním ANALYZE. Tento príkaz aktualizuje statistiky, které se
 | 
						|
       pouzívají pri optimalizaci dotazu
 | 
						|
     * Pravidelné pouzití VACUUM nebo pouzívání pg_autovacuum
 | 
						|
     * Odstranením indexu pred rozsáhlými zmenami v datech
 | 
						|
       
 | 
						|
    Konfigurace serveru
 | 
						|
    
 | 
						|
   Urcité parametry v souboru postgresql.conf mají vliv na výkon serveru.
 | 
						|
   Detaily naleznete v prírucce Administrátora v Server Run-time
 | 
						|
   Environment/Run-time Configuration. Dalsí komentáre naleznete v
 | 
						|
   http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht
 | 
						|
   ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
 | 
						|
   
 | 
						|
    Výber hardware
 | 
						|
    
 | 
						|
   Vliv hardware na výkon serveru je popsán v dokumentech
 | 
						|
   http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html
 | 
						|
   a http://www.powerpostgresql.com/PerfList/.
 | 
						|
   
 | 
						|
  3.4) Jaké mám ladící prostredky?
 | 
						|
  
 | 
						|
   Nastavením log_* promenných v konfiguraci serveru si vynutíte logování
 | 
						|
   dotazu a procesních statistik, které Vám mohou pomoci pri ladení a
 | 
						|
   optimalizaci výkonu.
 | 
						|
   
 | 
						|
  3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
 | 
						|
  
 | 
						|
   Prekrocil jste výchozí limit, který je 100 soucasne pripojených
 | 
						|
   uzivatelu. V konfiguraci serveru v postgresql.conf tuto hodnotu muzete
 | 
						|
   zvetsit zmenou hodnoty max_connection. Nezapomente restartovat server.
 | 
						|
   
 | 
						|
  3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu PostgreSQL?
 | 
						|
  
 | 
						|
   Zpusob císlování je popsán v dokumentaci na
 | 
						|
   http://www.postgresql.org/support/versioning. Instrukce k provedení
 | 
						|
   migrace na vyssí verzi jsou taktéz v dokumentaci na adrese
 | 
						|
   http://www.postgresql.org/docs/current/static/install-upgrading.html.
 | 
						|
   
 | 
						|
  3.7) Jaký hardware bych mel pouzívat?
 | 
						|
  
 | 
						|
   Jelikoz PC jsou vetsinou kompatibilní, lidé mají tendence verit, ze
 | 
						|
   vsechna PC jsou stejne kvalitní. Coz není pravda. Pameti ECC, SCSI a
 | 
						|
   kvalitní základní desky jsou mnohem spolehlivejsí a výkonnejsí nez
 | 
						|
   lacinejsí hardware. PostgreSQL pobezí na vetsine hardwaru, nicméne
 | 
						|
   pokud je pro Vás spolehlivost a výkon systému dulezitá, je dobré
 | 
						|
   venovat cas nalezení vhodné hardwarové konfigurace. Na nasich
 | 
						|
   elektronických konferencích muzete diskutovat o vhodných konfiguracích
 | 
						|
   a znackách.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                              Provozní dotazy
 | 
						|
                                      
 | 
						|
  4.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
 | 
						|
  
 | 
						|
   Pokud potrebujete pouze nekolik rádku a pokud víte kolik, pouzijte
 | 
						|
   SELECT LIMIT. Pokud bude mozné pouzít index shodující se s ORDER BY,
 | 
						|
   je mozné, ze se nebude provádet celý dotaz. Pokud neznáte pocet
 | 
						|
   záznamu, pouzijte kurzor a príkaz FETCH.
 | 
						|
   
 | 
						|
   Pro výber náhodného rádku pouzijte príkaz ve tvaru:
 | 
						|
SELECT col
 | 
						|
FROM tab
 | 
						|
ORDER BY random()
 | 
						|
LIMIT 1;
 | 
						|
 | 
						|
  4.2) Jak získám seznam tabulek, indexu, databází, a definovaných uzivatelu.
 | 
						|
  Mohu videt dotazy, které pouzívá psql pro zobrazení techto informací?
 | 
						|
  
 | 
						|
   V psql príkazem \dt získáte seznam tabulek. Úplný seznam príkazu psql
 | 
						|
   získáte príkazem \?. Alternativne si muzete prostudovat zdrojový kód
 | 
						|
   psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL
 | 
						|
   príkazy, které jsou generovány pro získání výstupu psql "backslash"
 | 
						|
   príkazu. Také muzete nastartovat psql s parametrem -E, který zpusobí
 | 
						|
   zobrazení vsech SQL príkazu, které se odesílají na server. PostgreSQL
 | 
						|
   také podporuje SQL standard INFORMACNÍ SCHÉMATA (standardní systémové
 | 
						|
   tabulky). Klasickým dotazem do systémových tabulek získáte pozadované
 | 
						|
   informace o strukture databáze.
 | 
						|
   
 | 
						|
   Systémové tabulky PostgreSQL (mimo rámec SQL standardu) pouzívají
 | 
						|
   prefix pg_. Pro zjistení struktury databáze je muzete pouzít také, i
 | 
						|
   kdyz preferovány jsou dotazy do informacního schématu.
 | 
						|
   
 | 
						|
   Seznam vsech databází získáte príkazem psql -l
 | 
						|
   
 | 
						|
   Dalsí inspiraci najdete v souboru pgsql/src/tutorial/syscat.source.
 | 
						|
   Obsahuje ilustracní SELECTy potrebné k získání informací z systémových
 | 
						|
   tabulek databáze.
 | 
						|
   
 | 
						|
  4.3) Jak zmenit datový typ sloupce?
 | 
						|
  
 | 
						|
   Ve verzích 8.0 a pozdejsích jednoduse:
 | 
						|
ALTER TABLE ALTER COLUMN TYPE
 | 
						|
 | 
						|
   V starsích verzích:
 | 
						|
BEGIN;
 | 
						|
ALTER TABLE tab ADD COLUMN new_col new_data_type;
 | 
						|
UPDATE tab SET new_col = CAST(old_col AS new_data_type);
 | 
						|
ALTER TABLE tab DROP COLUMN old_col;
 | 
						|
COMMIT;
 | 
						|
 | 
						|
   Po zmene spustte príkaz VACUUM FULL, aby doslo k uvolnení diskového
 | 
						|
   prostoru pouzitého v tu chvíli jiz neplatnými záznamy.
 | 
						|
   
 | 
						|
  4.4) Jaká je maximální velikost rádku, tabulky a databáze?
 | 
						|
  
 | 
						|
   PostgreSQL má tato omezení:
 | 
						|
   
 | 
						|
   Maximální velikost databáze:       neomezena (existují 32TB db)
 | 
						|
   Maximální velikost tabulky:        32 TB
 | 
						|
   Maximální velikost rádky:          480GB
 | 
						|
   Maximální velikost polozky         1 GB
 | 
						|
   Maximální pocet rádku v tabulce:   neomezeno
 | 
						|
   Maximální pocet sloupcu v tabulce: 250-1600 podle typu
 | 
						|
   Maximální pocet indexu na tabulce: neomezeno
 | 
						|
   
 | 
						|
   Ve skutecnosti nic není neomezeno, limitem bývá vzdy dostupná disková
 | 
						|
   pamet nebo velikost operacní pameti. Pokud máte nekterou z techto
 | 
						|
   hodnot neobvykle velkou, muze dojít ke snízení výkonu.
 | 
						|
   
 | 
						|
   Maximální velikost tabulky je 32 TB a nevyzaduje podporu velkých
 | 
						|
   souboru operacním systémem. Velké tabulky se ukládají do nekolika 1 GB
 | 
						|
   souboru takze limity souborového systému nejsou podstatné.
 | 
						|
   
 | 
						|
   Maximální velikost tabulky a maximální pocet sloupcu muzeme
 | 
						|
   zectyrnásobit nastavením velikosti bloku na 32K.
 | 
						|
   
 | 
						|
   Indexy jsou povolené pouze na sloupcích jejichz délka je mensí nez
 | 
						|
   2000 znaku. Pokud tuto délku prekrocíme a index potrebujeme pro
 | 
						|
   zajistení jednoznacnosti, je vhodnejsí pouzít funkcionální index nad
 | 
						|
   MD5 funkcí nebo fulltextový index.
 | 
						|
   
 | 
						|
  4.5) Kolik diskového prostoru je potreba k ulození dat z normálního textového
 | 
						|
  souboru?
 | 
						|
  
 | 
						|
   PostgreSQL vyzaduje az petinásobek diskového prostoru k ulození dat z
 | 
						|
   textového souboru.
 | 
						|
   
 | 
						|
   Napríklad, uvazujme soubor se 100 tisíci rádky obsahující na kazdé
 | 
						|
   rádce celé císlo a textový popis. Text je v prumerne dvacet bytu
 | 
						|
   dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze
 | 
						|
   obsahující odpovídající data bude zhruba 5.2 MB.
 | 
						|
    24 bytu: hlavicka rádku (priblizne)
 | 
						|
    24 bytu: jedna celocíselná polozka a jedna textová
 | 
						|
   + 4 byty: ukazatel na stránku k entici
 | 
						|
   ------------------------------------------------------
 | 
						|
    52 bytu na rádek
 | 
						|
 | 
						|
   Velikost datové stránky PostgreSQL je 8192 bytu (8KB)
 | 
						|
 8192 bytu na stránce
 | 
						|
---------------------- = 158 rádek na stránku
 | 
						|
  52 bytu za rádek
 | 
						|
 | 
						|
100000 rádek
 | 
						|
----------------------- = 633 stránek (zaokrouhleno nahoru)
 | 
						|
   158 rádek na stránce
 | 
						|
 | 
						|
633 datových stránek * 8192 bytu na kazdou stránku = 5,185,536 bytu (5.2 MB)
 | 
						|
 | 
						|
   Indexy nemají tak velkou rezii, ale mohou být také velké, protoze
 | 
						|
   obsahují indexovaná data.
 | 
						|
   
 | 
						|
   Hodnoty NULL jsou ulozeny v bitmapách, takze zabírají jen velmi málo
 | 
						|
   diskového prostoru.
 | 
						|
   
 | 
						|
  4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
 | 
						|
  
 | 
						|
   Kazdý dotaz nemusí nutne pouzít existující indexy. Index se pouzije
 | 
						|
   tehdy, kdyz je tabulka vetsí nez urcitá minimální velikost, a dotaz
 | 
						|
   vybírá pouze procentuálne malou cást rádku tabulky. To proto, ze
 | 
						|
   náhodný prístup k disku daný ctením indexu muze být pomalejsí nez
 | 
						|
   lineární ctení tabulky nebo sekvencní ctení.
 | 
						|
   
 | 
						|
   PostgreSQL rozhoduje o pouzití indexu na základe statistiky prístupu k
 | 
						|
   tabulce. Tyto statistiky se shromazdují príkazy VACUUM ANALYZE nebo
 | 
						|
   ANALYZE. Díky statistikám má optimizer informaci o poctu rádek v
 | 
						|
   tabulce a muze lépe rozhodnout o pouzití indexu. Statistiky se uplatní
 | 
						|
   pri urcení optimálního poradí a metody spojení tabulek. Statistiky by
 | 
						|
   se meli aktualizovat opakovane, tak jak se mení obsah tabulek.
 | 
						|
   
 | 
						|
   Indexy nejsou obycejne pouzity pro setrídení nebo spojení tabulek.
 | 
						|
   Sekvencní zpracování následované explicitním trídením je obycejne
 | 
						|
   rychlejsí nez pouzití indexu na velké tabulce.
 | 
						|
   
 | 
						|
   Jinak je tomu v prípade pouzití LIMIT a ORDER BY, pri kterém se
 | 
						|
   vetsinou index pouzije, jelikoz je výsledkem pouze malá cást tabulky.
 | 
						|
   
 | 
						|
   Pokud si myslíte, ze optimizer mylne zvolil sekvencní prohledávání
 | 
						|
   tabulky, pouzijte príkaz SET enable_seqscan TO 'off' a zkuste zda je
 | 
						|
   prohledávání s indexem rychlejsí.
 | 
						|
   
 | 
						|
   Pri vyhledávání na základe vzoru jako je napr. operátor LIKE nebo ~ se
 | 
						|
   indexy pouzijí pouze za urcitých skutecností:
 | 
						|
     * zacátek hledaného vzoru musí být ukotven k zacátku, tj.
 | 
						|
          + vzor LIKE nesmí zacínat %
 | 
						|
          + ~ regulární výraz musí zacínat ^
 | 
						|
     * vzor nesmí zacínat intervalem, napr. [a-e]
 | 
						|
     * vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~*
 | 
						|
       nepouzívá indexy. Muzete ale pouzít funkcionální indexy, které
 | 
						|
       jsou popsány v sekci 4.8
 | 
						|
     * pri inicializaci databáze (initdb) musí být pouzito C locale nebo
 | 
						|
       vytvorte speciální text_pattern_index, který umozní, pri
 | 
						|
       respektování zmínených podmínek pouzití indexu operací LIKE. Pro
 | 
						|
       vyhledávání celých slov je mozné a výhodné pouzít fulltext.
 | 
						|
       
 | 
						|
  4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
 | 
						|
  
 | 
						|
   Podívejte se do nápovedy k príkazu EXPLAIN.
 | 
						|
   
 | 
						|
  4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index pro case
 | 
						|
  insensitive hledání?
 | 
						|
  
 | 
						|
   Vyhledávání prostrednictvím regulárních vzoru zajistuje operátor ~,
 | 
						|
   který je case-sensitive. Jeho case-insensitive varianta je operátor
 | 
						|
   ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE.
 | 
						|
   
 | 
						|
   Case-insensitive vyhledání se resí:
 | 
						|
SELECT *
 | 
						|
FROM tab
 | 
						|
WHERE lower(col) = 'abc';
 | 
						|
 | 
						|
   Tento dotaz nepouzije standardní index. Musíte pouzít tzv.
 | 
						|
   funkcionální index:
 | 
						|
CREATE INDEX tabindex ON tab (lower(col));
 | 
						|
 | 
						|
   Pokud index vytvoríme jako unikátní, tak muzeme ukládat retezce
 | 
						|
   obsahující malá i velká písmena, ale nikoliv retezce, které se od sebe
 | 
						|
   odlisují jen v malých a velkých písmenech. K zajistení zápisu retezce
 | 
						|
   obsahující pouze malá nebo pouze velká písmena pouzijte CHECK kontroly
 | 
						|
   nebo triggery.
 | 
						|
   
 | 
						|
  4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit dva
 | 
						|
  retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli je polozka
 | 
						|
  NULL nebo ne?
 | 
						|
  
 | 
						|
   Pokud chcete testovat hodnotu NULL pouzijte operátor IS:
 | 
						|
   SELECT *
 | 
						|
   FROM tab
 | 
						|
   WHERE col IS NULL;
 | 
						|
 | 
						|
   K spojení retezcu, které mohou obsahovat hodnotu NULL, pouzívejte
 | 
						|
   funkci COALESCE(), napr.:
 | 
						|
   SELECT COALESCE(col1, '') || COALESCE(col2, '')
 | 
						|
   FROM tab
 | 
						|
 | 
						|
   Pokud chcete trídit podle hodnoty NULL, pouzijte výraz IS NULL nebo IS
 | 
						|
   NOT NULL v klauzuli ORDER. Hodnota pravda má prednost pred hodnotou
 | 
						|
   false a tedy pokud pouzijete:
 | 
						|
   SELECT *
 | 
						|
   FROM tab
 | 
						|
   ORDER BY (col IS NOT NULL)
 | 
						|
 | 
						|
   tak záznamy s NULL budou na zacátku setrídených dat.
 | 
						|
   
 | 
						|
  4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
 | 
						|
  
 | 
						|
   Typ        Interní název Poznámky
 | 
						|
   VARCHAR(n) varchar       n urcuje maximální délku
 | 
						|
   CHAR(n)    bpchar        retezec je do dané délky rozsíren mezerami
 | 
						|
   TEXT       text          bez omezení délky
 | 
						|
   BYTEA      bytea         pole bytu nespecifikované délky
 | 
						|
   "char"     char          jeden znak
 | 
						|
   
 | 
						|
   Na interní názvy muzete narazit v systémovém katalogu nebo v nekterých
 | 
						|
   chybových hláseních.
 | 
						|
   
 | 
						|
   Ctyri první typy jsou tzv. varlena typy (první ctyri byty na disku
 | 
						|
   jsou obsahují délku, ostatní obsahují vlastní data). Skutecne obsazený
 | 
						|
   prostor je tedy o neco málo vetsí nez deklarovaná velikost. Na druhou
 | 
						|
   stranu, delsí retezce jsou komprimovány, takze obsazený prostor na
 | 
						|
   disku muze být mensí nez se ceká.
 | 
						|
   
 | 
						|
   VARCHAR(n) je vhodný pro ukládání ruzne dlouhých retezcu u kterých
 | 
						|
   známe délkové omezení, TEXT pro retezce bez omezení délky (maximum je
 | 
						|
   jeden gigabyte).
 | 
						|
   
 | 
						|
   CHAR(n) se pouzívá pro ulození stejne dlouhých retezcu. CHAR(n) doplní
 | 
						|
   mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak
 | 
						|
   jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot.
 | 
						|
   Vsechny zmínené typy mají podobné výkonové charakteristiky.
 | 
						|
   
 | 
						|
  4.11.1) Jak vytvorit serial/auto-increment polozku?
 | 
						|
  
 | 
						|
   V PostgreSQL muzete pouzít datový typ SERIAL. Jeho pouzitím se
 | 
						|
   automaticky vytvorí sekvence. Napríklad:
 | 
						|
CREATE TABLE person (
 | 
						|
  id   SERIAL,
 | 
						|
  name TEXT
 | 
						|
);
 | 
						|
 | 
						|
   je automaticky transformováno na:
 | 
						|
CREATE SEQUENCE person_id_seq;
 | 
						|
CREATE TABLE person (
 | 
						|
  id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
 | 
						|
  name TEXT
 | 
						|
);
 | 
						|
 | 
						|
   Podrobnejsí informace najdete v manuálu v popisu príkazu
 | 
						|
   create_sequence.
 | 
						|
   
 | 
						|
  4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
 | 
						|
  
 | 
						|
   Nejjednodussím zpusob, jak získat vygenerovanou hodnotu typu SERIAL,
 | 
						|
   je vyuzít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto:
 | 
						|
INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
 | 
						|
 | 
						|
   Také muzete pouzít funkci nextvall() a její výsledek pouzít v príkazu
 | 
						|
   INSERT, nebo zavolat currval() po provedení príkazu INSERT.
 | 
						|
   
 | 
						|
  4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
 | 
						|
  prostredí?
 | 
						|
  
 | 
						|
   Ne, currval vrací vzdy hodnotu, která byla vygenerována pro vás.
 | 
						|
   
 | 
						|
  4.11.4) Proc není vygenerované císlo pouzito pri prerusení transakce?Proc
 | 
						|
  vznikají díry v císlování prostrednictvím sekvence nebo typu SERIAL?
 | 
						|
  
 | 
						|
   Poté co sekvence vygeneruje nové císlo, tak se nedochází k zamcení
 | 
						|
   sekvence a neceká se na úspesné nebo neúspesné dokoncení transakce.
 | 
						|
   Odvoláním transakce, která si vyzádala císla sekvence se tato císla
 | 
						|
   nenávratne ztratí.
 | 
						|
   
 | 
						|
  4.12) Co to je OID? Co je to CTID?
 | 
						|
  
 | 
						|
   V prípade, ze tabulku nezalozíme s atributem WITHOUT OIDS, tak má
 | 
						|
   kazdý rádek unikátní identifikacní císlo OID. Toto císlo je 4 bajtové
 | 
						|
   celé císlo, které je jedinecné v celé instalaci. Pretece po 4
 | 
						|
   miliardách rádku. PostgreSQL pouzívá OIDs jako interní linky v
 | 
						|
   interních systémových tabulkách.
 | 
						|
   
 | 
						|
   K získání unikátního císla v nesystémových tabulkách je vhodnejsí
 | 
						|
   pouzití typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzívá pouze
 | 
						|
   pro jednu tabulku a je tudíz méne náchylná na pretecení. Pokud byste
 | 
						|
   se toho obávali, pouzijte typ SERIAL8.
 | 
						|
   
 | 
						|
   CTID se pouzívá k identifikaci konkrétního fyzického rádku. CTID se
 | 
						|
   mení pokud je rádek modifikován nebo znovu nacten. Pouzívají ho indexy
 | 
						|
   jako adresaci fyzických rádku.
 | 
						|
   
 | 
						|
  4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
 | 
						|
  AllocSetAlloc()"?
 | 
						|
  
 | 
						|
   Pravdepodobne jste vycerpal dostupnou virtuální pamet, nebo tvuj
 | 
						|
   kernel má prílis nízké limity u urcitých zdroju. Pred startem
 | 
						|
   PostgreSQL vyzkousejte:
 | 
						|
ulimit -d 262144
 | 
						|
limit datasize 256m
 | 
						|
 | 
						|
   Mozná, ze se projde pouze jeden príkaz - zálezí to na vasem shellu.
 | 
						|
   Mel by zvednout limity datových segmentu vasich procesu na dostatecne
 | 
						|
   velkou hodnotu a snad umoznit dokoncení dotazu. Zmena limitu se bude
 | 
						|
   aplikovat pouze na aktuální proces a na vsechny nove vytvorené
 | 
						|
   procesy. Jestlize máte problém s SQL klientem, protoze vám server
 | 
						|
   vrátil prílis dat, zkuste to pred startem klienta.
 | 
						|
   
 | 
						|
  4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
 | 
						|
  
 | 
						|
   V psql napiste:
 | 
						|
SELECT version();
 | 
						|
 | 
						|
  4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální cas?
 | 
						|
  
 | 
						|
   Pouzijte CURRENT_TIMESTAMP:
 | 
						|
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
 | 
						|
 | 
						|
  4.16) Jak provést vnejsí spojení (outer join)?
 | 
						|
  
 | 
						|
   PostgreSQL podporuje standardní SQL syntaxi pro vnejsí spojení. Zde
 | 
						|
   jsou dva príklady:
 | 
						|
SELECT *
 | 
						|
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
 | 
						|
 | 
						|
   nebo
 | 
						|
SELECT *
 | 
						|
FROM t1 LEFT OUTER JOIN t2 USING (col);
 | 
						|
 | 
						|
   Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a jeste
 | 
						|
   vrátí vsechny nespárované rádky t2 (ty, které nedohledá v t2). RIGHT
 | 
						|
   JOIN by pripojil vsechny nespárované rádky z t2. FULL JOIN vrátí
 | 
						|
   vsechny spárované rádky i vsechny zbývající rádky z obou tabulek.
 | 
						|
   Klícové slovo OUTER je volitelné. Bezná operace JOIN se také oznacuje
 | 
						|
   jako vnitrní spojení.
 | 
						|
   
 | 
						|
  4.17) Jak provést dotaz napríc nekolika databázemi?
 | 
						|
  
 | 
						|
   Neexistuje zádný zpusob, jak se v dotazu odkazovat na tabulky z jiné
 | 
						|
   nez aktuální databáze. A to protoze má systémové tabulky ulozené
 | 
						|
   nezávisle v kazdé databázi a není tak úplne zrejmé, jak by se dotaz
 | 
						|
   provedený napríc databázemi mel chovat.
 | 
						|
   
 | 
						|
   Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomocí
 | 
						|
   funkcí. Druhý zpusob je simultální pripojení klienta ke vsem
 | 
						|
   relevantním databázím a sloucení výsledku na strane klienta.
 | 
						|
   
 | 
						|
  4.18) Muze funkce vrátit více rádku nebo sloupcu?
 | 
						|
  
 | 
						|
   Jde to jednoduse pomocí set-returning funkce. Více na
 | 
						|
   http://www.postgresql.org/docs/techdocs.17.
 | 
						|
   
 | 
						|
  4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
 | 
						|
  
 | 
						|
   Nechteným vedlejsím efektem kesování SQL dotazu v PL/pgSQL funkci je
 | 
						|
   problém s neplatnými odkazy na docasné tabulky, které byly od prvního
 | 
						|
   spustení funkce zruseny a znovu vytvoreny pred dalsím spustením
 | 
						|
   PL/pgSQL funkce. Resením je pouzít príkaz EXECUTE a to proto, ze
 | 
						|
   provádecí plán SQL príkazu spousteného príkazem EXECUTE se vytvárí
 | 
						|
   pokazdé znovu (neukládá se do cache).
 | 
						|
   
 | 
						|
   Tento problém by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssích
 | 
						|
   verzích.
 | 
						|
   
 | 
						|
  4.20) Jaké jsou moznosti replikace databází?
 | 
						|
  
 | 
						|
   Replikaci databáze umoznuje nekolik technoligií. Kazdá má urcité
 | 
						|
   výhody a nevýhody.
 | 
						|
   
 | 
						|
   Master/Slave replikaci podporuje jeden hlavní server, který prijímá
 | 
						|
   pozadavky na zápis a ctení, a nekolik podrízených serveru, které
 | 
						|
   umoznují pouze ctení (SELECT). Nejrozsírenejsím volne dostupným
 | 
						|
   resením tohoto typu je Slony-I.
 | 
						|
   
 | 
						|
   Replikace typu Multi-master podporuje existenci nekolika serveru s
 | 
						|
   povoleným zápisem na více replikovaných serverech. Toto resení zvysuje
 | 
						|
   zátez serveru, protoze je nutná synchronizace serveru.
 | 
						|
   Nejrozsírenejsím volne dostupným resením je PGCluster.
 | 
						|
   
 | 
						|
   Jeste existuje nekolik komercních a hardware resení replikací
 | 
						|
   podporujících ruzné modely replikace.
 | 
						|
   
 | 
						|
  4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proc
 | 
						|
  jsou velká písmena v názvech automaticky prevedena na malá písmena?
 | 
						|
  
 | 
						|
   Nejcastejsím duvodem nerozpoznání názvu objektu bylo pouzití vlození
 | 
						|
   názvu sloupce nebo tabulky mezi uvozovky pri zakládání tabulky. Pokud
 | 
						|
   se název zapíse mezi uvozovky, pak je case sensitive, a v dusledku
 | 
						|
   toho je nutné názvy techto sloupcu nebo tabulek v SQL príkazech také
 | 
						|
   vkládat mezi uvozovky (pokud obsahují velká písmena). Nekteré
 | 
						|
   programy, jako je napríklad pgAdmin, automaticky pouzívají uvozovky.
 | 
						|
   Takze pokud chcete, aby systém identifikoval identifikátor, musíte:
 | 
						|
     * nepouzívat uvozovky v príkazu CREATE TABLE
 | 
						|
     * v identifikátoru pouzít pouze malá písmena
 | 
						|
     * v dotazech vkládat identifikátory do uvozovek
 |