mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			1118 lines
		
	
	
		
			48 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1118 lines
		
	
	
		
			48 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
                     Často kladené dotazy (FAQ) PostgreSQL
 | 
						|
                                       
 | 
						|
   Poslední aktualizace: Středa 23. června 21:10:00 EST 2004
 | 
						|
   
 | 
						|
   Současný správce: Bruce Momjian (pgman@candle.pha.pa.us)
 | 
						|
   
 | 
						|
   Přeložil: Pavel Stěhule (stehule@kix.fsv.cvut.cz)
 | 
						|
   
 | 
						|
   Aktuální verzi tohoto dokumentu naleznete na adrese:
 | 
						|
   http://www.PostgreSQL.org/docs/faqs/FAQ.html. Český překlad na adrese:
 | 
						|
   http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html.
 | 
						|
   
 | 
						|
   Odpovědi na dotazy relevantní ke konkrétním platformám lze nalézt na
 | 
						|
   adrese: http://www.PostgreSQL.org/docs/index.html.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                               Obecné otázky
 | 
						|
                                      
 | 
						|
   1.1) Co je PostgreSQL? Jak se vyslovuje?
 | 
						|
   1.2) Jaká je licence na PostgreSQL?
 | 
						|
   1.3) Na kterých Unixex lze spustit PostgreSQL?
 | 
						|
   1.4) Které ne-unixové platformy jsou podporované?
 | 
						|
   1.5) Kde mohu získat PostgreSQL?
 | 
						|
   1.6) Kde mohu získat podporu?
 | 
						|
   1.7) Kde je poslední verze?
 | 
						|
   1.8) Jaká je dostupná dokumentace?
 | 
						|
   1.9) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?
 | 
						|
   1.10) Jak se mohu naučit SQL?
 | 
						|
   1.11) Nemá PostgreSQL problémy s rokem 2000?
 | 
						|
   1.12) Jak se připojit k vývojářskému týmu?
 | 
						|
   1.13) Kam podat report o chybě?
 | 
						|
   1.14) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
 | 
						|
   1.15) Jak lze finančně pomoci PostgreSQL?
 | 
						|
   
 | 
						|
                             User client dotazy
 | 
						|
                                      
 | 
						|
   2.1) Kde naleznu ODBC ovladače pro PostgreSQL?
 | 
						|
   2.2) Jaké nástroje lze použít pro PostgreSQL a web?
 | 
						|
   2.3) Existuje grafické rozhraní pro PostgreSQL?
 | 
						|
   2.4) Které programovací jazyky mají podporu pro PostgreSQL?
 | 
						|
   
 | 
						|
                           Administrativní dotazy
 | 
						|
                                      
 | 
						|
   3.1) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?
 | 
						|
   3.2) Při startu postmaster, dostanu chybové hlášení Bad System Call
 | 
						|
   nebo core dump. Proč?
 | 
						|
   3.3) Při startu postmastera dostanu hlášení o chybě IpcMemoryCreate.
 | 
						|
   Proč?
 | 
						|
   3.4) Při startu postmastera dostanu hlášení o chybě
 | 
						|
   IpcSemaphoreCreate. Proč?
 | 
						|
   3.5) Jak povolit nebo zakázat přístup z jiných stanic?
 | 
						|
   3.6) Jak ladit databázový stroj na lepší výkon?
 | 
						|
   3.7) Jaké jsou možnosti ladění?
 | 
						|
   3.8) Proč dostanu "Sorry, too many clients", když se zkouším připojit?
 | 
						|
   3.9) K čemu slouží adresář pgsql_tmp?
 | 
						|
   3.10) Proč je požadováno dump a obnovení (load) databáze během upgrade
 | 
						|
   mezi velkými verzemi PostgreSQL?
 | 
						|
   
 | 
						|
                              Provozní dotazy
 | 
						|
                                      
 | 
						|
   4.1) Čím se liší binární a normální kurzor?
 | 
						|
   4.2) Jak získat pouze první řádek dotazu? Náhodný řádek?
 | 
						|
   4.3) Jak získám seznam tabulek nebo jinak jak jej získá psql?
 | 
						|
   4.4) Jak odstraním sloupec tabulky, jak změním jeho typ?
 | 
						|
   4.5) Jaká je maximální velikost řádku, tabulky a databáze?
 | 
						|
   4.6) Kolik diskového prostoru je potřeba k uložení dat z normálního
 | 
						|
   textového souboru?
 | 
						|
   4.7) Jak získám seznam vytvořených tabulek, indexů, databází?
 | 
						|
   4.8) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?
 | 
						|
   4.9) Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz?
 | 
						|
   4.10) Co to je R-tree index?
 | 
						|
   4.11) Co je Genetic Query Optimizer?
 | 
						|
   4.12) Jak provést vyhledávání regulárního výrazu case sensitiv,
 | 
						|
   insensitiv? Jak použít index pro case insensitive vyhledávání?
 | 
						|
   4.13) Jak v dotazu detekovat, že položka je NULL?
 | 
						|
   4.14) Jaké jsou rozdíly mezi různými znakovými typy?
 | 
						|
   4.15.1) Jak vytvořit serial/auto-increment pole?
 | 
						|
   4.15.2) Jak získat hodnotu SERIAL po vložení řádku?
 | 
						|
   4.15.3) Nepovede currval() a nextval() k rozhození podmínek při
 | 
						|
   souběhu s jinými uživateli?
 | 
						|
   4.15.4) Proč není vygenerované číslo použito při přerušení transakce?
 | 
						|
   Proč vznikají díry v číslování vlastní sekvencí/SERIAL sloupce?
 | 
						|
   4.16) Co to je OID? Co je to TID?
 | 
						|
   4.17) Jaký je význam některých výrazů použitých v PostgreSQL?
 | 
						|
   4.18) Proč jsem získal chybové hlášení "ERROR: Memory exhausted in
 | 
						|
   AllocSetAlloc()"?
 | 
						|
   4.19) Jak se dozvím, kterou verzi PostgreSQL používám?
 | 
						|
   4.20) Proč operace s velkými objekty končí "invalid large obj
 | 
						|
   descriptor"?
 | 
						|
   4.21) Jak vytvořit sloupec obsahující implicitně aktuální datum?
 | 
						|
   4.22) Proč jsou moje vnořené dotazy používající IN tak pomalé?
 | 
						|
   4.23) Jak provést vnější spojení (outer join)?
 | 
						|
   4.24) Jak provést dotaz napříč několika databázemi?
 | 
						|
   4.25) Může funkce vrátit více řádků nebo sloupců?
 | 
						|
   4.26) Proč nelze spolehlivě vytvářet a rušit dočasné tabulky v
 | 
						|
   PL/pgSQL funkcích?
 | 
						|
   4.27) Jaké jsou možnosti replikace databází?
 | 
						|
   4.28) Jaké jsou možnosti šifrování databází?
 | 
						|
   
 | 
						|
                           Rozšiřování PostgreSQL
 | 
						|
                                      
 | 
						|
   5.1) Napsal jsem UDF funkci, PostgreSQL však končí dump core?
 | 
						|
   5.2) Jak mohu přispět nějakými šikovnými datovými typy a funkcemi do
 | 
						|
   PostgreSQL?
 | 
						|
   5.3) Jak napsat funkci v C vracející ntici?
 | 
						|
   5.4) Modifikoval jsem zdrojové soubory. Tato změna nebyla při
 | 
						|
   rekompilaci vzata v potaz. Proč?
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                               Obecné otázky
 | 
						|
                                      
 | 
						|
    1.1) Co je PostgreSQL? Jak se vyslovuje?
 | 
						|
    
 | 
						|
   PostgreSQL se vyslovuje Post-Gres-Q-L. Zvukový záznam je dostupný na
 | 
						|
   adrese .
 | 
						|
   
 | 
						|
   PostgreSQL vychází z databáze POSTGRES (a stále je někdy označován
 | 
						|
   zjednodušeně jako Postgres) - výzkumného prototypu DBMS nové generace.
 | 
						|
   Z postgresu byl převzat silný datový model a bohatý soubor datových
 | 
						|
   typů a jeho dotazovací jazyk PostQuel byl nahrazen rozšířenou
 | 
						|
   podmnožinou jazyka SQL. PostgreSQL lze používat bez omezení a jeho
 | 
						|
   zdrojové kódy jsou volně k dispozici.
 | 
						|
   
 | 
						|
   PostgreSQL vyvýjí tým vývojářů přihlášených do vývojářské konference
 | 
						|
   PostgreSQL. Současným koordinátorem je Marc G. Fournier
 | 
						|
   (scrappy@PostgreSQL.org). (viz 1.6 - jak se zapojit). Tento tým je
 | 
						|
   zodpovědný za veškerý vývoj PostgreSQL. Jedná se o veřejný projekt,
 | 
						|
   který není řízen žádnou firmou. Pokud se chcete zapojit, přečtěte si
 | 
						|
   developer's FAQ na adrese
 | 
						|
   http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html
 | 
						|
   
 | 
						|
   Autory první verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
 | 
						|
   portace, testování, ladění a rozšiřování kódu se zapojilo mnoho
 | 
						|
   dalších vývojářů . Původni kód Postgresu, ze kterého PostgreSQL
 | 
						|
   vychází, je výsledkem úsilí mnoha studentů a programátorů pracujících
 | 
						|
   pod vedením prof. Michaela Stonebrakera na University of California v
 | 
						|
   Berkley.
 | 
						|
   
 | 
						|
   Původní název software z Berkley byl Postgres. Po přidání jazyka SQL
 | 
						|
   se název změnil na Postgres95. Koncem roku 1996 byl RDBMS přejmenován
 | 
						|
   na PostgreSQL.
 | 
						|
   
 | 
						|
    1.2) Jaká je licence na PostgreSQL?
 | 
						|
    
 | 
						|
   PostgreSQL je předmětem následujících autorských práv:
 | 
						|
   
 | 
						|
   Dílčí Copyright (c) 1996-2005, PostgreSQL Global Development Group
 | 
						|
   Dílčí Copyright (c) 1994-6, Regents of the University of California
 | 
						|
   
 | 
						|
   Uděluje se oprávnění k užití, rozmnožování, provádění úprav a
 | 
						|
   rozšiřování tohoto softwaru a dokumentace k němu, pro jakékoli účely,
 | 
						|
   bez licenčního poplatku a bez písemné licenční smlouvy, za podmínky,
 | 
						|
   že na všech jeho kopiích je uvedeno oznámení o výše uvedených právech,
 | 
						|
   jakož i obsah tohoto a dvou následujících odstavců.
 | 
						|
   
 | 
						|
   THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ŽÁDNÉM
 | 
						|
   PŘÍPADĚ ODPOVĚDNA ŽÁDNÉ TŘETÍ OSOBĚ ZA PŘÍMOU, NEPŘÍMOU, ZVLÁŠTNÍ,
 | 
						|
   NAHODILOU NEBO VÝSLEDNOU ŠKODU, VČETNĚ UŠLÉHO ZISKU, ZPůSOBENOU UŽITÍM
 | 
						|
   TOHOTO SOFTWARU A DOKUMENTACE K NĚMU, A TO I V PŘÍPADĚ, ŽE THE
 | 
						|
   UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOŽNOSTI VZNIKU TAKOVÉ
 | 
						|
   ŠKODY.
 | 
						|
   
 | 
						|
   HE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO
 | 
						|
   NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VýROBKU KE
 | 
						|
   SPECIFICKýM ÚČELůM. NÍŽE UVEDENý SOFTWARE JE POSKYTNUT "JAK STOJÍ A
 | 
						|
   LEŽÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO
 | 
						|
   ÚDRŽBU, PODPORU, AKTUALIZACI, VYLEPŠENÍ NEBO MODIFIKACI.
 | 
						|
   
 | 
						|
   Výše uvedené je BSD licence, běžná licence otevřeného zdroje. Není zde
 | 
						|
   žádné omezení ohledně užití kódu zdroje. Jsme s tím spokojeni a nemáme
 | 
						|
   v úmyslu na této skutečnosti cokoli měnit.
 | 
						|
   
 | 
						|
    1.3) Na kterých Unixex lze spustit PostgreSQL?
 | 
						|
    
 | 
						|
   PostgreSQL běží na všech moderních unixových platformách. V
 | 
						|
   instalačních instrukcích naleznete aktuální seznam všech platforem na
 | 
						|
   kterých byla testováním ověřena funkcionalita PostgreSQL.
 | 
						|
   
 | 
						|
    1.4) Které ne-unixové platformy jsou podporované?
 | 
						|
    
 | 
						|
   Klient
 | 
						|
   
 | 
						|
   Knihovna libpq, psql a některé další moduly byly přeloženy pro MS
 | 
						|
   Windows. Klienta lze provozovat na MS Windows, ten prostřednictvím
 | 
						|
   TCP/IP protokolu komunikuje se serverem běžícím na některé z
 | 
						|
   podporovaných Unixových platforem. K překladu lze použít win32.mak a
 | 
						|
   Win32 knihovny libpq a psql. K databázi PostgerSQL lze přistupovat
 | 
						|
   skrze rozhraní ODBC.
 | 
						|
   
 | 
						|
   Server
 | 
						|
   
 | 
						|
   Server může být na WindowsNT a Win2k provozován pouze s knihovnou
 | 
						|
   Cygwin, Cygnus Unix/NT porting library. Více pgsql/doc/FAQ_MSWIN v
 | 
						|
   distribuci nebo MS Windows FAQ na adrese
 | 
						|
   http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN.
 | 
						|
   
 | 
						|
   Na nativním portu pro MS Win NT/2000/XP se pracuje. Další informace o
 | 
						|
   aktuálním stavu PostgreSQL pro Windows naleznet na adrese
 | 
						|
   http://techdocs.postgresql.org/guides/Windows a
 | 
						|
   http://momjian.postgresql.org/main/writings/pgsql/win32.html.
 | 
						|
   
 | 
						|
   Existující port pro Novell Netware 6 naleznete na
 | 
						|
   http://forge.novell.com.
 | 
						|
   
 | 
						|
    1.5) Kde mohu získat PostgreSQL?
 | 
						|
    
 | 
						|
   Primárním anonymním ftp serverem pro PostgreSQL je
 | 
						|
   ftp://ftp.PostgreSQL.org/pub. Seznam zrcadel naleznete na našich
 | 
						|
   webových stránkách.
 | 
						|
   
 | 
						|
    1.6) Kde mohu získat podporu?
 | 
						|
    
 | 
						|
   Hlavní mailová konference je: pgsql-general@PostgreSQL.org. Slouží k
 | 
						|
   diskuzím ohledně PostgreSQL. Přihlásíte se zasláním mailu obsahující
 | 
						|
   následující řádky v těle dopisu (nikoliv v záhlaví - subjectu):
 | 
						|
    subscribe
 | 
						|
    end
 | 
						|
 | 
						|
   na adresu pgsql-general-request@PostgreSQL.org.
 | 
						|
   
 | 
						|
   Můžete si vyžádat denní přehled (diggest), který má zhruba 30K denně
 | 
						|
   zpráv.
 | 
						|
   
 | 
						|
   Konference psql-bugs je určena k zasílání zpráv o chybách. Pro
 | 
						|
   přihlášení pošlete mail se stejným obsahem jako v předchozím případě
 | 
						|
   na adresu pgsql-bugs-request@PostgreSQL.org.
 | 
						|
   
 | 
						|
   Do vývojářské konference se přihlásíte odesláním dopisu s již
 | 
						|
   zmiňovaným obsahem na mailto:pgsql-hackers-request@PostgreSQL.org.
 | 
						|
   
 | 
						|
   Seznam dalších konferencí naleznete na stránkách PostgreSQL:
 | 
						|
   
 | 
						|
     http://www.postgresql.org
 | 
						|
     
 | 
						|
    1.7) Jaká je poslední verze?
 | 
						|
    
 | 
						|
   Poslední verze PostgreSQL je 7.4.3. Plánujeme uvolnit významnou verzi
 | 
						|
   každých šest až osm měsíců.
 | 
						|
   
 | 
						|
    1.8) Jaká je dostupná dokumentace?
 | 
						|
    
 | 
						|
   Různé manuály, manuálové stránky a několik malých testovacích příkladů
 | 
						|
   jsou součásti distribuce. Podívejte se do adresáře /doc. Manuály jsou
 | 
						|
   přístupné online na http://www.PostgreSQL.org/docs.
 | 
						|
   
 | 
						|
   Na adresách http://www.PostgreSQL.org/docs/awbook.html a
 | 
						|
   http://www.commandprompt.com/ppbook/ naleznezte dvě online knihy o
 | 
						|
   PostgreSQL. Seznam dostupné literatury je na
 | 
						|
   http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor
 | 
						|
   technických článků s tematikou PostgresQL najdete na
 | 
						|
   http://techdocs.PostgreSQL.org/.
 | 
						|
   
 | 
						|
   psql má užitečný metapříkaz \d sloužící k zobrazení informací o
 | 
						|
   typech, operátorech, funkcí, agregačních funkcí atd.
 | 
						|
   
 | 
						|
   Více dokumentace naleznete na našich webových stránkách.
 | 
						|
   
 | 
						|
    1.9) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?
 | 
						|
    
 | 
						|
   PostgreSQL podporuje rozšířenou podmnožinu SQL-92. V našem TODO
 | 
						|
   najdete seznam známých chyb, chybějících vlastností a seznam
 | 
						|
   vlastností, které budou do systému implementovány v budoucnu (včetně
 | 
						|
   priorit).
 | 
						|
   
 | 
						|
    1.10) Jak se mohu naučit SQL?
 | 
						|
    
 | 
						|
   V knize The PostgreSQL book na
 | 
						|
   http://www.PostgreSQL.org/docs/awbook.html je vysvětlen jazyk SQL
 | 
						|
   (vyšla česky). Další dostupnou knihou je
 | 
						|
   http://www.commandprompt.com/ppbook. Kvalitní návody naleznete na
 | 
						|
   http://www.intermedia.net/support/sql/sqltut.shtm, a na
 | 
						|
   http://sqlcourse.com.
 | 
						|
   
 | 
						|
   Další je Teach Yourself SQL in 21 days, Second Edition na
 | 
						|
   http://members.tripod.com/er4ebus/sql/index.htm.
 | 
						|
   
 | 
						|
   Mnoho uživatelů doporučuje The Practical SQL Handbook, Bowman, Judith
 | 
						|
   S., et al., Addison-Wesley. Jiní preferují The Complete Reference SQL,
 | 
						|
   Groff et al., McGraw-Hill.
 | 
						|
   
 | 
						|
    1.11) Nemá PostgreSQL problémy s rokem 2000?
 | 
						|
    
 | 
						|
   Nemá, můžeme pracovat s datumy po roce 2000 našeho letopočtu i před
 | 
						|
   rokem 2000 př.n.l.
 | 
						|
   
 | 
						|
    1.12) Jak se připojit k vývojářskému týmu?
 | 
						|
    
 | 
						|
   Nejdříve si stáhněte nejnovější zdroje a přečtěte si vývojářskou
 | 
						|
   dokumentaci na našem webu nebo v distribuci. Pak se přihlašte do
 | 
						|
   konferencí pgsql-hackers a pgsql-patches. Kvalitní záplaty posílejte
 | 
						|
   do pgsql-patches.
 | 
						|
   
 | 
						|
   Právo commit má v CVS archivu asi třinácti lidí. Každý z nich poslal
 | 
						|
   mnoho kvalitních záplat, takže tehdejší commiters měli jistotu, že
 | 
						|
   budou předkládat jenom kvalitní záplaty a mohli jim předělit větší
 | 
						|
   práva.
 | 
						|
   
 | 
						|
    1.13) Kam podat report o chybě?
 | 
						|
    
 | 
						|
   Navštivte naši PostgreSQL BugTool stránku na
 | 
						|
   http://www.PostgreSQL.org/bugs/bugs.php, která obsahuje návod a
 | 
						|
   směrnice jak podat chybový report.
 | 
						|
   
 | 
						|
   Ověřte si na našem ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li
 | 
						|
   máte nejnovější verzi PostgreSQL a zda-li k ní neexistují nějaké
 | 
						|
   záplaty.
 | 
						|
   
 | 
						|
    1.14) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
 | 
						|
    
 | 
						|
   Existuje několik hledisek jak porovnávat software: vlastnosti, výkon,
 | 
						|
   spolehlivost, podpora a cena.
 | 
						|
   
 | 
						|
   Vlastnosti
 | 
						|
          PostgreSQL má hodně společných vlastností s velkými komerčními
 | 
						|
          DBMS, např. transakce, vnořené dotazy, spouště, pohledy,
 | 
						|
          kontrolu referenční integrity a sofistikované zamykání.
 | 
						|
          Podporuje některé vlastnosti, které tyto systémy nemají,
 | 
						|
          uživatelem definované typy, dědičnost, pravidla, MVCC
 | 
						|
          redukující zamykání.
 | 
						|
          
 | 
						|
   Výkon
 | 
						|
          Výkonnostně je na tom PostgreSQL podobně jako další komerční
 | 
						|
          ale i open source databáze, v něčem je rychlejší, jindy
 | 
						|
          pomalejší. V porovnání s MySQL a podobnými databázovými systémy
 | 
						|
          je PostgreSQL rychlejší při víceuživatelském přístupu,
 | 
						|
          složitějších dotazech a zatížení read/write dotazy. MySQL je
 | 
						|
          rychlejší v jednodušších dotazech s malým počtem uživatelů.
 | 
						|
          Navíc, MySQL nepodporuje mnohé vlatnosti zmíněné v sekci
 | 
						|
          vlastnosti. Zapracovali jsme na spolehlivosti a podporovaných
 | 
						|
          vlastnostech, a výkon zvyšujeme v každé verzi. Zajímavou
 | 
						|
          stránku porovnávající PostgreSQL a MySQL naleznete na
 | 
						|
          http://openacs.org/philosophy/why-not-mysql.html. Za vývojem
 | 
						|
          MySQL není Open Source komunita, ale komerční společnost,
 | 
						|
          přestože svoje produkty distribuuje jako Open Source.
 | 
						|
          
 | 
						|
   Spolehlivost
 | 
						|
          Jsme si vědomi, že databáze musí být spolehlivá, jinak je
 | 
						|
          nepoužitelná. Snažíme se zveřejňovat dobře otestovaný, stabilní
 | 
						|
          kód s minimem chyb. Každá verze je více než měsíc v beta
 | 
						|
          testování, a naše historie verzí ukazuje, že můžeme nabídnout
 | 
						|
          stabilní, solidní verze, které jsou připraveny pro reálné
 | 
						|
          nasazení. V této oblasti jsme srovnatelní s dalšími databázemi.
 | 
						|
          
 | 
						|
   Podpora
 | 
						|
          Na naší mailové konferenci můžete kontaktovat velkou skupinu
 | 
						|
          vývojářů a uživatelů.problémů. Nemůžeme garantovat opravu,
 | 
						|
          nicméně komerční databáze také ne vždy nabídnou opravu. Podle
 | 
						|
          ohlasů je naše podpora hodnocena lépe než u jiných DBMS a to
 | 
						|
          díky přímému kontaktu s vývojáři, velkou komunitou uživatelů,
 | 
						|
          kvalitními manuály a přístupným zdrojovým kódem. Pro uživatele,
 | 
						|
          kteří vyžadují podporu ke konkrétním případům, existuje placená
 | 
						|
          podpora (FAQ sekce 1.6).
 | 
						|
          
 | 
						|
   Cena
 | 
						|
          PosgreSQL lze volně používat pro nekomerční i komerční použití.
 | 
						|
          Můžete do svých produktů přidat náš kód bez omezení, respektive
 | 
						|
          v souladu s podmínkami naší licenční smlouvy (v duchu BSD
 | 
						|
          licence).
 | 
						|
          
 | 
						|
    1.15) Jak lze finančně pomoci PostgreSQL?
 | 
						|
    
 | 
						|
   PosgreSQL má prvotřídní infrastrukturu od našeho začátku v roce 1996.
 | 
						|
   Vděčíme za to Marku Fournierovi, který založil a spravoval tuto
 | 
						|
   infrastrukturu několik let.
 | 
						|
   
 | 
						|
   Kvalitní infrastruktura je velice důležitá pro každý open source
 | 
						|
   projekt. Předchází nedorozuměním, která velice zdržují pokrok v
 | 
						|
   projektu.
 | 
						|
   
 | 
						|
   Tato infrastruktura není laciná. K jejímu zajištění je třeba stále
 | 
						|
   hradit určité měsíční a jednorázové částky. Pokud máte Vy nebo Vaše
 | 
						|
   společnost peníze, které nám můžete darovat, obraťe se na
 | 
						|
   http://store.pgsql.com/shopping/ a darujte je.
 | 
						|
   
 | 
						|
   Ačkoliv webová stránka zmiňuje PostgreSQL, Inc. vklady jsou určeny
 | 
						|
   pouze k podpoře projektu PostgreSQL a nepodporují žádnou existující
 | 
						|
   společnost. Pokud to vyžadujete, můžete poslat kontrolu na naši
 | 
						|
   kontaktní adresu.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
   Pokud máte příklad úspěšného nasazení PostgreSQL, přihlaště se na náš
 | 
						|
   advocacy site na http://advocacy.postgresql.org.
 | 
						|
   
 | 
						|
                             User client dotazy
 | 
						|
                                      
 | 
						|
    2.1) Kde naleznu ODBC ovladače pro PostgreSQL?
 | 
						|
    
 | 
						|
   Pro PostgreSQL existují dva ODBC ovladače - PsqlODBC a OpenLink ODBC.
 | 
						|
   
 | 
						|
   PsqlODBC je ke stažení na
 | 
						|
   http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
 | 
						|
   
 | 
						|
   OpenLink můžete získat na http://www.openlinksw.com. Spolupracuje s
 | 
						|
   jejich klientským programovým vybavením a je dostupný pro všechny jimi
 | 
						|
   podporované platformy (Win, Mac, Unix, VMS).
 | 
						|
   
 | 
						|
   Tento ovladač je určen pro ty, kteří vyžadují podporu komerční
 | 
						|
   kvality, nicméně freeware verze je dostupná a funkční. Dotazy
 | 
						|
   zasílejte na postgres95@openlink.co.uk.
 | 
						|
   
 | 
						|
    2.2) Jaké nástroje lze použít pro PostgreSQL a web?
 | 
						|
    
 | 
						|
   Pěkný úvod do databázových technologií zabezpečujících chod webových
 | 
						|
   stránek najdete na http://www.webreview.com.
 | 
						|
   
 | 
						|
   Pro tvorbu webu existuje excelentní rozhraní PHP, které naleznete na
 | 
						|
   http://www.php.net.
 | 
						|
   
 | 
						|
   Pro složitější případy se často používá Perl a CGI.pm nebo mod_perl.
 | 
						|
   
 | 
						|
    2.3) Existuje grafické rozhraní pro PostgreSQL?
 | 
						|
    
 | 
						|
   Pro PostgreSQL existuje několik grafických rozhraní: PgAccess
 | 
						|
   (http://www.php.net), PgAdmin III (http://www.php.net), RHDB Admin
 | 
						|
   (http://sources.redhat.com/rhdb/) a Rekall (
 | 
						|
   http://www.thekompany.com/products/rekall/). Dále ještě PhpPgAdmin
 | 
						|
   (http://phppgadmin.sourceforge.net/) což je rozhraní PostgreSQL
 | 
						|
   založené na web technologii.
 | 
						|
   
 | 
						|
   Úplnější seznam najdete na
 | 
						|
   http://techdocs.postgresql.org/guides/GUITools.
 | 
						|
   
 | 
						|
    2.4) Které programovací jazyky mají podporu pro PostgreSQL?
 | 
						|
    
 | 
						|
   Většina programovacích jazyků obsahuje rozhraní pro PostgreSQL.
 | 
						|
   Podívejte se do rozšiřujících modulů Vašeho programovacího jazyka.
 | 
						|
   
 | 
						|
   Distribuce PostgreSQL obsahuje tato rozhraní:
 | 
						|
     * C (libpq)
 | 
						|
     * Embbedded C (ecpg)
 | 
						|
     * Java (jdbc)
 | 
						|
     * Python (PyGreSQL)
 | 
						|
     * TCL (libpgtcl)
 | 
						|
       
 | 
						|
   Další rozhraní jsou dostupná na http://gborg.postgresql.org v sekci
 | 
						|
   Drivers/Interfaces.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                           Administrativní dotazy
 | 
						|
                                      
 | 
						|
    3.1) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?
 | 
						|
    
 | 
						|
   Použijte volbu --prefix při spuštění configure.
 | 
						|
   
 | 
						|
    3.2) Při startu postmaster, dostanu chybové hlášení Bad System Call nebo
 | 
						|
    core dump. Proč?
 | 
						|
    
 | 
						|
   Důvody mohou být různé, ale nejprve zkontrolujte, zda Váš systém
 | 
						|
   podporuje System V extensions. PostgreSQL vyžaduje v jádře podporu
 | 
						|
   sdílené paměti a semaforů.
 | 
						|
   
 | 
						|
    3.3) Při startu postmastera dostanu hlášení o chybě IpcMemoryCreate. Proč?
 | 
						|
    
 | 
						|
   Buďto nemáte správně nakonfigurovanou sdílenou paměť v jádře nebo
 | 
						|
   musite zvětšit její velikost. Potřebná velikost je závislá na
 | 
						|
   architektuře a na tom, kolik paměťových bufferů a backendů máte
 | 
						|
   povoleno pro postmastera. Pro většinu systémů s předdefinovaným počtem
 | 
						|
   backendů a paměťových bufferů je minimum zhruba 1MB. V PostgreSQL
 | 
						|
   Administrator's Guide naleznete podrobnější informace o sdílené paměti
 | 
						|
   a semaforech.
 | 
						|
   
 | 
						|
    3.4) Při startu postmastera dostanu hlášení o chybě IpcSemaphoreCreate.
 | 
						|
    Proč?
 | 
						|
    
 | 
						|
   Pokud dostane chybovou zprávu IpcSemaphoreCreate: semget failed (No
 | 
						|
   space left on device), pak vaše jádro nemá dost volných semaforů.
 | 
						|
   PostgreSQL vyžaduje jeden semafor pro každý backend v pozadí. Dočasným
 | 
						|
   řešením je start postmaster s limitem backendů. Použijte přepínač -N s
 | 
						|
   hodnotou menší než 32. Úplným řešením je zvýšení hodnot SEMMNS a
 | 
						|
   SEMMNI jadra.
 | 
						|
   
 | 
						|
   Nefunkční semafory mohou způsobit pád během intenzivních databázových
 | 
						|
   operací.
 | 
						|
   
 | 
						|
   Pokud se tato chyba vyskytuje ještě někde jinde, možná nemáte vůbec
 | 
						|
   nakonfigurovány semafory ve vašem jádře. V PostgreSQL Administrator's
 | 
						|
   Guide najdete podrobnější popis požadavků na sdílenou pamět a
 | 
						|
   semafory.
 | 
						|
   
 | 
						|
    3.5) Jak povolit nebo zakázat přístup z jiných stanic?
 | 
						|
    
 | 
						|
   Při výchozím nastavení PostgreSQL odepře přístup z jiných stanic než
 | 
						|
   lokální s použitím UDP. Přístup z jiných strojů není možný dokud jej
 | 
						|
   nepovolíte nastavením tcpip_socket v postgresql.conf a určením způsobu
 | 
						|
   autentifikace v $PGDATA/pg_hba.conf.
 | 
						|
   
 | 
						|
    3.6) Jak ladit databázový stroj na lepší výkon?
 | 
						|
    
 | 
						|
   Určitě pomohou indexy. Příkaz EXPLAIN ANALYZE Vám umožní sledovat jak
 | 
						|
   PostgreSQL interpretuje Váš dotaz a které indexy používá.
 | 
						|
   
 | 
						|
   Při větší dávce INSERTů uvažujte o náhradě příkazem COPY. Ten je
 | 
						|
   mnohem rychlejší nežli samotný INSERT. Každý příkaz mimo blok BEGIN
 | 
						|
   WORK/COMMIT se provádí ve vlastní transakci. Zvažte, zda-li by se
 | 
						|
   nedalo několik příkazů spojit do jedné transakce. Tím se sníží režie
 | 
						|
   na transakce. Před provedením rozsáhlých změn zrušte indexy, které po
 | 
						|
   dokončení změn opět vytvořte.
 | 
						|
   
 | 
						|
   Máte několik dalších možností, jak zlepšit výkon. Můžete zakázat
 | 
						|
   fsyn() při startu postmastera přepínači -o -F. Tyto přepínače zabrání
 | 
						|
   fsync(), tj. zápisu na disk po každé transakci.
 | 
						|
   
 | 
						|
   Můžete zvýšit velikost paměťových bufferů použitých backendy tj.
 | 
						|
   parametr -B postmasteru. Pokud ale tato hodnota bude příliš velká, tak
 | 
						|
   možná nespustíte postmastera jelikož dosáhnete limitu sdílené paměti.
 | 
						|
   Každý buffer má 8K a implicitně je 64 bufferů.
 | 
						|
   
 | 
						|
   Dále můžete použít přepínač -S k zvýšení limitu paměti pro backendy na
 | 
						|
   dočasné třídění. Hodnota je míněna v kilobytech a výchozí nastavení je
 | 
						|
   512, tj. 512K.
 | 
						|
   
 | 
						|
   Můžete použít příkaz CLUSTER, který uspořádá fyzicky data v tabulkách
 | 
						|
   podle indexu. Více na manuálových stránkách příkazu CLUSTER.
 | 
						|
   
 | 
						|
    3.7) Jaké jsou možnosti ladění?
 | 
						|
    
 | 
						|
   Máte několik možností jak se dostat k užitečným stavovým informacím.
 | 
						|
   
 | 
						|
   Zaprvé, při překladu použijte přepínač --enable-cassert, tím se zapne
 | 
						|
   monitorování a následné zastavení aplikace, když se proces v backendu
 | 
						|
   dostane do neočekávaného stavu.
 | 
						|
   
 | 
						|
   Jak postmaster tak postgres má několik přepínačů umožňujících ladění.
 | 
						|
   Postmaster nastartujte tak, abyste si byli jisti, že je standartní
 | 
						|
   výstup a standartní chybový výstup přesměrován do souboru logu,
 | 
						|
   například:
 | 
						|
    cd /usr/local/pgsql
 | 
						|
    ./bin/postmaster > server.log 2>&1 &
 | 
						|
 | 
						|
   Tím se vytvoří log v adresáři PostgreSQL, Tento soubor obsahuje
 | 
						|
   užitečné informace o problémech a chybách vyskytlých se na serveru.
 | 
						|
   Postmaster má přepínač -d určující, jak podrobné mají být reportované
 | 
						|
   informace, tj. debug level. Pozor, při velké hodnotě debug levelu
 | 
						|
   rychle roste velikost souboru logu.
 | 
						|
   
 | 
						|
   Pokud neběží postmaster, můžete spustit backend PostgreSQL z příkazové
 | 
						|
   řádky a napsat svůj SQL dotaz přímo v backendu (doporučeno pouze pro
 | 
						|
   ladění). Dotaz je v tomto případě ukončen novou řádkou, nikoliv
 | 
						|
   středníkem. Pokud máte aplikaci přeloženou s ladícími symboly, můžete
 | 
						|
   použít debbuger k monitorování procesu. Pokud není backend spuštěn
 | 
						|
   postmasterem, pak neběží ve svém obvyklém prostředí a tudíž některé
 | 
						|
   problémy dané interakcí mezi backendy nemohou být nasimulovány.
 | 
						|
   
 | 
						|
   Pokud běží postmaster, spusťe psql v jednom okně a pak si zjistěte PID
 | 
						|
   procesu postgres použitého psql. V debuggeru sepřipojte k postgresql
 | 
						|
   PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql.
 | 
						|
   Pokud ladíte startup postgresu, pak nastavte PGOPTIONS="-W n" a spusťe
 | 
						|
   psql. Tento přepínač způsobí pauzu n sekund, takže budete mít čas se
 | 
						|
   připojit k procesu, a nastavit breakpointy a pokračovat v startup
 | 
						|
   posloupnosti.
 | 
						|
   
 | 
						|
   Pro ladění a měření výkonu mohou být užitečné přepínače -s, -A a -t
 | 
						|
   programu postgres (backend).
 | 
						|
   
 | 
						|
   Můžete provést překlad s profilací, tak abyste viděli kolik času
 | 
						|
   zabírají jednotlivé funkce. Soubory s profily backendů jsou uloženy v
 | 
						|
   adresáři pgsql/data/base/dbname. Profil klienta pak v jeho aktuálním
 | 
						|
   adresáři. Korektní profilace v prostředí Linux požaduje konfiguraci
 | 
						|
   systému s parametrem -DLINUX_PROFILE.
 | 
						|
   
 | 
						|
    3.8) Proč dostanu "Sorry, too many clients", když se zkouším připojit?
 | 
						|
    
 | 
						|
   Zvyšte limit postmastera na maximální počet současně spuštěných
 | 
						|
   backendů.
 | 
						|
   
 | 
						|
   Výchozí hodnota je 32 backendů. Tuto hodnotu zvýšíte zastavením a
 | 
						|
   opětovným spuštěním postmastera s parametrem -N nebo úpravou
 | 
						|
   postgresql.conf.
 | 
						|
   
 | 
						|
   Při zvýšení hodnoty -N nad 32 musíte zvýšit hodnotu -B nad výchozí 64,
 | 
						|
   -B musí být minimálně dvakrát větší, nebo ještě lépe více.
 | 
						|
   Pravděpodobně zjistíte, že pro velký počet procesů backendu je nutné
 | 
						|
   zvýšit některé parametry jádra. Jsou to především maximální velikost
 | 
						|
   sdílené paměti SHMMAX, maximální počet semafórů SEMMNS a SEMMNI,
 | 
						|
   maximální počet procesů NPROC, maximální počet procesů uživatele
 | 
						|
   MAXUPRC a maximální počet otevřených souborů NFILE a NINODE. Důvod pro
 | 
						|
   omezení maximálního počtu backendů je fakt, že by mohlo dojít k
 | 
						|
   vyčerpání zdrojů Vašeho systému.
 | 
						|
   
 | 
						|
    3.9) K čemu slouží adresář pgsql_tmp?
 | 
						|
    
 | 
						|
   Tento adresář obsahuje dočasné soubory vytvořené exekutorem dotazů.
 | 
						|
   Například, když je nutné třídění k zajištění ORDER BY a třídění má
 | 
						|
   větší nároky na prostor než povoluje parametr -S backendu, pak je
 | 
						|
   vytvořen dočasný soubor k uložení extra údajů.
 | 
						|
   
 | 
						|
   Dočasné soubory jsou obvykle mazány automaticky, ale může se stát, že
 | 
						|
   během třídění server spadne. Zastavení a další start postmastera
 | 
						|
   zajistí odstranění souborů s těchto adresářů.
 | 
						|
   
 | 
						|
    3.10) Proč je požadováno dump a obnovení (load) databáze během upgrade mezi
 | 
						|
    velkými verzemi PostgreSQL?
 | 
						|
    
 | 
						|
   PostgreSQL se minimálně mění během malých verzí, takže např. při
 | 
						|
   upgrade z 7.2 na 7.2.1 není nutné dump a load databáze. Ale výynamné
 | 
						|
   verze často mění interní formát systémových tabulek a datových
 | 
						|
   souborů. Tyto změny jsou natolik rozsáhlé, že nelze zajistit zpětnou
 | 
						|
   kompatibilitu pro datové soubory. Dump uloží data v obecném formátu,
 | 
						|
   takže mohou být načtena a používána v novém interním formátu.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                              Provozní dotazy
 | 
						|
                                      
 | 
						|
    4.1) Čím se liší binární a normální kurzor?
 | 
						|
    
 | 
						|
   Popis najdete v manuálové stránce DECLARE
 | 
						|
   
 | 
						|
    4.2) Jak získat pouze první řádek dotazu? Náhodný řádek?
 | 
						|
    
 | 
						|
   Podívejte se do man. stránky příkazu FETCH, nebo použijte SELECT ...
 | 
						|
   LIMIT ...
 | 
						|
   
 | 
						|
   I když potřebujete získat pouze prvních několik řádků, je třeba
 | 
						|
   zpracovat všechna data, např. pokud dotaz má ORDER BY. Pokud však
 | 
						|
   existuje index, který odpovídá ORDER BY, PostgreSQL může získat pouze
 | 
						|
   prvních n řádků a ukončit zpracování dotazu.
 | 
						|
   
 | 
						|
   K získání náhodného řádku použijte:
 | 
						|
    SELECT col
 | 
						|
    FROM tab
 | 
						|
    ORDER BY random()
 | 
						|
    LIMIT 1;
 | 
						|
 | 
						|
    4.3) Jak získám seznam tabulek nebo jinak jak jej získá psql?
 | 
						|
    
 | 
						|
   Příkaz \dt v psql zobrazí seznam tabulek. Úplný seznam příkazů psql
 | 
						|
   dostanete příkazem \?. Také se můžete podívat do zdrojových kódů psql
 | 
						|
   do souboru pgsql/src/bin/psql/describe.c. Ten obsahuje SQL příkazy,
 | 
						|
   které se používají v psql metapříkazech. Dále můžete spustit psql s
 | 
						|
   přepínačem -E, který způsobí zobrazení každého dotazu, které
 | 
						|
   zpracování metapříkazu vyvolá. PostgreSQL nabízí SQLi INFORMATION
 | 
						|
   SCHEMA s tabulkami obsahující informace o databázi.
 | 
						|
   
 | 
						|
    4.4) Jak odstraním sloupec tabulky, jak změním jeho typ?
 | 
						|
    
 | 
						|
   Počínaje verzí 7.3 můžete použít příkaz ALTER TABLE DROP COLUMN. Ve
 | 
						|
   starších verzích můžete použít následující postup:
 | 
						|
    BEGIN;
 | 
						|
    LOCK TABLE old_table;
 | 
						|
    SELECT ... -- mimo sloupec, který chceme odstranit
 | 
						|
    INTO TABLE new_table;
 | 
						|
    DROP TABLE old_table;
 | 
						|
    ALTER TABLE new_table RENAME TO old_table;
 | 
						|
    COMMIT;
 | 
						|
 | 
						|
   Pro změnu typu sloupce je třeba provést:
 | 
						|
    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;
 | 
						|
 | 
						|
   Poté proveďte VACUUM FULL tab - uvolníte tím diskový prostor zabraný
 | 
						|
   nyní již neplatnými řádky.
 | 
						|
   
 | 
						|
    4.5) Jaká je maximální velikost řá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 řádky:              1.6 TB
 | 
						|
    Maximální velikost položky             1 GB
 | 
						|
    Maximální počet řádků v tabulce:       neomezeno
 | 
						|
    Maximální počet sloupců v tabulce:     250-1600 podle typů
 | 
						|
    Maximální počet indexů na tabulce:     neomezeno
 | 
						|
 | 
						|
   Ve skutečnosti nic není neomezeno, limitem bývá vždy dostupná disková
 | 
						|
   paměť nebo velikost operační paměti. Pokud máte některou z těchto
 | 
						|
   hodnot neobvykle velkou, může dojít ke snížení výkonu.
 | 
						|
   
 | 
						|
   Maximální velikost tabulky je 32 TB a nevyžaduje podporu velkých
 | 
						|
   souborů operačním systémem. Velké tabulky se ukládají do několika 1 GB
 | 
						|
   souborů takže limity souborového systému nejsou podstatné.
 | 
						|
   
 | 
						|
   Maximální velikost tabulky a maximální počet sloupců můžeme
 | 
						|
   zečtyřnásobit nastavením velikosti bloku na 32K.
 | 
						|
   
 | 
						|
    4.6) Kolik diskového prostoru je potřeba k uložení dat z
 | 
						|
    
 | 
						|
   normálního textového souboru?
 | 
						|
   
 | 
						|
   PostgreSQL vyžaduje až pětinásobek diskového prostoru k uložení dat z
 | 
						|
   textového souboru.
 | 
						|
   
 | 
						|
   Například, uvažujme soubor se 100 tisíci řádky obsahující na každé
 | 
						|
   řádce celé číslo a textový popis. Text je v průměru dvacet bytů
 | 
						|
   dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze
 | 
						|
   obsahující odpovídající data bude zhruba 6.4 MB.
 | 
						|
    36 bytů: hlavička řádku (přibližně)
 | 
						|
    24 bytů: jedna celočíselná položka a jedna textová
 | 
						|
   + 4 byty: ukazatel na stránku k ntici
 | 
						|
   ------------------------------------------------------
 | 
						|
    64 bytů na řádek
 | 
						|
 | 
						|
   Velikost datové stránky PostgreSQL je 8KB
 | 
						|
 | 
						|
    8192 bytů na stránce
 | 
						|
    ---------------------- = 128 řádek na stránku
 | 
						|
      64 bytů za řádek
 | 
						|
 | 
						|
    100000 řádek
 | 
						|
    -------------------- = 782 stránek (zaokrouhleno nahoru)
 | 
						|
       128 řádek na stránce
 | 
						|
 | 
						|
    782 * 8192 = 6, 406, 144 bytů (6.4 MB)
 | 
						|
 | 
						|
   Indexy nemají tak velkou režii, ale mohou být také velké, protože
 | 
						|
   obsahují indexovaná data.
 | 
						|
   
 | 
						|
   Hodnoty NULL jsou uloženy v bitmapách, takže spotřebují jen velmi málo
 | 
						|
   diskového prostoru.
 | 
						|
   
 | 
						|
    4.7) Jak získám seznam vytvořených tabulek, indexů, databází?
 | 
						|
    
 | 
						|
   psql má sadu metapříkazů k zobrazení těchto informací. Jejich seznam
 | 
						|
   získáte příkazem \?. Dále se můžete podívat na obsah systémových
 | 
						|
   tabulek začínajících pg_. Spuštění psql s parametrem -l provede výpis
 | 
						|
   názvů všech databází.
 | 
						|
   
 | 
						|
   Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy přistupující
 | 
						|
   k systémovým tabulkámm.
 | 
						|
   
 | 
						|
    4.8) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?
 | 
						|
    
 | 
						|
   Každý dotaz nemusí nutně použít existující indexy. Index se použije
 | 
						|
   tehdy, když je tabulka větší než určitá minimální velikost, a dotaz
 | 
						|
   vybírá pouze procentuálně malou část řádků tabulky. To proto, že
 | 
						|
   náhodný přístup k disku daný čtením indexu může být pomalejší než
 | 
						|
   lineární čtení tabulky nebo sekvenční čtení.
 | 
						|
   
 | 
						|
   PostgreSQL rozhoduje o použití indexů na základě statistiky přístupů k
 | 
						|
   tabulce. Tyto statistiky se shromažďují příkazy VACUUM ANALYZE nebo
 | 
						|
   ANALYZE. Díky statistikám má optimizer informaci o počtu řádek v
 | 
						|
   tabulce a může lépe rozhodnout o použití indexů. Statistiky se uplatní
 | 
						|
   při určení optimálního pořadí a metody spojení tabulek. Statistiky by
 | 
						|
   se měli aktualizovat opakovaně, tak jak se mění obsah tabulek.
 | 
						|
   
 | 
						|
   Indexy nejsou obyčejně použity pro setřídění nebo spojení tabulek.
 | 
						|
   Sekvenční zpracování následované explicitním tříděním je obyčejně
 | 
						|
   rychlejší než indexní čtení na velké tabulce.
 | 
						|
   
 | 
						|
   Jinak je tomu v případě použití LIMIT a ORDER BY, při kterém se
 | 
						|
   většinou index použije, výsledkem je pouze malá část tabulky. Funkce
 | 
						|
   MAX() a MIN() nepoužívají indexy, ale je možné tutéž hodnotu získat:
 | 
						|
    SELECT col
 | 
						|
    FROM tab
 | 
						|
    ORDER BY col [ DESC ]
 | 
						|
    LIMIT 1;
 | 
						|
 | 
						|
   Pokud si myslíte, že optimizer mylně zvolil sekvenční prohledávání
 | 
						|
   tabulky, použijte příkaz SET enable_seqscan TO 'off' a zkuste zda je
 | 
						|
   indexní prohledávání rychlejší.
 | 
						|
   
 | 
						|
   Při vyhledávání na základě vzoru jako je např. operátor LIKE nebo ~ se
 | 
						|
   indexy použíjí pouze za určitých skutečností:
 | 
						|
     * začátek hledaného vzoru musí být ukotven k začátku, tj.
 | 
						|
          + vzor LIKE nesmí začínat %
 | 
						|
          + ~ regulární výraz musí začínat ^
 | 
						|
     * vzor nesmí začínat intervalem, např. [a-e]
 | 
						|
     * vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~*
 | 
						|
       nepoužívá indexy. Můžete ale použít funkcionální indexy, které
 | 
						|
       jsou posány v sekci 4.12
 | 
						|
     * při inicializaci databáze (initdb) musí být použito C locale
 | 
						|
       (pozn. překladatele - tudíž v našich podmínkách nepoužitelné,
 | 
						|
       nepracovalo by české třídění).
 | 
						|
       
 | 
						|
    4.9) Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz?
 | 
						|
    
 | 
						|
   Podívejte se do manuálové stránky příkazu EXPLAIN.
 | 
						|
   
 | 
						|
    4.10) Co to je R-tree index?
 | 
						|
    
 | 
						|
   R-tree index se používá pro indexování prostorových dat. Hash index
 | 
						|
   nemůže obsloužit prohledávání oblastí. B-tree index může řídit
 | 
						|
   vyhledání oblastí v jedné dimenzi. R-tree index může podporovat
 | 
						|
   hledání v multidimenzionálních datech. Použijeme-li například R-tree
 | 
						|
   index na atributy typu point, pak systém může efektivně odpovědět na
 | 
						|
   dotaz - vyber všechny body uvnitř obdélníků.
 | 
						|
   
 | 
						|
   Původní návrh R-tree je Guttman, A. "R-trees: A Dynamic Index
 | 
						|
   Structure for Spatial Searching." Proceedings of the 1984 ACM SIGMOD
 | 
						|
   Int'l Conf on Mgmt of Data, 45-57
 | 
						|
   
 | 
						|
   Tyto materiály naleznete v Stonebraker's "Readings in Database
 | 
						|
   Systems".
 | 
						|
   
 | 
						|
   Vestavěné R-tree může sloužit k indexaci polygonů a oblastí.
 | 
						|
   Teoreticky můžeme R-tree použít i pro více dimenzí (jiné než 3D). Ve
 | 
						|
   skutečnosti ale takové rozšíření R-tree vyžaduje trochu práce a ve
 | 
						|
   součastnosti chybí dokumentace jak na to.
 | 
						|
   
 | 
						|
    4.11) Co je Genetic Query Optimizer?
 | 
						|
    
 | 
						|
   GEQO modul urychluje optimalizaci dotazů při spojování množství
 | 
						|
   tabulek metodou Genetických algoritmů (GA). To umožňuje získat velkého
 | 
						|
   množství variant spojení při neúplném prohledáváním.
 | 
						|
   
 | 
						|
    4.12) Jak provést vyhledávání regulárního výrazu case sensitiv, insensitiv?
 | 
						|
    Jak použít index pro case insensitive vyhledávání?
 | 
						|
    
 | 
						|
   Operátor ~ slouží k porování s regulárním výrazem, jeho modifikace *~
 | 
						|
   představuje case insensitive vyhledávání. Jedná se o obdobu LIKE a
 | 
						|
   ILIKE.
 | 
						|
   
 | 
						|
   Pro vyhledávání bez ohledu na velká malá písmena použijeme:
 | 
						|
    SELECT *
 | 
						|
    FROM tab
 | 
						|
    WHERE lower(col) = 'abc';
 | 
						|
 | 
						|
   V tomto případě se nepoužije standardní index. Nicméně, použije se
 | 
						|
   funkcionální index, pokud jej vytvoříte:
 | 
						|
    CREATE INDEX tabindex ON tab (lower(col));
 | 
						|
 | 
						|
    4.13) Jak v dotazu detekovat, že položka je NULL?
 | 
						|
    
 | 
						|
   Určíte pomocí IS NULL nebo IS NOT NULL
 | 
						|
   
 | 
						|
    4.14) Jaké jsou rozdíly mezi různými znakovými typy?
 | 
						|
    
 | 
						|
Typ         Interní název       Poznámka
 | 
						|
--------------------------------------------------------------------------
 | 
						|
VARCHAR(n)  varchar             omezeno maximální délkou, bez doplnění mezerami
 | 
						|
CHAR(n)     bpchar              řetězec je doplněn mezerami do dané délky
 | 
						|
TEXT        text                bez horního limitu na délku
 | 
						|
BYTEA       bytea               pole bytů (bezpečně lze uložit i znak NULL)
 | 
						|
"char"      char                jeden znak
 | 
						|
 | 
						|
   S interními názvy se setkáte v systémovém katalogu a v některých
 | 
						|
   chybových hlášeních.
 | 
						|
   
 | 
						|
   První čtyři uvedené typy jsou tzv. varlena typy (tj. první čtyři byty
 | 
						|
   na disku nesou údaj o délce, následují samotná data). Proto skutečný
 | 
						|
   použitý prostor je vždy o něco málo větší než deklarovaná délka.
 | 
						|
   Naopak, tyto datové typy jsou komprimovánty TOASTem, takže prostor na
 | 
						|
   disku může být nižší než je očekáváno.
 | 
						|
   
 | 
						|
   VARCHAR(n) je vhodný pro ukládání textů promměné délky s pevně
 | 
						|
   stanovenou maximální délkou. TEXT je pro řetězce bez omezení délky s
 | 
						|
   maximem jeden gigabajt.
 | 
						|
   
 | 
						|
   CHAR(n) slouží k ukládání řetězců stejné délky. CHAR(n) doplní prázdné
 | 
						|
   znaky do specifikované délky, zatímco VARCHAR(n) uloží pouze předané
 | 
						|
   znaky. BYTEA je určeno pro ukládání binárních dat, včetně NULL byte.
 | 
						|
   Všechny zde popsané typy mají podobné výkonnostní charakteristiky.
 | 
						|
   
 | 
						|
    4.15.1) Jak vytvořit serial/auto-increment pole?
 | 
						|
    
 | 
						|
   PostgreSQL podporuje typ SERIAL. Při jeho použití se automaticky
 | 
						|
   vytvoří SEQUENCE. Například:
 | 
						|
    CREATE TABLE person (
 | 
						|
        id   SERIAL,
 | 
						|
        name TEXT
 | 
						|
    );
 | 
						|
 | 
						|
   je automaticky převedeno do
 | 
						|
    CREATE SEQUENCE person_id_seq;
 | 
						|
    CREATE TABLE person (
 | 
						|
        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
 | 
						|
        name TEXT
 | 
						|
    );
 | 
						|
    CREATE UNIQUE INDEX person_id_key ON person(id);
 | 
						|
 | 
						|
   Viz dokumentace create_sequence v manuálových stránkách. Dále můžete
 | 
						|
   použít unikátní hodnotu OID každého řádku. Potom ale musíte spouštět
 | 
						|
   pg_dump s přepínačem -o, tak aby zůstaly zachovány hodnoty OID (u
 | 
						|
   příkazu copy COPY WITH OIDS).
 | 
						|
   
 | 
						|
    4.15.2) Jak získat hodnotu SERIAL po vložení řádku?
 | 
						|
    
 | 
						|
   Jednou z možností je získat budoucí hodnotu SERIAL funkcí nextval()
 | 
						|
   před samotným vložením a pak ji vložit explicitně. Například v jakémsi
 | 
						|
   pseudojazyku:
 | 
						|
    newid = execute("SELECT nextval('person_id_seq')");
 | 
						|
    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
 | 
						|
 | 
						|
   Můžete pak ještě použít hodnotu newid v dalších dotazech, např. jako
 | 
						|
   hodnotu cizího klíče. Název automaticky vytvořené sekvence je
 | 
						|
   tabulka_sloupec_seq.
 | 
						|
   
 | 
						|
   Alternativně můžete získat hodnotu posledně generovou sekvencí funkcí
 | 
						|
   currval() po vložení:
 | 
						|
    execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
 | 
						|
    new_id = execute("SELECT currval('person_id_seq')");
 | 
						|
 | 
						|
   Konečně můžete použít OID hodnotu vrácenou příkazem INSERT, ale to je
 | 
						|
   pravděpodobně nejméně přenositelné řešení. V Perlu při použití DBI
 | 
						|
   modulu Edmunda Mergleho DBD:Pg oid hodnotu získáme
 | 
						|
   $sth->{pg_oid_status} po každém $sth->execute().
 | 
						|
   
 | 
						|
    4.15.3) Nepovede currval() a nextval() k rozhození podmínek při souběhu s
 | 
						|
    jinými uživateli?
 | 
						|
    
 | 
						|
   Nikoliv, currval() vrací hodnotu naposledy generovanou ve vašem
 | 
						|
   backendu, a ta tudíž není společná všem uživatelům.
 | 
						|
   
 | 
						|
    4.15.4) Proč není vygenerované číslo použito při přerušení transakce? Proč
 | 
						|
    vznikají díry v číslování vlastní sekvencí/SERIAL sloupce?
 | 
						|
    
 | 
						|
   K zajištění efektivnosti souběhu, jsou hodnoty posloupnosti, když se o
 | 
						|
   ně požádá, a sekvence není zamčena do ukončení transakce. To způsobuje
 | 
						|
   díry v číslování ze zrušených transakcí.
 | 
						|
   
 | 
						|
    4.16) Co to je OID? Co je to TID?
 | 
						|
    
 | 
						|
   Každý řádek vytvořený v PostgreSQL získá jedinečné OID. Všechna OID
 | 
						|
   generovaná během inicializace databáze jsou menší než 16384
 | 
						|
   (include/access/transam.h). Všechna OID generovaná na požadavek
 | 
						|
   uživatele jsou rovna nebo vyšší této hodnotě. Normálně, všechna OID
 | 
						|
   jsou jedinečná nejen uvnitř tabulky nebo databáze, ale v rámci celé
 | 
						|
   instalace PostgreSQL
 | 
						|
   
 | 
						|
   PostgreSQL používá OID ve svém interním systému tabulek k vytvoření
 | 
						|
   relací. Tato OID mohou být použita k identifikaci konkrétního
 | 
						|
   uživatele a použita v spojení. Pro OID hodnoty je doporučen typ OID.
 | 
						|
   Nad tímto sloupcem můžete vytvořit index pro urychlení přístupu.
 | 
						|
   
 | 
						|
   OID jsou dána všem řádkům z centrální oblasti a jsou použita v každé
 | 
						|
   databázi. Pokud potřebujete změnit OID, nebo chcete zkopírovat tabulku
 | 
						|
   s původními OID, lze použít:
 | 
						|
        CREATE TABLE new_table(old_oid oid, mycol int);
 | 
						|
        SELECT old_oid, mycol INTO new FROM old;
 | 
						|
        COPY new TO '/tmp/pgtable';
 | 
						|
        DELETE FROM new;
 | 
						|
        COPY new WITH OIDS FROM '/tmp/pgtable';
 | 
						|
 | 
						|
   OID jsou uložena jako 4bajtový integer a přetečou po čtyřech
 | 
						|
   miliardách. Nebylo hlášeno, že by se tak někdy stalo, přesto ale
 | 
						|
   plánujeme odstranit tento limit dřív než se tak stane.
 | 
						|
   
 | 
						|
   TID se používají i identifikaci fyzických řádků s hodnotou bloku a
 | 
						|
   offsetu. TIDs se mění modifikací řádků (používá se jako ukazatel
 | 
						|
   indexu fyzického řádku).
 | 
						|
   
 | 
						|
    4.17) Jaký je význam některých výrazů použitých v PostgreSQL?
 | 
						|
    
 | 
						|
   V některých zdrojových kódech nebo starší dokumentaci se můžete setkat
 | 
						|
   s následujícími výrazy, které mají širší význam. Zde je příklad
 | 
						|
   nekterých:
 | 
						|
     * tabulka, relace, třída (table, relation, class)
 | 
						|
     * řádek, záznam, ntice (row, record, tuple)
 | 
						|
     * sloupec, položka, atribut (column, field, attribute)
 | 
						|
     * vyhledání, výběr (retrieve, select)
 | 
						|
     * náhrada, úprava (replace, update)
 | 
						|
     * přidání, vkládání (append, insert)
 | 
						|
     * OID, serial value (OID, serial value)
 | 
						|
     * portal, kurzor (portal, cursor)
 | 
						|
     * range variable, jméno tabulky, alias tabulky (range variable,
 | 
						|
       table name, table alias)
 | 
						|
       
 | 
						|
   seznam těchto výrazů můžete nalézt na
 | 
						|
   http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
 | 
						|
   /glossary.html.
 | 
						|
   
 | 
						|
    4.18) Proč jsem získal chybové hlášení "ERROR: Memory exhausted in
 | 
						|
    AllocSetAlloc()"?
 | 
						|
    
 | 
						|
   Pravděpodobně došlo k vyčerpání virtuální paměťi na Vašem systému,
 | 
						|
   nebo jádro má nízký limit pro určité zdroje. Vyzkoušejte před startem
 | 
						|
   posmatera
 | 
						|
    ulimit -d 262144
 | 
						|
    limit datasize 256m
 | 
						|
 | 
						|
   Záleží na Vašem shellu, zda budou tyto příkazy úspěšné, měly by zvýšit
 | 
						|
   limit datového segmentu pro Vaše procesy a umožnit tak dokončení
 | 
						|
   dotazu. Tyto příkazy se aplikují na aktuální proces a všechny synovské
 | 
						|
   procesy vytvořené po provedení příkazu. Pokud máte problémy s SQL
 | 
						|
   klientem protože backend vrací příliš mnoho dat, zkuste zvýšit limity
 | 
						|
   před startem klienta.
 | 
						|
   
 | 
						|
    4.19) Jak se dozvím, kterou verzi PostgreSQL používám?
 | 
						|
    
 | 
						|
   V psql spusťte SELECT version();
 | 
						|
   
 | 
						|
    4.20) Proč operace s velkými objekty končí "invalid large obj descriptor"?
 | 
						|
    
 | 
						|
   Všechny operace s velkými objekty - lo_open, lo_close, ... musíte
 | 
						|
   spouštět v transakci, tj. mezi příkazy BEGIN WORK a COMMIT.
 | 
						|
   
 | 
						|
   PostgreSQL uvolňuje handle velkých objektů při skončení transakce.
 | 
						|
   Pokud budete pracovat s velkými objekty mimo transakci, pravděpodobně
 | 
						|
   dostanete toto chybové hlášení, protože handle již budou neplatné.
 | 
						|
   Pokud používáte interface podobné ODBC musíte nastavit set auto_commit
 | 
						|
   off.
 | 
						|
   
 | 
						|
    4.21) Jak vytvořit sloupec obsahující implicitně aktuální datum?
 | 
						|
    
 | 
						|
   Použijte CURRENT_TIMESTAMP:
 | 
						|
 | 
						|
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
 | 
						|
 | 
						|
    4.22) Proč jsou moje vnořené dotazy používající IN tak pomalé?
 | 
						|
    
 | 
						|
   Dřívější verze (před 7.4) spojovali vnořené dotazy k vnějším
 | 
						|
   sekvenčním čtením výsledku poddotazu pro každý řádek vnějšího dotazu.
 | 
						|
   Pokud poddotaz vrátil několik málo řádků IN bylo rychlé. Pro ostatní
 | 
						|
   případy je vhodné nahradit IN EXISTS:
 | 
						|
    SELECT *
 | 
						|
    FROM tab
 | 
						|
    WHERE col IN (SELECT subcol FROM subtab);
 | 
						|
 | 
						|
   na:
 | 
						|
   SELECT *
 | 
						|
   FROM tab
 | 
						|
   WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
 | 
						|
 | 
						|
   Pro urychlení vytvořete index pro subcol.
 | 
						|
   
 | 
						|
   Ve verzi 7.4 a pozdějších, IN používá stejně sofistikovanou techniku
 | 
						|
   spojování tabulek jako ostatní dotazy a je preferovaný před EXISTS.
 | 
						|
   
 | 
						|
    4.23) Jak provést vnější spojení (outer join)?
 | 
						|
    
 | 
						|
   PostgreSQL podporuje vnější spojení tabulek standardními SQL příkazy.
 | 
						|
   Zde jsou dva příklady:
 | 
						|
    SELECT *
 | 
						|
    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
 | 
						|
 | 
						|
   nebo
 | 
						|
    SELECT *
 | 
						|
    FROM t1 LEFT OUTER JOIN USING (col);
 | 
						|
 | 
						|
   Tyto identické dotazy napojí t1.col na t2.col a ještě přidá
 | 
						|
   nepřipojené řádky z t1 (které nemají obdoby v t2). Pravé spojení
 | 
						|
   (RIGHT JOIN) přidá nepřipojené řádky z t2. FULL JOIN vrátí všechny
 | 
						|
   řádky, včetně nepřipojených z tbulek t1 a t2. Klíčové slovo OUTER je
 | 
						|
   nepovinné a váže se na LEFT, RIGHT a FULL join. Běžné spojení se
 | 
						|
   nazývá INNER JOIN.
 | 
						|
   
 | 
						|
   V dřívějších verzích se vnější spojení tabulek mohlo simulovat pomocí
 | 
						|
   UNION a NOT IN. Například pro spojení tabulek tab1 a tab2, je
 | 
						|
   následující dotaz ekvivalentní k vnějšímu spojení dvou tabulek:
 | 
						|
    SELECT tab1.col2, tab2.col2
 | 
						|
    FROM tab1, tab2
 | 
						|
    WHERE tab1.col1 = tab2.col1
 | 
						|
    UNION ALL
 | 
						|
    SELECT tab1.col2, NULL
 | 
						|
    FROM tab1
 | 
						|
    WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
 | 
						|
    ORDER BY col1;
 | 
						|
 | 
						|
    4.24) Jak provést dotaz z více databází?
 | 
						|
    
 | 
						|
   PostgreSQL nepodporuje dotazy do jiné než aktuální databáze.
 | 
						|
   
 | 
						|
   contrib/dblink nabízí funkce umožňující provedení dotazu v jiné
 | 
						|
   databázi. Klient si může otevřít simultální připojení do různých db
 | 
						|
   bez omezení.
 | 
						|
   
 | 
						|
    4.25) Může funkce vrátit více řádků nebo sloupců?
 | 
						|
    
 | 
						|
   V PostgreSQL 7.3 můžete jednoduše vracet více řádků nebo sloupců z
 | 
						|
   funkce, viz:
 | 
						|
   http://techdocs.postgresql.org/guides/SetReturningFunctions.
 | 
						|
   
 | 
						|
    4.26) Proč nelze spolehlivě vytvářet a rušit dočasné tabulky v PL/pgSQL
 | 
						|
    funkcích?
 | 
						|
    
 | 
						|
   Přeložený kód PL/pgSQL funkce je uložen ve vyrovnávací paměti, tj.
 | 
						|
   funkce je překládána pouze při změně kódu, nikoliv před každým voláním
 | 
						|
   funkce. Nechtěným vedlejším efektem je, že volání funkce selže, když
 | 
						|
   se funkce odkazuje na dočasnou tabulku, pokud tato tabulka byla od
 | 
						|
   překladu funkce zrušena (ačkoliv již byla znovu vytvořena a existuje).
 | 
						|
   Jediným řešením problému je přístup k dočasné tabulce pomocí EXECUTE,
 | 
						|
   tj. dynamické provádění dotazu. Tento příkaz zajistí opakovaný překlad
 | 
						|
   dotazu při každém volání funkce.
 | 
						|
   
 | 
						|
    4.27) Jaké jsou možnosti replikace databází?
 | 
						|
    
 | 
						|
   Existuje několik dostupných řešení master/slave replikací, tj umožňují
 | 
						|
   modifikace master databáze a slave databázím umožňují pouze čtení. Na
 | 
						|
   konci http://gborg.PostgreSQL.org/genpage?replication_research najdete
 | 
						|
   jejich seznam. Na řešení multi-master replikaci se pracuje na
 | 
						|
   http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
 | 
						|
   
 | 
						|
    4.28) Jaké jsou možnosti šifrování databází?
 | 
						|
    
 | 
						|
     * contrib/pgcrypto obsahuje šifrovací funkce použitelné v SQL
 | 
						|
       dotazech.
 | 
						|
     * K šifrování přenosu dat z klienta na server, musí být server
 | 
						|
       přeložen s podporou ssl a přepínač ssl v postgresql.conf musí být
 | 
						|
       nastaven na hodnotu true. Klient musí mít vytvořen záznam hostssl
 | 
						|
       v pg_hba.conf a také mít povolen režim ssl. Lze použít i jiné
 | 
						|
       prostředky, nejen nativní podporu ssl v PostgreSQL, např. stunel a
 | 
						|
       ssh.
 | 
						|
     * Hesla uživatelů databáze jsou zašifrována počínaje verzí 7.3. Ve
 | 
						|
       starších verzích toto chování muselo být vynuceno volbou
 | 
						|
       PASSWORD_ENCRYPTION v postgresql.conf
 | 
						|
     * Server může běžet na šifrovaném souborovém systému.
 | 
						|
     _________________________________________________________________
 | 
						|
   
 | 
						|
                           Rozšiřování PostgreSQL
 | 
						|
                                      
 | 
						|
    5.1) Napsal jsem UDF funkci, PostgreSQL však končí dump core?
 | 
						|
    
 | 
						|
   Problém může být způsoben mnoha okolnostmi. Vyzkoušejte si svoji
 | 
						|
   funkci nejdříve v nějaké jednoduché aplikaci.
 | 
						|
   
 | 
						|
    5.2) Jak mohu přispět nějakými šikovnými datovými typy a funkcemi do
 | 
						|
    PostgreSQL?
 | 
						|
    
 | 
						|
   Pošlete své rozšíření do konference pgsql-hackers, a ono pak možná
 | 
						|
   skončí v podadresáři contrib.
 | 
						|
   
 | 
						|
    5.3) Jak napsat funkci v C vracející ntici?
 | 
						|
    
 | 
						|
   Funkce vracející tabulky jsou podporované PostgreSQL 7.3 a vyšší pro
 | 
						|
   jazyky C, PL/PgSQL a SQL. Více naleznete v The Programmer's Guide.
 | 
						|
   Příklady těchto funkcí pro C naleznete v contrib/tablefunc.
 | 
						|
   
 | 
						|
    5.4) Modifikoval jsem zdrojové soubory. Tato změna nebyla při rekompilaci
 | 
						|
    vzata v potaz. Proč?
 | 
						|
    
 | 
						|
   Makefile nemá informace o závislostech mezi hlavičkovými soubory.
 | 
						|
   Musíte provést make clean a pak make. Pokud používáte gcc, můžete
 | 
						|
   použít přepínač --enable-depend příkazu configure k automatickému
 | 
						|
   řešení závislostí překladačem.
 |