mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			1190 lines
		
	
	
		
			46 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			1190 lines
		
	
	
		
			46 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Často kladené dotazy (FAQ) PostgreSQL
 | 
						|
=====================================
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
PostgreSQL vychází z databáze 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. (Odpověď 1.6. -
 | 
						|
jak se zapojit). Tento tým je zodpovědný za veškerý vývoj PostgreSQL.
 | 
						|
 | 
						|
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-2002, 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.
 | 
						|
 | 
						|
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
 | 
						|
ÚČ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. Na nativním portu pro MS Win
 | 
						|
NT/2000/XP se pracuje. 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ím 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 mailto: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 mailto: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 Kde je poslední verze?
 | 
						|
--------------------------
 | 
						|
 | 
						|
Poslední verzí je PostgreSQL 7.4.. Plánujeme uvolnit velkou 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 [1]
 | 
						|
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, na
 | 
						|
http://www.intermedia.net/support/sql/sqltut.shtm [2] , 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 (http://www.php.net), RHDB Admin
 | 
						|
(http://sources.redhat.com/rhdb/) a Rekall (
 | 
						|
http://www.thekompany.com/products/rekall/). Dále existuje PHPPgAdmin
 | 
						|
(http://phppgadmin.sourceforge.net/) 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
 | 
						|
http://www.postgresql.org/docs/view.php?version=current&idoc=1&file=kern
 | 
						|
el-resources.html [3] 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 postmastera 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. Databáze se zpřístupní jiným stanicím nastavením
 | 
						|
přepínače -i postmastera a povolením stanice a určením režimu
 | 
						|
autentifikace v $PGDATA/pg_hba.conf. Tím se povolí TCP/IP spojení.
 | 
						|
ZASTARALÉ
 | 
						|
 | 
						|
3.6 Jak ladit databázový stroj na lepší výkon?
 | 
						|
----------------------------------------------
 | 
						|
 | 
						|
Určitě pomohou indexy. Příkaz EXPLAIN zobrazí způsob interpretace Vašeho
 | 
						|
dotazu a použití indexů.
 | 
						|
 | 
						|
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 velké 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 ...
 | 
						|
 | 
						|
Není nutné zpracovávat celý dotaz, když potřebujete pouze několik
 | 
						|
prvních řádků. Pokud existuje index ORDER BY, PostgreSQL je schopen
 | 
						|
přerušit zpracování dotazu po získání požadovaného počtu řádků.
 | 
						|
 | 
						|
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?
 | 
						|
------------------------------------------------------------
 | 
						|
 | 
						|
Podívejte se 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á.
 | 
						|
 | 
						|
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 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 a index na sloupci (Pro vyšší verze to neplatí OVĚŘIT).
 | 
						|
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/g
 | 
						|
lossary.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é?
 | 
						|
-------------------------------------------------------------
 | 
						|
 | 
						|
Aktuálně spojujeme tabulky se sekvenčním skenováním výsledku pro každý
 | 
						|
řádek vnějšího dotazu. Pokud vnořený dotaz má pouze několik řádků a
 | 
						|
vnější dotaz vrací hodně řádek, IN je rychlé. V jiných případech
 | 
						|
nahraďte IN EXISTS:
 | 
						|
 | 
						|
SELECT * FROM tab
 | 
						|
  WHERE col IN (SELECT subcol FROM subtab);
 | 
						|
 | 
						|
takto
 | 
						|
 | 
						|
SELECT * FROM tab
 | 
						|
  WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
 | 
						|
 | 
						|
Pro urychlení vytvořete index pro subcol. Tento výkonnostní problém byl
 | 
						|
odstraněn ve verzi 7.4.
 | 
						|
 | 
						|
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 napříč několika databázemi?
 | 
						|
--------------------------------------------------
 | 
						|
 | 
						|
PostgreSQL nenabízí žádný způsob, jak se dotázat do jiné databáze než do
 | 
						|
aktuální. Doplněk contrib/dblink umožňuje dotaz do cizí databáze
 | 
						|
prostřednictvím funkce. Na straně klienta není problém si otevřít více
 | 
						|
simultálních přístupů do různých databází a spojovat výsledek na straně
 | 
						|
klienta.
 | 
						|
 | 
						|
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í. Ty povolují
 | 
						|
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č sslv 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.
 | 
						|
 | 
						|
 | 
						|
[1] http://developer.postgresql.org/todo.php
 | 
						|
[2] http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
 | 
						|
[3] http://postgresql.ok.cz/PostgreSQL%20Administrator%27sGuide
 | 
						|
 |