aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/FAQ_czech1818
-rw-r--r--doc/src/FAQ/FAQ_czech.html1806
2 files changed, 1417 insertions, 2207 deletions
diff --git a/doc/FAQ_czech b/doc/FAQ_czech
index 78696bad58c..d065fa1f9c0 100644
--- a/doc/FAQ_czech
+++ b/doc/FAQ_czech
@@ -1,1117 +1,849 @@
- Často kladené dotazy (FAQ) PostgreSQL
+ Frequently Asked Questions
- Poslední aktualizace: Středa 23. června 21:10:00 EST 2004
+ Casto kladené dotazy (FAQ) PostgreSQL
- Současný správce: Bruce Momjian (pgman@candle.pha.pa.us)
+ Poslední aktualizace: 29. ríjna 2007 (aktualizováno pro PostgreSQL
+ 8.3)
- Přeložil: Pavel Stěhule (stehule@kix.fsv.cvut.cz)
+ Soucasný správce: Bruce Momjian (bruce@momjian.us)
- 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.
+ Prelozil: Pavel Stehule (pavel.stehule@gmail.com)
- Odpovědi na dotazy relevantní ke konkrétním platformám lze nalézt na
- adrese: http://www.PostgreSQL.org/docs/index.html.
+ Nejaktuálnejsí verzi tohoto dokumentu naleznete na adrese
+ http://www.postgresql.org/files/documentation/faqs/FAQ.html
+
+ Odpovedi na otázky vázané na konkrétní platformy naleznete na adrese
+ http://www.postgresql.org/docs/faq/.
_________________________________________________________________
Obecné otázky
- 1.1) Co je 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.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
+ 1.2) Kdo rídí vývoj PostgreSQL?
+ 1.3) Pod jakou licencí je PostgreSQL?
+ 1.4) Na kterých platformách lze provozovat PostgreSQL?
1.5) Kde mohu získat PostgreSQL?
- 1.6) 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
+ 1.6) Jaká je poslední verze?
+ 1.7) Kde mohu získat podporu?
+ 1.8) Jak a kam hlásit chyby?
+ 1.9) Kde najdu informace o známých chybách nebo nepodporovaných
+ vlastnostech?
+ 1.10) Jaká je dostupná dokumentace?
+ 1.11) Jak se mohu naucit SQL?
+ 1.12) Jak se mohu pripojit k týmu vývojáru?
+ 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
+ 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v
+ nekterých zemích?
+
+ Dotazy na klientská rozhraní
- 2.1) Kde naleznu ODBC ovladače pro PostgreSQL?
- 2.2) Jaké nástroje lze použít pro PostgreSQL a web?
+ 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
+ 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
2.3) Existuje grafické rozhraní pro PostgreSQL?
- 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?
+ 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
+ 3.2) Jak nastavit pravidla pro prístup z jiných stanic?
+ 3.3) Jak vyladit databázi na vyssí výkon?
+ 3.4) Jaké mám ladící prostredky?
+ 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
+ 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu
+ PostgreSQL?
+ 3.7) Jaký hardware bych mel pouzívat?
Provozní dotazy
- 4.1) Čí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
+ 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
+ 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných
+ uzivatelu. Mohu videt dotazy, které pouzívá psql pro zobrazení techto
+ informací?
+ 4.3) Jak zmenit datový typ sloupce?
+ 4.4) Jaká je maximální velikost rádku, tabulky a databáze?
+ 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního
textového souboru?
- 4.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
+ 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
+ 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
+ 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index
+ pro case insensitive hledání?
+ 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit
+ dva retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli
+ je polozka NULL nebo ne?
+ 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
+ 4.11.1) Jak vytvorit serial/auto-increment polozku?
+ 4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
+ 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
+ prostredí?
+ 4.11.4) Proc není vygenerované císlo pouzito pri prerusení
+ transakce?Proc vznikají díry v císlování prostrednictvím sekvence nebo
+ typu SERIAL?
+ 4.12) Co to je OID? Co je to CTID?
+ 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
AllocSetAlloc()"?
- 4.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č?
+ 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
+ 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální
+ cas?
+ 4.16) Jak provést vnejsí spojení (outer join)?
+ 4.17) Jak provést dotaz napríc nekolika databázemi?
+ 4.18) Muze funkce vrátit více rádku nebo sloupcu?
+ 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
+ 4.20) Jaké jsou moznosti replikace databází?
+ 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí?
+ Proc jsou velká písmena v názvech automaticky prevedena na malá
+ písmena?
_________________________________________________________________
Obecné otázky
- 1.1) Co je 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-2007, 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.
+ 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
+
+ Výslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres .
+ V rade jazyku je slovo PostgreSQL obtízne vyslovitelný, proto se v
+ hovoru casto pouzívá zjednodusená forma názvu. Pro ty, kterí by si
+ rádi poslechli výslovnost, je k dispozici audiozáznam v MP3 formátu.
+
+ PostgreSQL je relacní databáze s nekterými objektovými rysy, která má
+ moznosti tradicních komercních databázových systému s nekolika
+ rozsíreními, které lze najít v DBMS systémech prístí generace.
+ Pouzívání PostgreSQL není omezené a veskeré zdrojové kódy jsou volne
+ dostupné.
+
+ Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojáru
+ navzájem komunikujících prostrednictvím internetu. Tento projekt není
+ rízen zádnou obchodní organizací. Pokud se chcete pridat k projektu,
+ prectete si vývojárské FAQ na adrese
+ http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html .
+
+ 1.2) Kdo rídí vývoj PostgreSQL?
+
+ Pokud budete hledat organizaci rídící vývoj PostgreSQL, budete
+ zklamáni. Nic takového neexistuje. Existují pouze "core" a CVS skupiny
+ uzivatelu, ale ty existují více z administrátorských duvodu nez z
+ organizacních. Projekt je smerován komunitou vývojáru a uzivatelu, ke
+ které se kdokoliv muze pripojit. Jediné co potrebuje, je prihlásit se
+ do elektronické konference. Více ve vývojárském FAQ.
+
+ 1.3) Pod jakou licencí je PostgreSQL?
+
+ PostgreSQL je predmetem následujících autorských práv:
+
+ Dílcí Copyright (c) 1996-2005, PostgreSQL Global Development Group
+ Dílcí Copyright (c) 1994-6, Regents of the University of California
+
+ Udeluje se oprávnení k uzití, rozmnozování, provádení úprav a
+ rozsirování tohoto softwaru a dokumentace k nemu, pro jakékoli úcely,
+ bez licencního poplatku a bez písemné licencní smlouvy, za podmínky,
+ ze na vsech jeho kopiích je uvedeno oznámení o výse uvedených právech,
+ jakoz i obsah tohoto a dvou následujících odstavcu.
+
+ THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ZÁDNÉM
+ PRÍPADE ODPOVEDNA ZÁDNÉ TRETÍ OSOBE ZA PRÍMOU, NEPRÍMOU, ZVLÁSTNÍ,
+ NAHODILOU NEBO VÝSLEDNOU SKODU, VCETNE USLÉHO ZISKU, ZPUSOBENOU UZITÍM
+ TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRÍPADE, ZE THE
+ UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOZNOSTI VZNIKU TAKOVÉ
+ SKODY.
+
+ THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO
+ NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÝROBKU KE
+ SPECIFICKÝM ÚCELUM. NÍZE UVEDENÝ SOFTWARE JE POSKYTNUT "JAK STOJÍ A
+ LEZÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO
+ ÚDRZBU, PODPORU, AKTUALIZACI, VYLEPSENÍ NEBO MODIFIKACI.
+
+ Výse uvedené je BSD licence, bezná licence otevreného zdroje. Není zde
+ zádné omezení ohledne uzití kódu zdroje. Jsme s tím spokojeni a nemáme
+ v úmyslu na této skutecnosti cokoli menit.
+
+ 1.4) Na kterých platformách lze provozovat PostgreSQL?
+
+ Strucne receno, PostgreSQL bezí na vsech moderních unixových
+ systémech. Seznam tech, u kterých probehlo testování, naleznete v
+ instalacních instrukcích.
+
+ PostreSQL také bezí nativne na vsech Microsof Windows systémech
+ odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP
+ a Windows2003. Instalacní balícek naleznete na adrese
+ http://pgfoundry.org/projects/pginstaller. Na starsích systémech s
+ jeste MS-DOS jádrem lze spustit PostgreSQL s emulacním programem
+ Cygwin.
+
+ Dále existuje port pro Novell Netware 6 port na adrese
+ http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese
+ http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
+ SQL&stype=all&sort=type&dir=%2F .
+
+ 1.5) Kde mohu získat PostgreSQL?
+
+ Pomocí webového klienta z adresy http://www.postgresql.org/ftp/ nebo
+ klienta ftp z adresy ftp://ftp.postgresql.org/pub/.
+
+ 1.6) Jaká je poslední verze?
+
+ Nejnovejsí verzí PostgreSQL je verze 8.2.5
+
+ V plánu je uvolnovat kazdorocne jednu velkou verzi a kazdých nekolik
+ mesícu malé verze.
+
+ 1.7) Kde mohu získat podporu?
+
+ Nejcastejsí forma podpory uzivatelum PostgreSQL komunitou je
+ prostrednictvím e-mailu. Na nasem webovém serveru naleznete odkaz na
+ stránky,kde se muzete prihlásit do elektronické konference. Pro
+ zacátek jsou doporucené konference general nebo bugs.
+
+ Dalsí cestou je IRC kanál #postgresql na Freenode (irc.freenode.net).
+ K pripojení pouzijte Unixový príkaz irc -x '#postgresql' "$USER"
+ irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti
+ existuje jeste spanelská (#postgresql-es) a francouzská
+ (#postgresqlfr) verze. Dalsí PostgreSQL kanál naleznete na EFNet.
+
+ Seznam spolecností poskytující komercní podporu naleznete na adrese
+ http://techdocs.postgresql.org/companies.php.
+
+ 1.8) Jak a kam hlásit chyby?
+
+ Vyplnte formulár na adrese
+ http://www.postgresql.org/support/submitbug. Na nasem ftp serveru
+ ftp://ftp.postgresql.org/pub/ si overte, ze pouzíváte aktuální verzi
+ PostreSQL.
+
+ Chyby reportované prostrednictvím chybového formuláre nebo zasláním
+ mailu do PostgreSQL konference obvykle generuje následující odezvu:
+ * Nejedná se o chybu, a proc
+ * Jedná se o známou chybu, která je jiz v seznamu úkolu TODO
+ * Tato chyba byla opravena v aktuální verzi
+ * Tato chyba byla jiz opravena ve verzi, která zatím nebyla
+ oficiálne uvolnena
+ * Pozadavek na dalsí doplnující informace:
+ + Operacní systém
+ + Verze PostgreSQL
+ + Test reprodukující chybu
+ + Ladící informace
+ + Backtrace výstup debuggeru
+ * Jedná se o zatím nezjistenou chybu, pak muzete cekat
+ + Záplatu odstranující chybu, která bude vlozena do dalsí velké
+ nebo malé verze
+ + Informaci, ze se jedná o chybu, kterou nelze okamzite resit a
+ je proto pridána do TODO
+
+ 1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?
+
+ PostgreSQL podporuje rozsírenou podmnozinu SQL:2003. V nasem TODO
+ naleznete seznam známých chyb, chybejících vlastností, a plány do
+ budoucna.
+
+ Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle:
+ * Pozadavek je jiz v TODO
+ * Pozadovaná funkce není chtená protoze
+ + Duplikuje jiz existující funkci, která respektuje SQL
+ standard
+ + Implementací funkce by se prílis zkomplikoval kód bez
+ relevantního prínosu
+ + Funkce by mohla být nebezpecná nebo nespolehlivá
+ * Pozadavek je pridán do TODO
+
+ PostgreSQL nepozívá systém pro sledování chyb, protoze jsme zjistili,
+ ze je efektivnejsí prímo reagovat na maily a udrzovat aktuální TODO. V
+ praxi je snaha o co nejrychlejsí resení chyb, a chyby, které by se
+ mohly projevit u mnoha uzivatelu jsou opravovány velice rychle. Jediné
+ místo, kde lze dohledat vsechny zmeny, rozsírení a opravy v PostgreSQL
+ je CVS log. Poznámky k verzi "Release notes" nezachycují vsechny
+ zmeny, k nemz doslo.
+
+ 1.10) Jaká je dostupná dokumentace?
+
+ PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál,
+ manuálové stránky a testovací príklady. Podívejte se do adresáre /doc.
+ Manuál je prístupný online na http://www.postgresql.org/docs.
+
+ K dispozici jsou zdarma dve online knihy na adresách
+ http://www.postgresql.org/docs/books/awbook.html a
+ http://www.commandprompt.com/ppbook/. Dalsí literaturu lze zakoupit.
+ Nejpopulárnejsí je od Kerryho Douglase. Seznam dostupné literatury je
+ na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je
+ kolekce technicky orientovaných clánku tematicky spojených s
+ PostgreSQL na adrese http://techdocs.postgresql.org/.
+
+ Rádkový klient psql má \d príkazy pro zobrazení informací o typech,
+ operátorech, funkcích, agregacních funkcí, atd. Pouzijte \? pro
+ zobrazení dostupných príkazu.
+
+ Dalsí dokumentaci najdete na nasem webu.
+
+ 1.11) Jak se mohu naucit SQL?
+
+ Podívejte se do výse uvedené dokumentace. Dalsí online knihou je
+ "Teach Yourself SQL in 21 Days, Second Edition" na adrese
+ http://members.tripod.com/er4ebus/sql/index.htm. Mnoho nasich
+ uzivatelu doporucuje knihu The Practical SQL Handbook, Bowman, Judith
+ S., et al., Addison-Wesley. Dalsí The Complete Reference SQL, Groff et
+ al., McGraw-Hill.
+
+ Dalsí online tutoriály jsou dostupné na adresách:
+ * http://www.intermedia.net/support/sql/sqltut.shtm
+ * http://sqlcourse.com
+ * http://www.w3schools.com/sql/default.asp
+ * http://mysite.verizon.net/Graeme_Birchall/id1.html
+
+ 1.12) Jak se mohu pripojit k týmu vývojáru?
+
+ Prostudujte si Developer's FAQ.
+
+ 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
+
+ Software muzeme porovnávat z nekolika ruzných pohledu: vlastnosti,
+ výkon, spolehlivost, podpora a cena.
+
+ Vlastnosti
+
+ PostgreSQL nabízí vetsinu funkcí funkcionality velkých komercních DBMS
+ systému jako jsou: transakce, vnorené dotazy, spouste, referencní
+ integrita a sofistikovaný systém zamykání. Poskytujeme urcité funkce,
+ které ostatní systémy bezne nepodporují. Napr. uzivatelem definované
+ typy, dedicnost, pravidla (rules), a MVCC architekturu.
+
+ Výkon
+
+ Výkon PostgreSQL je srovnatelný s ostatními komercními nebo Open
+ Source databázemi. V nekterých prípadech je rychlejsí, jindy
+ pomalejsí. Nás výkon je obvykle +/-10% vuci ostatním databázím.
+
+ Spolehlivost
+
+ Uvedomujeme si, ze databáze musí být stoprocentne spolehlivá, jinak je
+ nepouzitelná. Snazíme se, aby kazdá verze byla dobre otestována a
+ obsahovala minimum chyb. Kazdá verze je minimálne nekolik mesícu v
+ beta testovacím rezimu. Do produkcního rezimu se dostane, az kdyz
+ nedochází k dalsím zmenám nebo opravám. Veríme, ze jsem více nez
+ srovnatelní s ostatními databázemi v této oblasti.
+
+ Podpora
+
+ Na nasich internetových konferencích se setkává velká skupina vývojáru
+ a uzivatelu pri resení vyskytujících se problému. Nase internetové
+ konference umoznují kontakt velké skupiny vývojáru a uzivatelu.
+ Nemuzeme garantovat opravu chyby, ale komercní DBMSs také vzdy
+ negarantují resení problému. Veríme ale, ze díky prímému kontaktu na
+ vývojáre, nasi uzivatelskou komunitu, manuálum, a dostupným zdrojovým
+ kódum máme lepsí podporu nez ostatní DBMSs. Pro ty, kterí preferují
+ komercní "per-incident" podporu, existuje spolecností, kterí ji
+ nabízejí (FAQ sekce 1.7.)
+
+ Cena
+
+ PostgreSQL lze pouzívat bezplatne (a to i pro komercní pouzití). Také
+ muzete neomezene pouzívat nás kód ve svých produktech s výjimkami
+ specifikovanými v nasí licenci (prebíráme BSD licenci).
+
+ 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v nekterých
+ zemích?
+
+ Pocínaje verzí 8.0.[4+] podporuje PostgreSQL letní cas také pro USA.
+ Podpora letního casu (daylight saving time) pro Kanadu a Západní
+ Austrálii je obsazena ve verzích 8.0.[10+] a 8.1.[6+] a vsech
+ následujících verzích. Starsí verze pouzívaly systémovou databázi
+ casových zón obsahující, krome jiného, informaci o tom, zda se pro
+ danou casovou zónu rozlisuje mezi letním a zimním casem.
_________________________________________________________________
- 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
+ Dotazy na klientská rozhraní
- 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.
+ 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
+
+ PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C.
+ Vsechna dalsí rozhraní predstavují nezávislé projekty, které je treba
+ stáhnout z internetu samostatne. Osamostatnení techto projektu
+ umoznuje nezávislost vývojových týmu a moznost vydávat nové verze bez
+ ohledu na vydání nové verze PostgreSQL.
+
+ Nekteré programovací jazyky jako je napr. PHP obsahují rozhraní pro
+ PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho
+ dalsích jsou dostupné na adrese: http://gborg.postgresql.org v sekci
+ Drivers/Interfaces.
- Pro složitější případy se často používá Perl a CGI.pm nebo mod_perl.
+ 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
+
+ Dobrým úvodem do problematiky databází v prostredí webových stránek
+ muze být web http://www.webreview.com.
- 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.
+ PHP (http://www.php.net) je vynikajícím rozhraním pro tvorbu webu.
- Úplnější seznam najdete na
- http://techdocs.postgresql.org/guides/GUITools.
+ Pro slozitejsí úlohy se casto pouzívá Perl a jeho BDB:Pg rozhraní s
+ podporou CGI - CGI.pm nebo mod_perl(u).
- 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.
+ 2.3) Existuje grafické rozhraní pro PostgreSQL?
+
+ K dispozici je rada grafických nástroju podporujících PostgreSQL a to
+ od komercních nebo open source vývojáru. Podrobný seznam naleznete na
+ adrese http://www.postgresql.org/docs/techdocs.54.
_________________________________________________________________
Administrativní dotazy
- 3.1) Jak nainstalovat PostgreSQL jinam 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.
+ 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
+
+ Pri spoustení configure nastavte parametr --prefix
+
+ 3.2) Jak nastavit pravidla pro prístup z jiných stanic?
+
+ Ve výchozí konfiguraci, PostgreSQL umoznuje pouze pripojení z
+ lokálního uzivatele prostrednictvím Unix domain sockets nebo TCP/IP
+ spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a
+ povolení adresy v souboru $PGDATA/pg_hba.conf se nelze pripojit k
+ PostgreSQL z ostatních stanic. Zmena výse zmínených parametru vyzaduje
+ restart databázového serveru.
+
+ 3.3) Jak vyladit databázi na vyssí výkon?
+
+ Výkon systému muzete ovlivnit ve trech oblastech:
+
+ Zmeny dotazu
+
+ * Pouzitím indexu vcetne cástecných a funkcionálních
+ * Pouzitím COPY místo opakovaných INSERTu
+ * Sloucením mnoha SQL príkazu do jedné transakce snízením rezie na
+ commit
+ * Pouzíváním CLUSTERU, pokud nacítáte vetsí pocet rádek podle indexu
+ * Pouzitím klauzule LIMIT v poddotazech
+ * Pouzitím predpripravených dotazu
+ * Pouzíváním ANALYZE. Tento príkaz aktualizuje statistiky, které se
+ pouzívají pri optimalizaci dotazu
+ * Pravidelné pouzití VACUUM nebo pouzívání pg_autovacuum
+ * Odstranením indexu pred rozsáhlými zmenami v datech
+
+ Konfigurace serveru
+
+ Urcité parametry v souboru postgresql.conf mají vliv na výkon serveru.
+ Detaily naleznete v prírucce Administrátora v Server Run-time
+ Environment/Run-time Configuration. Dalsí komentáre naleznete v
+ http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht
+ ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
+
+ Výber hardware
+
+ Vliv hardware na výkon serveru je popsán v dokumentech
+ http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html
+ a http://www.powerpostgresql.com/PerfList/.
+
+ 3.4) Jaké mám ladící prostredky?
+
+ Nastavením log_* promenných v konfiguraci serveru si vynutíte logování
+ dotazu a procesních statistik, které Vám mohou pomoci pri ladení a
+ optimalizaci výkonu.
+
+ 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
+
+ Prekrocil jste výchozí limit, který je 100 soucasne pripojených
+ uzivatelu. V konfiguraci serveru v postgresql.conf tuto hodnotu muzete
+ zvetsit zmenou hodnoty max_connection. Nezapomente restartovat server.
+
+ 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu PostgreSQL?
+
+ Zpusob císlování je popsán v dokumentaci na
+ http://www.postgresql.org/support/versioning. Instrukce k provedení
+ migrace na vyssí verzi jsou taktéz v dokumentaci na adrese
+ http://www.postgresql.org/docs/current/static/install-upgrading.html.
+
+ 3.7) Jaký hardware bych mel pouzívat?
+
+ Jelikoz PC jsou vetsinou kompatibilní, lidé mají tendence verit, ze
+ vsechna PC jsou stejne kvalitní. Coz není pravda. Pameti ECC, SCSI a
+ kvalitní základní desky jsou mnohem spolehlivejsí a výkonnejsí nez
+ lacinejsí hardware. PostgreSQL pobezí na vetsine hardwaru, nicméne
+ pokud je pro Vás spolehlivost a výkon systému dulezitá, je dobré
+ venovat cas nalezení vhodné hardwarové konfigurace. Na nasich
+ elektronických konferencích muzete diskutovat o vhodných konfiguracích
+ a znackách.
_________________________________________________________________
Provozní dotazy
- 4.1) Čí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.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
+
+ Pokud potrebujete pouze nekolik rádku a pokud víte kolik, pouzijte
+ SELECT LIMIT. Pokud bude mozné pouzít index shodující se s ORDER BY,
+ je mozné, ze se nebude provádet celý dotaz. Pokud neznáte pocet
+ záznamu, pouzijte kurzor a príkaz FETCH.
+
+ Pro výber náhodného rádku pouzijte príkaz ve tvaru:
+SELECT col
+FROM tab
+ORDER BY random()
+LIMIT 1;
- 4.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;
+ 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných uzivatelu.
+ Mohu videt dotazy, které pouzívá psql pro zobrazení techto informací?
+
+ V psql príkazem \dt získáte seznam tabulek. Úplný seznam príkazu psql
+ získáte príkazem \?. Alternativne si muzete prostudovat zdrojový kód
+ psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL
+ príkazy, které jsou generovány pro získání výstupu psql "backslash"
+ príkazu. Také muzete nastartovat psql s parametrem -E, který zpusobí
+ zobrazení vsech SQL príkazu, které se odesílají na server. PostgreSQL
+ také podporuje SQL standard INFORMACNÍ SCHÉMATA (standardní systémové
+ tabulky). Klasickým dotazem do systémových tabulek získáte pozadované
+ informace o strukture databáze.
+
+ Systémové tabulky PostgreSQL (mimo rámec SQL standardu) pouzívají
+ prefix pg_. Pro zjistení struktury databáze je muzete pouzít také, i
+ kdyz preferovány jsou dotazy do informacního schématu.
+
+ Seznam vsech databází získáte príkazem psql -l
+
+ Dalsí inspiraci najdete v souboru pgsql/src/tutorial/syscat.source.
+ Obsahuje ilustracní SELECTy potrebné k získání informací z systémových
+ tabulek databáze.
+
+ 4.3) Jak zmenit datový typ sloupce?
+
+ Ve verzích 8.0 a pozdejsích jednoduse:
+ALTER TABLE ALTER COLUMN TYPE
- 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;
+ V starsích verzích:
+BEGIN;
+ALTER TABLE tab ADD COLUMN new_col new_data_type;
+UPDATE tab SET new_col = CAST(old_col AS new_data_type);
+ALTER TABLE tab DROP COLUMN old_col;
+COMMIT;
- Poté proveďte VACUUM FULL tab - uvolníte tím diskový prostor zabraný
- nyní již neplatnými řádky.
+ Po zmene spustte príkaz VACUUM FULL, aby doslo k uvolnení diskového
+ prostoru pouzitého v tu chvíli jiz neplatnými záznamy.
- 4.5) Jaká je maximální velikost řádku, tabulky a databáze?
-
+ 4.4) Jaká je maximální velikost rádku, tabulky a databáze?
+
PostgreSQL má tato omezení:
- Maximální velikost databáze: neomezena (existují 32TB db)
- Maximálné velikost tabulky: 32 TB
- Maximální velikost řá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
+ Maximální velikost databáze: neomezena (existují 32TB db)
+ Maximální velikost tabulky: 32 TB
+ Maximální velikost rádky: 480GB
+ Maximální velikost polozky 1 GB
+ Maximální pocet rádku v tabulce: neomezeno
+ Maximální pocet sloupcu v tabulce: 250-1600 podle typu
+ Maximální pocet indexu na tabulce: neomezeno
+
+ Ve skutecnosti nic není neomezeno, limitem bývá vzdy dostupná disková
+ pamet nebo velikost operacní pameti. Pokud máte nekterou z techto
+ hodnot neobvykle velkou, muze dojít ke snízení výkonu.
+
+ Maximální velikost tabulky je 32 TB a nevyzaduje podporu velkých
+ souboru operacním systémem. Velké tabulky se ukládají do nekolika 1 GB
+ souboru takze limity souborového systému nejsou podstatné.
+
+ Maximální velikost tabulky a maximální pocet sloupcu muzeme
+ zectyrnásobit nastavením velikosti bloku na 32K.
+
+ Indexy jsou povolené pouze na sloupcích jejichz délka je mensí nez
+ 2000 znaku. Pokud tuto délku prekrocíme a index potrebujeme pro
+ zajistení jednoznacnosti, je vhodnejsí pouzít funkcionální index nad
+ MD5 funkcí nebo fulltextový index.
+
+ 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního textového
+ souboru?
+
+ PostgreSQL vyzaduje az petinásobek diskového prostoru k ulození dat z
textového souboru.
- 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ů
+ Napríklad, uvazujme soubor se 100 tisíci rádky obsahující na kazdé
+ rádce celé císlo a textový popis. Text je v prumerne dvacet bytu
dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze
- obsahující odpovídající data bude zhruba 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
+ obsahující odpovídající data bude zhruba 5.2 MB.
+ 24 bytu: hlavicka rádku (priblizne)
+ 24 bytu: jedna celocíselná polozka a jedna textová
+ + 4 byty: ukazatel na stránku k entici
------------------------------------------------------
- 64 bytů na řádek
-
- Velikost datové stránky PostgreSQL je 8KB
+ 52 bytu na rádek
- 8192 bytů na stránce
- ---------------------- = 128 řádek na stránku
- 64 bytů za řádek
+ Velikost datové stránky PostgreSQL je 8192 bytu (8KB)
+ 8192 bytu na stránce
+---------------------- = 158 rádek na stránku
+ 52 bytu za rádek
- 100000 řádek
- -------------------- = 782 stránek (zaokrouhleno nahoru)
- 128 řádek na stránce
+100000 rádek
+----------------------- = 633 stránek (zaokrouhleno nahoru)
+ 158 rádek na stránce
- 782 * 8192 = 6, 406, 144 bytů (6.4 MB)
+633 datových stránek * 8192 bytu na kazdou stránku = 5,185,536 bytu (5.2 MB)
- Indexy nemají tak velkou režii, ale mohou být také velké, protože
+ Indexy nemají tak velkou rezii, ale mohou být také velké, protoze
obsahují indexovaná data.
- Hodnoty NULL jsou uloženy v bitmapách, takže spotřebují jen velmi málo
+ Hodnoty NULL jsou ulozeny v bitmapách, takze zabírají 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]
+ 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
+
+ Kazdý dotaz nemusí nutne pouzít existující indexy. Index se pouzije
+ tehdy, kdyz je tabulka vetsí nez urcitá minimální velikost, a dotaz
+ vybírá pouze procentuálne malou cást rádku tabulky. To proto, ze
+ náhodný prístup k disku daný ctením indexu muze být pomalejsí nez
+ lineární ctení tabulky nebo sekvencní ctení.
+
+ PostgreSQL rozhoduje o pouzití indexu na základe statistiky prístupu k
+ tabulce. Tyto statistiky se shromazdují príkazy VACUUM ANALYZE nebo
+ ANALYZE. Díky statistikám má optimizer informaci o poctu rádek v
+ tabulce a muze lépe rozhodnout o pouzití indexu. Statistiky se uplatní
+ pri urcení optimálního poradí a metody spojení tabulek. Statistiky by
+ se meli aktualizovat opakovane, tak jak se mení obsah tabulek.
+
+ Indexy nejsou obycejne pouzity pro setrídení nebo spojení tabulek.
+ Sekvencní zpracování následované explicitním trídením je obycejne
+ rychlejsí nez pouzití indexu na velké tabulce.
+
+ Jinak je tomu v prípade pouzití LIMIT a ORDER BY, pri kterém se
+ vetsinou index pouzije, jelikoz je výsledkem pouze malá cást tabulky.
+
+ Pokud si myslíte, ze optimizer mylne zvolil sekvencní prohledávání
+ tabulky, pouzijte príkaz SET enable_seqscan TO 'off' a zkuste zda je
+ prohledávání s indexem rychlejsí.
+
+ Pri vyhledávání na základe vzoru jako je napr. operátor LIKE nebo ~ se
+ indexy pouzijí pouze za urcitých skutecností:
+ * zacátek hledaného vzoru musí být ukotven k zacátku, tj.
+ + vzor LIKE nesmí zacínat %
+ + ~ regulární výraz musí zacínat ^
+ * vzor nesmí zacínat intervalem, napr. [a-e]
* vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~*
- 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í).
+ nepouzívá indexy. Muzete ale pouzít funkcionální indexy, které
+ jsou popsány v sekci 4.8
+ * pri inicializaci databáze (initdb) musí být pouzito C locale nebo
+ vytvorte speciální text_pattern_index, který umozní, pri
+ respektování zmínených podmínek pouzití indexu operací LIKE. Pro
+ vyhledávání celých slov je mozné a výhodné pouzít fulltext.
- 4.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';
+ 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
+
+ Podívejte se do nápovedy k príkazu EXPLAIN.
+
+ 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index pro case
+ insensitive hledání?
+
+ Vyhledávání prostrednictvím regulárních vzoru zajistuje operátor ~,
+ který je case-sensitive. Jeho case-insensitive varianta je operátor
+ ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE.
+
+ Case-insensitive vyhledání se resí:
+SELECT *
+FROM tab
+WHERE lower(col) = 'abc';
- 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));
+ Tento dotaz nepouzije standardní index. Musíte pouzít tzv.
+ funkcionální index:
+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
+ Pokud index vytvoríme jako unikátní, tak muzeme ukládat retezce
+ obsahující malá i velká písmena, ale nikoliv retezce, které se od sebe
+ odlisují jen v malých a velkých písmenech. K zajistení zápisu retezce
+ obsahující pouze malá nebo pouze velká písmena pouzijte CHECK kontroly
+ nebo triggery.
+
+ 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit dva
+ retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli je polozka
+ NULL nebo ne?
+
+ Pokud chcete testovat hodnotu NULL pouzijte operátor IS:
+ SELECT *
+ FROM tab
+ WHERE col IS NULL;
- 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
- );
+ K spojení retezcu, které mohou obsahovat hodnotu NULL, pouzívejte
+ funkci COALESCE(), napr.:
+ SELECT COALESCE(col1, '') || COALESCE(col2, '')
+ FROM tab
- 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);
+ Pokud chcete trídit podle hodnoty NULL, pouzijte výraz IS NULL nebo IS
+ NOT NULL v klauzuli ORDER. Hodnota pravda má prednost pred hodnotou
+ false a tedy pokud pouzijete:
+ SELECT *
+ FROM tab
+ ORDER BY (col IS NOT NULL)
- 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')");
+ tak záznamy s NULL budou na zacátku setrídených dat.
+
+ 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
+
+ Typ Interní název Poznámky
+ VARCHAR(n) varchar n urcuje maximální délku
+ CHAR(n) bpchar retezec je do dané délky rozsíren mezerami
+ TEXT text bez omezení délky
+ BYTEA bytea pole bytu nespecifikované délky
+ "char" char jeden znak
+
+ Na interní názvy muzete narazit v systémovém katalogu nebo v nekterých
+ chybových hláseních.
+
+ Ctyri první typy jsou tzv. varlena typy (první ctyri byty na disku
+ jsou obsahují délku, ostatní obsahují vlastní data). Skutecne obsazený
+ prostor je tedy o neco málo vetsí nez deklarovaná velikost. Na druhou
+ stranu, delsí retezce jsou komprimovány, takze obsazený prostor na
+ disku muze být mensí nez se ceká.
+
+ VARCHAR(n) je vhodný pro ukládání ruzne dlouhých retezcu u kterých
+ známe délkové omezení, TEXT pro retezce bez omezení délky (maximum je
+ jeden gigabyte).
+
+ CHAR(n) se pouzívá pro ulození stejne dlouhých retezcu. CHAR(n) doplní
+ mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak
+ jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot.
+ Vsechny zmínené typy mají podobné výkonové charakteristiky.
+
+ 4.11.1) Jak vytvorit serial/auto-increment polozku?
+
+ V PostgreSQL muzete pouzít datový typ SERIAL. Jeho pouzitím se
+ automaticky vytvorí sekvence. Napríklad:
+CREATE TABLE person (
+ id SERIAL,
+ name TEXT
+);
- 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')");
+ je automaticky transformováno na:
+CREATE SEQUENCE person_id_seq;
+CREATE TABLE person (
+ id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
+ name TEXT
+);
- 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';
+ Podrobnejsí informace najdete v manuálu v popisu príkazu
+ create_sequence.
+
+ 4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
+
+ Nejjednodussím zpusob, jak získat vygenerovanou hodnotu typu SERIAL,
+ je vyuzít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto:
+INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
- 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
+ Také muzete pouzít funkci nextvall() a její výsledek pouzít v príkazu
+ INSERT, nebo zavolat currval() po provedení príkazu INSERT.
+
+ 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
+ prostredí?
+
+ Ne, currval vrací vzdy hodnotu, která byla vygenerována pro vás.
+
+ 4.11.4) Proc není vygenerované císlo pouzito pri prerusení transakce?Proc
+ vznikají díry v císlování prostrednictvím sekvence nebo typu SERIAL?
+
+ Poté co sekvence vygeneruje nové císlo, tak se nedochází k zamcení
+ sekvence a neceká se na úspesné nebo neúspesné dokoncení transakce.
+ Odvoláním transakce, která si vyzádala císla sekvence se tato císla
+ nenávratne ztratí.
+
+ 4.12) Co to je OID? Co je to CTID?
+
+ V prípade, ze tabulku nezalozíme s atributem WITHOUT OIDS, tak má
+ kazdý rádek unikátní identifikacní císlo OID. Toto císlo je 4 bajtové
+ celé císlo, které je jedinecné v celé instalaci. Pretece po 4
+ miliardách rádku. PostgreSQL pouzívá OIDs jako interní linky v
+ interních systémových tabulkách.
+
+ K získání unikátního císla v nesystémových tabulkách je vhodnejsí
+ pouzití typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzívá pouze
+ pro jednu tabulku a je tudíz méne náchylná na pretecení. Pokud byste
+ se toho obávali, pouzijte typ SERIAL8.
+
+ CTID se pouzívá k identifikaci konkrétního fyzického rádku. CTID se
+ mení pokud je rádek modifikován nebo znovu nacten. Pouzívají ho indexy
+ jako adresaci fyzických rádku.
+
+ 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
+ AllocSetAlloc()"?
+
+ Pravdepodobne jste vycerpal dostupnou virtuální pamet, nebo tvuj
+ kernel má prílis nízké limity u urcitých zdroju. Pred startem
+ PostgreSQL vyzkousejte:
+ulimit -d 262144
+limit datasize 256m
- 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);
+ Mozná, ze se projde pouze jeden príkaz - zálezí to na vasem shellu.
+ Mel by zvednout limity datových segmentu vasich procesu na dostatecne
+ velkou hodnotu a snad umoznit dokoncení dotazu. Zmena limitu se bude
+ aplikovat pouze na aktuální proces a na vsechny nove vytvorené
+ procesy. Jestlize máte problém s SQL klientem, protoze vám server
+ vrátil prílis dat, zkuste to pred startem klienta.
+
+ 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
+
+ V psql napiste:
+SELECT version();
- na:
- SELECT *
- FROM tab
- WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
+ 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální cas?
+
+ Pouzijte CURRENT_TIMESTAMP:
+CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
- 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);
+ 4.16) Jak provést vnejsí spojení (outer join)?
+
+ PostgreSQL podporuje standardní SQL syntaxi pro vnejsí spojení. Zde
+ jsou dva príklady:
+SELECT *
+FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
nebo
- SELECT *
- FROM t1 LEFT OUTER JOIN 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;
+SELECT *
+FROM t1 LEFT OUTER JOIN t2 USING (col);
- 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.
+ Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a jeste
+ vrátí vsechny nespárované rádky t2 (ty, které nedohledá v t2). RIGHT
+ JOIN by pripojil vsechny nespárované rádky z t2. FULL JOIN vrátí
+ vsechny spárované rádky i vsechny zbývající rádky z obou tabulek.
+ Klícové slovo OUTER je volitelné. Bezná operace JOIN se také oznacuje
+ jako vnitrní spojení.
+
+ 4.17) Jak provést dotaz napríc nekolika databázemi?
+
+ Neexistuje zádný zpusob, jak se v dotazu odkazovat na tabulky z jiné
+ nez aktuální databáze. A to protoze má systémové tabulky ulozené
+ nezávisle v kazdé databázi a není tak úplne zrejmé, jak by se dotaz
+ provedený napríc databázemi mel chovat.
+
+ Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomocí
+ funkcí. Druhý zpusob je simultální pripojení klienta ke vsem
+ relevantním databázím a sloucení výsledku na strane klienta.
+
+ 4.18) Muze funkce vrátit více rádku nebo sloupcu?
+
+ Jde to jednoduse pomocí set-returning funkce. Více na
+ http://www.postgresql.org/docs/techdocs.17.
+
+ 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
+
+ Nechteným vedlejsím efektem kesování SQL dotazu v PL/pgSQL funkci je
+ problém s neplatnými odkazy na docasné tabulky, které byly od prvního
+ spustení funkce zruseny a znovu vytvoreny pred dalsím spustením
+ PL/pgSQL funkce. Resením je pouzít príkaz EXECUTE a to proto, ze
+ provádecí plán SQL príkazu spousteného príkazem EXECUTE se vytvárí
+ pokazdé znovu (neukládá se do cache).
+
+ Tento problém by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssích
+ verzích.
+
+ 4.20) Jaké jsou moznosti replikace databází?
+
+ Replikaci databáze umoznuje nekolik technoligií. Kazdá má urcité
+ výhody a nevýhody.
+
+ Master/Slave replikaci podporuje jeden hlavní server, který prijímá
+ pozadavky na zápis a ctení, a nekolik podrízených serveru, které
+ umoznují pouze ctení (SELECT). Nejrozsírenejsím volne dostupným
+ resením tohoto typu je Slony-I.
+
+ Replikace typu Multi-master podporuje existenci nekolika serveru s
+ povoleným zápisem na více replikovaných serverech. Toto resení zvysuje
+ zátez serveru, protoze je nutná synchronizace serveru.
+ Nejrozsírenejsím volne dostupným resením je PGCluster.
+
+ Jeste existuje nekolik komercních a hardware resení replikací
+ podporujících ruzné modely replikace.
+
+ 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proc
+ jsou velká písmena v názvech automaticky prevedena na malá písmena?
+
+ Nejcastejsím duvodem nerozpoznání názvu objektu bylo pouzití vlození
+ názvu sloupce nebo tabulky mezi uvozovky pri zakládání tabulky. Pokud
+ se název zapíse mezi uvozovky, pak je case sensitive, a v dusledku
+ toho je nutné názvy techto sloupcu nebo tabulek v SQL príkazech také
+ vkládat mezi uvozovky (pokud obsahují velká písmena). Nekteré
+ programy, jako je napríklad pgAdmin, automaticky pouzívají uvozovky.
+ Takze pokud chcete, aby systém identifikoval identifikátor, musíte:
+ * nepouzívat uvozovky v príkazu CREATE TABLE
+ * v identifikátoru pouzít pouze malá písmena
+ * v dotazech vkládat identifikátory do uvozovek
diff --git a/doc/src/FAQ/FAQ_czech.html b/doc/src/FAQ/FAQ_czech.html
index 7baa4c0dea9..3a485388eed 100644
--- a/doc/src/FAQ/FAQ_czech.html
+++ b/doc/src/FAQ/FAQ_czech.html
@@ -1,1167 +1,645 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<HTML>
- <HEAD>
- <META name="generator" content="HTML Tidy, see www.w3.org">
- <META http-equiv="Content-Type" content="text/html; charset="iso-8859-2">
- <META http-equiv="Content-language" content="cs">
- <META name="description" lang="en" content="Czech translation of FAQ for PostgreSQL">
- <META name="description" lang="cs" content="Český překlad FAQ PostgreSQL">
-
- <TITLE>PostgreSQL FAQ</TITLE>
- </HEAD>
-
- <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
- alink="#0000ff">
-
-
- <H1>Často kladené dotazy (FAQ) PostgreSQL</H1>
-
- <P>Poslední aktualizace: Středa 23. června 21:10:00 EST 2004</P>
-
- <P>Současný správce: Bruce Momjian (<A href=
- "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)</P>
-
- <P>Přeložil: Pavel Stěhule (<A href=
- "mailto:stehule@kix.fsv.cvut.cz">stehule@kix.fsv.cvut.cz</A>)</P>
-
- <P>Aktuální verzi tohoto dokumentu naleznete na adrese: <A href=
- "http://www.PostgreSQL.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.
- Český překlad na adrese: <A href="http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html">
- http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html</A>.</P>
-
- <P>Odpovědi na dotazy relevantní ke konkrétním platformám
- lze nalézt na adrese: <A href="http://www.PostgreSQL.org/docs/index.html">
- http://www.PostgreSQL.org/docs/index.html</A>.</P>
- <HR>
- <H2 align="center">Obecné otázky</H2>
-
- <A href="#1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?<BR>
- <A href="#1.2">1.2</A>) Jaká je licence na PostgreSQL?<BR>
- <A href="#1.3">1.3</A>) Na kterých Unixex lze spustit PostgreSQL?<BR>
- <A href="#1.4">1.4</A>) Které ne-unixové platformy jsou podporované?<BR>
- <A href="#1.5">1.5</A>) Kde mohu získat PostgreSQL?<BR>
- <A href="#1.6">1.6</A>) Kde mohu získat podporu?<BR>
- <A href="#1.7">1.7</A>) Kde je poslední verze?<BR>
- <A href="#1.8">1.8</A>) Jaká je dostupná dokumentace?<BR>
- <A href="#1.9">1.9</A>) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?<BR>
- <A href="#1.10">1.10</A>) Jak se mohu naučit SQL?<BR>
- <A href="#1.11">1.11</A>) Nemá PostgreSQL problémy s rokem 2000?<BR>
- <A href="#1.12">1.12</A>) Jak se připojit k vývojářskému týmu?<BR>
- <A href="#1.13">1.13</A>) Kam podat report o chybě?<BR>
- <A href="#1.14">1.14</A>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?<BR>
- <A href="#1.15">1.15</A>) Jak lze finančně pomoci PostgreSQL?<BR>
-
- <H2 align="center">User client dotazy</H2>
-
- <A href="#2.1">2.1</A>) Kde naleznu ODBC ovladače pro PostgreSQL?<BR>
- <A href="#2.2">2.2</A>) Jaké nástroje lze použít pro PostgreSQL a web?<BR>
- <A href="#2.3">2.3</A>) Existuje grafické rozhraní pro PostgreSQL?<BR>
- <A href="#2.4">2.4</A>) Které programovací jazyky mají podporu pro PostgreSQL?<BR>
-
- <H2 align="center">Administrativní dotazy</H2>
-
- <A href="#3.1">3.1</A>) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?<BR>
- <A href="#3.2">3.2</A>) Při startu postmaster, dostanu chybové hlášení Bad System Call nebo
- core dump. Proč?<BR>
- <A href="#3.3">3.3</A>) Při startu postmastera dostanu hlášení o chybě
- IpcMemoryCreate. Proč?<BR>
- <A href="#3.4">3.4</A>) Při startu postmastera dostanu hlášení o chybě IpcSemaphoreCreate.
- Proč?<BR>
- <A href="#3.5">3.5</A>) Jak povolit nebo zakázat přístup z jiných stanic?<BR>
- <A href="#3.6">3.6</A>) Jak ladit databázový stroj na lepší výkon?<BR>
- <A href="#3.7">3.7</A>) Jaké jsou možnosti ladění?<BR>
- <A href="#3.8">3.8</A>) Proč dostanu "Sorry, too many clients", když se zkouším připojit?<BR>
- <A href="#3.9">3.9</A>) K čemu slouží adresář pgsql_tmp?<BR>
- <A href="#3.10">3.10</A>) Proč je požadováno dump a obnovení (load) databáze během upgrade
- mezi velkými verzemi PostgreSQL?<BR>
-
- <H2 align="center">Provozní dotazy</H2>
-
- <A href="#4.1">4.1</A>) Čím se liší binární a normální kurzor?<BR>
- <A href="#4.2">4.2</A>) Jak získat pouze první řádek dotazu? Náhodný řádek?<BR>
- <A href="#4.3">4.3</A>) Jak získám seznam tabulek nebo jinak jak jej získá psql?<BR>
- <A href="#4.4">4.4</A>) Jak odstraním sloupec tabulky, jak změním jeho typ?<BR>
- <A href="#4.5">4.5</A>) Jaká je maximální velikost řádku, tabulky a databáze?<BR>
- <A href="#4.6">4.6</A>) Kolik diskového prostoru je potřeba k uložení dat z normálního
- textového souboru?<BR>
- <A href="#4.7">4.7</A>) Jak získám seznam vytvořených tabulek, indexů,
- databází?<BR>
- <A href="#4.8">4.8</A>) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?<BR>
- <A href="#4.9">4.9</A>) Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz?<BR>
- <A href="#4.10">4.10</A>) Co to je R-tree index?<BR>
- <A href="#4.11">4.11</A>) Co je Genetic Query Optimizer?<BR>
- <A href="#4.12">4.12</A>) Jak provést vyhledávání regulárního výrazu case sensitiv,
- insensitiv? Jak použít index pro case insensitive vyhledávání?<BR>
- <A href="#4.13">4.13</A>) Jak v dotazu detekovat, že položka je NULL?<BR>
- <A href="#4.14">4.14</A>) Jaké jsou rozdíly mezi různými znakovými typy?<BR>
- <A href="#4.15.1">4.15.1</A>) Jak vytvořit serial/auto-increment pole?<BR>
- <A href="#4.15.2">4.15.2</A>) Jak získat hodnotu SERIAL po vložení řádku?<BR>
- <A href="#4.15.3">4.15.3</A>) Nepovede currval() a nextval() k rozhození podmínek při souběhu s
- jinými uživateli?<BR>
- <A href="#4.15.4">4.15.4</A>) Proč není vygenerované číslo použito při přerušení transakce?
- Proč vznikají díry v číslování vlastní sekvencí/SERIAL sloupce?<BR>
- <A href="#4.16">4.16</A>) Co to je OID? Co je to TID?<BR>
- <A href="#4.17">4.17</A>) Jaký je význam některých výrazů použitých v PostgreSQL?<BR>
- <A href="#4.18">4.18</A>) Proč jsem získal chybové hlášení "ERROR: Memory exhausted in
- AllocSetAlloc()"?<BR>
- <A href="#4.19">4.19</A>) Jak se dozvím, kterou verzi PostgreSQL používám?<BR>
- <A href="#4.20">4.20</A>) Proč operace s velkými objekty končí "invalid large obj descriptor"?<BR>
- <A href="#4.21">4.21</A>) Jak vytvořit sloupec obsahující implicitně aktuální datum?<BR>
- <A href="#4.22">4.22</A>) Proč jsou moje vnořené dotazy používající IN tak pomalé?<BR>
- <A href="#4.23">4.23</A>) Jak provést vnější spojení (outer join)?<BR>
- <A href="#4.24">4.24</A>) Jak provést dotaz napříč několika databázemi?<BR>
- <A href="#4.25">4.25</A>) Může funkce vrátit více řádků nebo sloupců?<BR>
- <A href="#4.26">4.26</A>) Proč nelze spolehlivě vytvářet a rušit dočasné tabulky
- v PL/pgSQL funkcích?<BR>
- <A href="#4.27">4.27</A>) Jaké jsou možnosti replikace databází?<BR>
- <A href="#4.28">4.28</A>) Jaké jsou možnosti šifrování databází?<BR>
-
- <H2 align="center">Rozšiřování PostgreSQL</H2>
-
- <A href="#5.1">5.1</A>) Napsal jsem UDF funkci, PostgreSQL však končí dump core?<BR>
- <A href="#5.2">5.2</A>) Jak mohu přispět nějakými šikovnými datovými typy a funkcemi do
- PostgreSQL?<BR>
- <A href="#5.3">5.3</A>) Jak napsat funkci v C vracející ntici?<BR>
- <A href="#5.4">5.4</A>) Modifikoval jsem zdrojové soubory. Tato změna nebyla při rekompilaci
- vzata v potaz. Proč?<BR>
-
- <HR>
-
- <H2 align="center">Obecné otázky</H2>
-
- <H4><A name="1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?</H4>
-
- <P>PostgreSQL se vyslovuje <I>Post-Gres-Q-L</I>. Zvukový záznam je
- dostupný na adrese <A href="http://www.postgresql.org/postgresql.mp3"></A>.</P>
-
- <P>PostgreSQL vychází z databáze POSTGRES (a stále je někdy označován
- zjednodušeně jako Postgres) - výzkumného prototypu <SMALL>DBMS</SMALL> 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 <SMALL>SQL</SMALL>. PostgreSQL lze používat bez omezení a jeho
- zdrojové kódy jsou volně k dispozici.</P>
-
- <P>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 (<A href=
- "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>).
- (viz <A href="#1.6">1.6</A> - 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 <A href=
- "http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html">http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</A></P>
-
- <P>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>
-
- <P>Původní název software z Berkley byl Postgres. Po přidání jazyka <SMALL>SQL</SMALL> se
- název změnil na Postgres95. Koncem roku 1996 byl RDBMS přejmenován na
- PostgreSQL.</P>
-
- <H4><A name="1.2">1.2</A>) Jaká je licence na PostgreSQL?</H4>
-
- <P>PostgreSQL je předmětem následujících autorských práv:</P>
-
- <P>Dílčí Copyright (c) 1996-2007, PostgreSQL Global Development Group
- Dílčí Copyright (c) 1994-6, Regents of the University of California</P>
-
- <P>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ů.</P>
-
- <P>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.</P>
-
- <P>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.</P>
-
- <P>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.</P>
-
- <H4><A name="1.3">1.3</A>) Na kterých Unixex lze spustit PostgreSQL?</H4>
-
- <P>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.</P>
-
- <H4><A name="1.4">1.4</A>) Které ne-unixové platformy jsou podporované?</H4>
-
- <P><STRONG>Klient</STRONG></P>
-
- <P>Knihovna <I>libpq</I>, 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 <I>win32.mak</I> a
- Win32 knihovny <I>libpq</I> a <I>psql</I>. K databázi PostgerSQL lze přistupovat skrze
- rozhraní <SMALL>ODBC</SMALL>.</P>
-
- <P><STRONG>Server</STRONG></P>
-
- <P>Server může být na WindowsNT a Win2k provozován pouze s knihovnou
- Cygwin, Cygnus Unix/NT porting library. Více <I>pgsql/doc/FAQ_MSWIN</I> v
- distribuci nebo MS Windows FAQ na adrese
- <A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>.</P>
-
- <P>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
- <A href="http://techdocs.postgresql.org/guides/Windows">http://techdocs.postgresql.org/guides/Windows</A> a
- <A href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">
- http://momjian.postgresql.org/main/writings/pgsql/win32.html</A>.</P>
-
- <P>Existující port pro Novell Netware 6 naleznete na
- <A href="http://forge.novell.com">http://forge.novell.com</A>.</P>
-
- <H4><A name="1.5">1.5</A>) Kde mohu získat PostgreSQL?</H4>
-
- <P>Primárním anonymním ftp serverem pro PostgreSQL je
- <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
- Seznam zrcadel naleznete na našich webových stránkách.</P>
-
- <H4><A name="1.6">1.6</A>) Kde mohu získat podporu?</H4>
-
- <P>Hlavní mailová konference je: <A href="mailto:pgsql-general@PostgreSQL.org">
- pgsql-general@PostgreSQL.org</A>. 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):</P>
-<PRE>
- subscribe
- end
-</PRE>
-<P>na adresu <A href="mailto:pgsql-general-request@PostgreSQL.org">
- pgsql-general-request@PostgreSQL.org</A>.</P>
-
- <P>Můžete si vyžádat denní přehled (diggest), který má zhruba 30K denně
- zpráv.</P>
-
- <P>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 <A href="mailto:pgsql-bugs-request@PostgreSQL.org">
- pgsql-bugs-request@PostgreSQL.org</A>.</P>
-
- <P>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.</P>
-
- <P>Seznam dalších konferencí naleznete na stránkách PostgreSQL:</P>
- <BLOCKQUOTE>
- <P><A href="http://www.postgresql.org">http://www.postgresql.org</A></P>
- </BLOCKQUOTE>
- <H4><A name="1.7">1.7</A>) Jaká je poslední verze?</H4>
-
- <P>Poslední verze PostgreSQL je 7.4.3. Plánujeme uvolnit významnou verzi
- každých šest až osm měsíců.</P>
-
- <H4><A name="1.8">1.8</A>) Jaká je dostupná dokumentace?</H4>
-
- <P>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 <I>/doc</I>. Manuály jsou
- přístupné online na <A href="http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
-
- <P>Na adresách <A href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> a
- <A href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>
- naleznezte dvě online knihy o PostgreSQL. Seznam dostupné literatury je na
- <A href="http://techdocs.PostgreSQL.org/techdocs/bookreviews.php">
- http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>. Soubor
- technických článků s tematikou PostgresQL najdete na <A href=
- "http://techdocs.PostgreSQL.org/">http://techdocs.PostgreSQL.org/</A>.</P>
-
- <P><I>psql</I> má užitečný metapříkaz \d sloužící k zobrazení informací o typech,
- operátorech, funkcí, agregačních funkcí atd.</P>
-
- <P>Více dokumentace naleznete na našich webových stránkách.</P>
-
- <H4><A name="1.9">1.9</A>) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?</H4>
-
- <P>PostgreSQL podporuje rozšířenou podmnožinu <SMALL>SQL-92</SMALL>. V našem
- <A href="http://www.postgresql.org/docs/faqs.TODO.html">TODO</A>
- 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).</P>
-
- <H4><A name="1.10">1.10</A>) Jak se mohu naučit SQL?</H4>
-
- <P>V knize The PostgreSQL book na <A href=
- "http://www.PostgreSQL.org/docs/awbook.html">
- http://www.PostgreSQL.org/docs/awbook.html</A> je vysvětlen jazyk SQL (vyšla
- česky). Další dostupnou knihou je <A href=
- "http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</A>.
- Kvalitní návody naleznete na <A href=
- "http://www.intermedia.net/support/sql/sqltut.shtm">
- http://www.intermedia.net/support/sql/sqltut.shtm</A>, a na
- <A href="http://sqlcourse.com">http://sqlcourse.com</A>.</P>
-
- <P>Další je Teach Yourself SQL in 21 days, Second Edition na <A href=
- "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A>.</P>
-
- <P>Mnoho uživatelů doporučuje <I>The Practical SQL Handbook</I>, Bowman, Judith
- S., et al., Addison-Wesley. Jiní preferují <I>The Complete Reference SQL</I>,
- Groff et al., McGraw-Hill.</P>
-
- <H4><A name="1.11">1.11</A>) Nemá PostgreSQL problémy s rokem 2000?</H4>
-
- <P>Nemá, můžeme pracovat s datumy po roce 2000 našeho letopočtu i před
- rokem 2000 př.n.l.</P>
-
- <H4><A name="1.12">1.12</A>) Jak se připojit k vývojářskému týmu?</H4>
-
- <P>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í <I>pgsql-hackers</I> a <I>pgsql-patches</I>. Kvalitní záplaty posílejte do
- pgsql-patches.</P>
-
- <P>Právo commit má v <SMALL>CVS</SMALL> 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.</P>
-
- <H4><A name="1.13">1.13</A>) Kam podat report o chybě?</H4>
-
- <P>Navštivte naši PostgreSQL BugTool stránku na <A href=
- "http://www.PostgreSQL.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</A>,
- která obsahuje návod a směrnice jak podat chybový report.</P>
-
- <P>Ověřte si na našem ftp serveru <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>,
- zda-li máte nejnovější verzi PostgreSQL a zda-li k ní neexistují nějaké záplaty.</P>
-
- <H4><A name="1.14">1.14</A>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?</H4>
-
- <P>Existuje několik hledisek jak porovnávat software: vlastnosti, výkon,
- spolehlivost, podpora a cena.</P>
- <DL>
- <DT><B>Vlastnosti</B></DT>
- <DD>PostgreSQL má hodně společných vlastností s velkými komerčními
- <SMALL>DBMS</SMALL>, 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í.<BR><BR></DD>
-
- <DT><B>Výkon</B></DT>
- <DD>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 <I>vlastnosti</I>. 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 <A href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A>.
- Za vývojem MySQL není Open Source komunita, ale komerční společnost,
- přestože svoje produkty distribuuje jako Open Source.<BR><BR></DD>
-
- <DT><B>Spolehlivost</B></DT>
- <DD>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.<BR><BR></DD>
-
- <DT><B>Podpora</B></DT>
- <DD>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 <SMALL>DBMS</SMALL> 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 (<A href="#1.6">FAQ sekce 1.6</A>).<BR><BR></DD>
-
- <DT><B>Cena</B></DT>
- <DD>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).<BR>
- <BR></DD>
- </DL>
-
- <H4><A name="1.15">1.15</A>) Jak lze finančně pomoci PostgreSQL?</H4>
-
- <P>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.</P>
-
- <P>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.</P>
-
- <P>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 <A href=
- "http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> a darujte je.</P>
-
- <P>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.</P>
- <HR>
-
- <P>Pokud máte příklad úspěšného nasazení PostgreSQL, přihlaště se na náš
- advocacy site na <A href="http://advocacy.postgresql.org">http://advocacy.postgresql.org</A>.</P>
-
- <H2 align="center">User client dotazy</H2>
-
- <H4><A name="2.1">2.1</A>) Kde naleznu <SMALL>ODBC</SMALL> ovladače pro PostgreSQL?</H4>
-
- <P>Pro PostgreSQL existují dva <SMALL>ODBC</SMALL> ovladače - PsqlODBC a OpenLink ODBC.</P>
-
- <P>PsqlODBC je ke stažení na <A href=
- "http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">
- http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>.</P>
-
- <P>OpenLink můžete získat na <A href="http://www.openlinksw.com">http://www.openlinksw.com</A>.
- Spolupracuje s jejich klientským programovým vybavením a je dostupný pro všechny jimi
- podporované platformy (Win, Mac, Unix, VMS).</P>
-
- <P>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 <A href=
- "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
-
- <H4><A name="2.2">2.2</A>) Jaké nástroje lze použít pro PostgreSQL a web?</H4>
-
- <P>Pěkný úvod do databázových technologií zabezpečujících chod webových
- stránek najdete na <A href="http://www.webreview.com">http://www.webreview.com</A>.</P>
-
- <P>Pro tvorbu webu existuje excelentní rozhraní PHP, které naleznete na
- <A href="http://www.php.net">http://www.php.net</A>.</P>
-
- <P>Pro složitější případy se často používá Perl a CGI.pm nebo mod_perl.</P>
-
- <H4><A name="2.3">2.3</A>) Existuje grafické rozhraní pro PostgreSQL?</H4>
-
- <P>Pro PostgreSQL existuje několik grafických rozhraní: PgAccess
- (<A href="http://www.php.net">http://www.php.net</A>), PgAdmin III
- (<A href="http://www.php.net">http://www.php.net</A>), RHDB Admin
- (<A href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</A>) a Rekall (
- <A href="http://www.thekompany.com/products/rekall/">http://www.thekompany.com/products/rekall/</A>).
- Dále ještě PhpPgAdmin
- (<A href="http://phppgadmin.sourceforge.net/">http://phppgadmin.sourceforge.net/</A>) což je rozhraní PostgreSQL
- založené na web technologii.</P>
-
- <P>Úplnější seznam najdete na <A href=
- "http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>.</P>
-
- <H4><A name="2.4">2.4</A>) Které programovací jazyky mají podporu pro PostgreSQL?</H4>
-
- <P>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.</P>
-
- <P>Distribuce PostgreSQL obsahuje tato rozhraní:</P>
- <UL>
- <LI>C (libpq)</LI>
- <LI>Embbedded C (ecpg)</LI>
- <LI>Java (jdbc)</LI>
- <LI>Python (PyGreSQL)</LI>
- <LI>TCL (libpgtcl)</LI>
- </UL>
- <P>Další rozhraní jsou dostupná na <A href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
- v sekci <I>Drivers/Interfaces</I>.</P>
- <HR>
-
- <H2 align="center">Administrativní dotazy</H2>
-
- <H4><A name="3.1">3.1</A>) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?</H4>
-
- <P>Použijte volbu <I>--prefix</I> při spuštění configure.</P>
-
- <H4><A name="3.2">3.2</A>) Při startu postmaster, dostanu chybové hlášení Bad System Call
- nebo core dump. Proč?</H4>
-
- <P>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ů.</P>
-
- <H4><A name="3.3">3.3</A>) Při startu postmastera dostanu hlášení o chybě IpcMemoryCreate. Proč?</H4>
-
- <P>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.</P>
-
- <H4><A name="3.4">3.4</A>) Při startu postmastera dostanu hlášení o chybě IpcSemaphoreCreate.
- Proč?</H4>
-
- <P>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 <I>postmaster</I> s limitem backendů. Použijte přepínač <I>-N</I> s
- hodnotou menší než 32. Úplným řešením je zvýšení hodnot <SMALL>SEMMNS</SMALL>
- a <SMALL>SEMMNI</SMALL> jadra.</P>
-
- <P>Nefunkční semafory mohou způsobit pád během intenzivních databázových
- operací.</P>
-
- <P>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.</P>
-
- <H4><A name="3.5">3.5</A>) Jak povolit nebo zakázat přístup z jiných stanic?</H4>
-
- <P>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 <B>a</B> určením
- způsobu autentifikace v <I>$PGDATA/pg_hba.conf</I>.</P>
-
- <H4><A name="3.6">3.6</A>) Jak ladit databázový stroj na lepší výkon?</H4>
-
- <P>Určitě pomohou indexy. Příkaz <SMALL>EXPLAIN ANALYZE</SMALL> Vám umožní sledovat
- jak PostgreSQL interpretuje Váš dotaz a které indexy používá.</P>
-
- <P>Při větší dávce INSERTů uvažujte o náhradě příkazem <SMALL>COPY</SMALL>. Ten je mnohem
- rychlejší nežli samotný <SMALL>INSERT</SMALL>. Každý příkaz mimo blok <SMALL>BEGIN WORK/COMMIT</SMALL>
- 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.</P>
-
- <P>Máte několik dalších možností, jak zlepšit výkon. Můžete zakázat <I>fsyn()</I>
- při startu postmastera přepínači <I>-o -F</I>. Tyto přepínače zabrání <I>fsync()</I>,
- tj. zápisu na disk po každé transakci.</P>
-
- <P>Můžete zvýšit velikost paměťových bufferů použitých backendy tj.
- parametr <I>-B</I> 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ů.</P>
-
- <P>Dále můžete použít přepínač <I>-S</I> 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.</P>
-
- <P>Můžete použít příkaz <SMALL>CLUSTER</SMALL>, který uspořádá fyzicky data v tabulkách
- podle indexu. Více na manuálových stránkách příkazu <SMALL>CLUSTER</SMALL>.</P>
-
- <H4><A name="3.7">3.7</A>) Jaké jsou možnosti ladění?</H4>
-
- <P>Máte několik možností jak se dostat k užitečným stavovým informacím.</P>
-
- <P>Zaprvé, při překladu použijte přepínač <I>--enable-cassert</I>, tím se zapne
- monitorování a následné zastavení aplikace, když se proces v backendu
- dostane do neočekávaného stavu.</P>
-
- <P>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:</P>
-<PRE>
- cd /usr/local/pgsql
- ./bin/postmaster > server.log 2>&amp;1 &amp;
-</PRE>
- <P>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č <I>-d</I> 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.</P>
-
- <P>Pokud neběží postmaster, můžete spustit backend PostgreSQL z příkazové
- řádky a napsat svůj <SMALL>SQL</SMALL> dotaz přímo v backendu (doporučeno <B>pouze</B> 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.</P>
-
- <P>Pokud běží <I>postmaster</I>, spusťe <I>psql</I> v jednom okně a pak si zjistěte <SMALL>PID</SMALL>
- procesu postgres použitého psql. V debuggeru sepřipojte k postgresql
- <SMALL>PID</SMALL>. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql. Pokud
- ladíte startup postgresu, pak nastavte PGOPTIONS="-W n" a spusťe <I>psql</I>.
- 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.</P>
-
- <P>Pro ladění a měření výkonu mohou být užitečné přepínače <I>-s, -A</I> a <I>-t</I>
- programu postgres (backend).</P>
-
- <P>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 <I>pgsql/data/base/dbname</I>. Profil klienta pak v jeho aktuálním
- adresáři. Korektní profilace v prostředí Linux požaduje konfiguraci
- systému s parametrem <I>-DLINUX_PROFILE</I>.</P>
-
- <H4><A name="3.8">3.8</A>) Proč dostanu "Sorry, too many clients", když se zkouším připojit?</H4>
-
- <P>Zvyšte limit postmastera na maximální počet současně spuštěných
- backendů.</P>
-
- <P>Výchozí hodnota je 32 backendů. Tuto hodnotu zvýšíte zastavením a
- opětovným spuštěním postmastera s parametrem <I>-N</I> nebo úpravou
- <I>postgresql.conf</I>.</P>
-
- <P>Při zvýšení hodnoty <I>-N</I> nad 32 musíte zvýšit hodnotu <I>-B</I> nad výchozí 64,
- <I>-B</I> 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
- <SMALL>SHMMAX</SMALL>, maximální počet semafórů <SMALL>SEMMNS</SMALL> a <SMALL>SEMMNI</SMALL>, maximální počet
- procesů <SMALL>NPROC</SMALL>, maximální počet procesů uživatele <SMALL>MAXUPRC</SMALL> a maximální
- počet otevřených souborů <SMALL>NFILE</SMALL> a <SMALL>NINODE</SMALL>. 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.</P>
-
- <H4><A name="3.9">3.9</A>) K čemu slouží adresář pgsql_tmp?</H4>
-
- <P>Tento adresář obsahuje dočasné soubory vytvořené exekutorem dotazů.
- Například, když je nutné třídění k zajištění <SMALL>ORDER BY</SMALL> a třídění má větší
- nároky na prostor než povoluje parametr <I>-S</I> backendu, pak je vytvořen
- dočasný soubor k uložení extra údajů.</P>
-
- <P>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ářů.</P>
-
- <H4><A name="3.10">3.10</A>) Proč je požadováno dump a obnovení (load) databáze během
- upgrade mezi velkými verzemi PostgreSQL?</H4>
-
- <P>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.</P>
-
- <HR>
-
- <H2 align="center">Provozní dotazy</H2>
-
- <H4><A name="4.1">4.1</A>) Čím se liší binární a normální kurzor?</H4>
-
- <P>Popis najdete v manuálové stránce <SMALL>DECLARE</SMALL></P>
-
- <H4><A name="4.2">4.2</A>) Jak získat pouze první řádek dotazu? Náhodný řádek?</H4>
-
- <P>Podívejte se do man. stránky příkazu <SMALL>FETCH</SMALL>, nebo použijte <SMALL>SELECT</SMALL> ...
- <SMALL>LIMIT</SMALL> ...</P>
-
- <P>I když potřebujete získat pouze prvních několik řádků, je třeba
- zpracovat všechna data, např. pokud dotaz má <SMALL>ORDER BY</SMALL>. Pokud však
- existuje index, který odpovídá <SMALL>ORDER BY</SMALL>, PostgreSQL může získat
- pouze prvních n řádků a ukončit zpracování dotazu.</P>
-
- <P>K získání náhodného řádku použijte:</P>
-<PRE>
- SELECT col
- FROM tab
- ORDER BY random()
- LIMIT 1;
-</PRE>
- <H4><A name="4.3">4.3</A>) Jak získám seznam tabulek nebo jinak jak jej získá psql?</H4>
-
- <P>Příkaz \dt v psql zobrazí seznam tabulek. Úplný seznam příkazů <I>psql</I>
- dostanete příkazem \?. Také se můžete podívat do zdrojových kódů <I>psql</I>
- do souboru <I>pgsql/src/bin/psql/describe.c</I>. Ten obsahuje <SMALL>SQL</SMALL> příkazy,
- které se používají v psql metapříkazech. Dále můžete spustit <I>psql</I>
- s přepínačem <I>-E</I>, 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.</P>
-
- <H4><A name="4.4">4.4</A>) Jak odstraním sloupec tabulky, jak změním jeho typ?</H4>
-
- <P>Počínaje verzí 7.3 můžete použít příkaz <SMALL>ALTER TABLE DROP COLUMN</SMALL>. Ve
- starších verzích můžete použít následující postup:</P>
-<PRE>
- 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;
-</PRE>
- <P>Pro změnu typu sloupce je třeba provést:</P>
-<PRE>
- 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;
-</PRE>
- Poté proveďte <I>VACUUM FULL tab</I> - uvolníte tím diskový prostor zabraný
- nyní již neplatnými řádky.
-
- <H4><A name="4.5">4.5</A>) Jaká je maximální velikost řádku, tabulky a databáze?</H4>
-
- <P>PostgreSQL má tato omezení:</P>
-<PRE>
- 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
-</PRE>
- <P>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.</P>
-
- <P>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é.</P>
-
- <P>Maximální velikost tabulky a maximální počet sloupců můžeme
- zečtyřnásobit nastavením velikosti bloku na 32K.</P>
-
- <H4><A name="4.6">4.6</A>) Kolik diskového prostoru je potřeba k uložení dat z </H4>
- normálního textového souboru?
-
- <P>PostgreSQL vyžaduje až pětinásobek diskového prostoru k uložení dat z
- textového souboru.</P>
-
- <P>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.</P>
-<PRE>
- 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
+<html>
+<head>
+<title>PostgreSQL FAQ</title>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta http-equiv="Content-language" content="cs">
+<meta name="description" lang="en" content="Czech translation of FAQ for PostgreSQL">
+<meta name="description" lang="cs" content="Český překlad FAQ PostgreSQL">
+</head>
+<body bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000" alink="#0000ff">
+<h1>Frequently Asked Questions</h1>
+<p><i>Často kladené dotazy (FAQ) PostgreSQL</i>
+</p>
+<p>Poslední aktualizace: 29. října 2007 (aktualizováno pro PostgreSQL 8.3)
+</p>
+<p>Současný správce: Bruce Momjian (bruce@momjian.us)
+</p>
+<p>Přeložil: Pavel Stěhule (pavel.stehule@gmail.com)
+</p>
+<p>Nejaktuálnější verzi tohoto dokumentu naleznete na adrese
+<a href="http://www.postgresql.org/files/documentation/faqs/FAQ.html" title="http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html</a>
+</p>
+<p>Odpovědi na otázky vázané na konkrétní platformy naleznete na
+adrese <a href="http://www.postgresql.org/docs/faq/" title="http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/</a>.
+</p>
+<hr>
+<h2 align="center">ObecnĂŠ otĂĄzky</h2>
+<a href="#item1.1">1.1</a>) Co je to PostgreSQL? Jakå je språvnå výslovnost slova PostgreSQL?<br>
+<a href="#item1.2">1.2</a>) Kdo řídí vývoj PostgreSQL?<br>
+<a href="#item1.3">1.3</a>) Pod jakou licencĂ­ je PostgreSQL?<br>
+<a href="#item1.4">1.4</a>) Na kterých platformåch lze provozovat PostgreSQL?<br>
+<a href="#item1.5">1.5</a>) Kde mohu zĂ­skat PostgreSQL?<br>
+<a href="#item1.6">1.6</a>) JakĂĄ je poslednĂ­ verze?<br>
+<a href="#item1.7">1.7</a>) Kde mohu zĂ­skat podporu?<br>
+<a href="#item1.8">1.8</a>) Jak a kam hlĂĄsit chyby?<br>
+<a href="#item1.9">1.9</a>) Kde najdu informace o znåmých chybåch nebo nepodporovaných vlastnostech?<br>
+<a href="#item1.10">1.10</a>) JakĂĄ je dostupnĂĄ dokumentace?<br>
+<a href="#item1.11">1.11</a>) Jak se mohu naučit SQL?<br>
+<a href="#item1.12">1.12</a>) Jak se mohu připojit k týmu vývojářů?<br>
+<a href="#item1.13">1.13</a>) Jak je na tom PostgreSQL v porovnåní s jinými databåzemi?<br>
+<a href="#item1.14">1.14</a>) Je PostgreSQL připraven na aktuální zavádění letního času v některých zemích?<br>
+<h2 align="center">Dotazy na klientskĂĄ rozhranĂ­</h2>
+<a href="#item2.1">2.1</a>) KterĂĄ rozhranĂ­ jsou pouĹžitelnĂĄ pro PostgreSQL?<br>
+<a href="#item2.2">2.2</a>) JakÊ nåstroje lze pouŞít pro PostgreSQL a web?<br>
+<a href="#item2.3">2.3</a>) Existuje grafickĂŠ rozhranĂ­ pro PostgreSQL?<br>
+<h2 align="center">AdministrativnĂ­ dotazy</h2>
+<a href="#item3.1">3.1</a>) Jak nainstalovat PostgreSQL jinam neĹž do /usr/local/pgsql?<br>
+<a href="#item3.2">3.2</a>) Jak nastavit pravidla pro přístup z jiných stanic?<br>
+<a href="#item3.3">3.3</a>) Jak vyladit databåzi na vyťťí výkon?<br>
+<a href="#item3.4">3.4</a>) Jaké mám ladící prostředky?<br>
+<a href="#item3.5">3.5</a>) Co znamená "Sorry, too many clients", když se zkouším připojit?<br>
+<a href="#item3.6">3.6</a>) Proč je nutný dump a obnovení (load) databáze při upgradu PostgreSQL?<br>
+<a href="#item3.7">3.7</a>) Jaký hardware bych měl používat?<br>
+<h2 align="center">ProvoznĂ­ dotazy</h2>
+<a href="#item4.1">4.1</a>) Jak získat pouze první řádek dotazu? Náhodný řádek?<br>
+<a href="#item4.2">4.2</a>) Jak získám seznam tabulek, indexů, databází, a definovaných uživatelů. Mohu vidět dotazy, které používá psql pro zobrazení těchto informací?<br>
+<a href="#item4.3">4.3</a>) Jak změnit datový typ sloupce?<br>
+<a href="#item4.4">4.4</a>) Jaká je maximální velikost řádku, tabulky a databáze?<br>
+<a href="#item4.5">4.5</a>) Kolik diskového prostoru je potřeba k uložení dat z normálního textového souboru?<br>
+<a href="#item4.6">4.6</a>) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?<br>
+<a href="#item4.7">4.7</a>) Jak zjistĂ­m, jak se vyhodnocuje mĹŻj dotaz?<br>
+<a href="#item4.8">4.8</a>) Jak pouŞít case-(in)sensitive regulårní výraz? Jak pouŞít index pro case insensitive hledåní?<br>
+<a href="#item4.9">4.9</a>) Jak v dotazu detekovat, že položka je NULL? Jak bezpečně spojit dva řetězce, pokud mohou obsahovat NULL? Lze třídit podle toho, jestli je položka NULL nebo ne?<br>
+<a href="#item4.10">4.10</a>) JakÊ jsou rozdíly mezi různými znakovými typy?<br>
+<a href="#item4.11.1">4.11.1</a>) Jak vytvořit serial/auto-increment položku?<br>
+<a href="#item4.11.2">4.11.2</a>) Jak získat hodnotu SERIAL po vložení řádku?<br>
+<a href="#item4.11.3">4.11.3</a>) Nezpůsobí currval() a nextval() problémy ve více uživatelském prostředí?<br>
+<a href="#item4.11.4">4.11.4</a>) Proč není vygenerované číslo použito při přerušení transakce?Proč vznikají díry v číslování prostřednictvím sekvence nebo typu SERIAL?<br>
+<a href="#item4.12">4.12</a>) Co to je OID? Co je to CTID?<br>
+<a href="#item4.13">4.13</a>) Co znamenĂĄ chybovĂŠ hlĂĄĹĄenĂ­ "ERROR: Memory exhausted in AllocSetAlloc()"?<br>
+<a href="#item4.14">4.14</a>) Jak zjistím, kterou verzi PostgreSQL pouŞívåm?<br>
+<a href="#item4.15">4.15</a>) Jak vytvořit sloupec, který bude implicitně obsahovat aktuální čas?<br>
+<a href="#item4.16">4.16</a>) Jak provést vnější spojení (outer join)?<br>
+<a href="#item4.17">4.17</a>) Jak provést dotaz napříč několika databázemi?<br>
+<a href="#item4.18">4.18</a>) Může funkce vrátit více řádků nebo sloupců?<br>
+<a href="#item4.19">4.19</a>) Co je příčinou chyby "relation with OID xxxxx does not exist"?<br>
+<a href="#item4.20">4.20</a>) JakĂŠ jsou moĹžnosti replikace databĂĄzĂ­?<br>
+<a href="#item4.21">4.21</a>) Proč v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proč jsou velká písmena v názvech automaticky převedena na malá písmena?<br>
+<hr>
+<h2 align="center">ObecnĂŠ otĂĄzky</h2>
+<h3><a name="item1.1">1.1</a>) Co je to PostgreSQL? Jakå je språvnå výslovnost slova PostgreSQL?</h3>
+<p>Výslovnost PostgreSQL je <i>Post-Gres-Q-L</i>
+, nebo zjednodušeně <i>Postgres</i>
+. V řadě jazyků je slovo PostgreSQL obtížně vyslovitelný, proto se v hovoru často používá zjednodušená forma názvu. Pro ty, kteří by si rádi poslechli výslovnost, je k dispozici audiozáznam v <a href="http://www.postgresql.org/files/postgresql.mp3" title="http://www.postgresql.org/files/postgresql.mp3">MP3 formátu</a>.
+</p>
+<p>PostgreSQL je relační databáze s některými objektovými rysy, která má možnosti tradičních
+komerčních databázových systémů s několika rozšířeními, které lze najít v DBMS
+systémech příští generace. Používání PostgreSQL není omezené a veškeré zdrojové kódy jsou
+volně dostupné.
+</p>
+<p>Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojářů navzájem komunikujících
+prostřednictvím internetu. Tento projekt není řízen žádnou obchodní organizací. Pokud se chcete
+přidat k projektu, přečtěte si vývojářské FAQ na adrese <a href="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html" title="http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html</a> .
+</p>
+<h3><a name="item1.2">1.2</a>) Kdo řídí vývoj PostgreSQL?</h3>
+<p>Pokud budete hledat organizaci řídící vývoj PostgreSQL, budete zklamáni. Nic takového
+neexistuje. Existují pouze "core" a CVS skupiny uŞivatelů, ale ty existují více z administråtorských
+důvodů než z organizačních. Projekt je směrován komunitou vývojářů a uživatelů, ke které se
+kdokoliv může připojit. Jediné co potřebuje, je přihlásit se do elektronické konference. Více ve
+<a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html" title="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">vývojářském FAQ</a>.
+</p>
+<h3><a name="item1.3">1.3</a>) Pod jakou licencĂ­ je PostgreSQL?</h3>
+<p>PostgreSQL je předmětem následujících autorských práv:
+</p>
+<p>Dílčí Copyright (c) 1996-2005, PostgreSQL Global Development Group<br>
+Dílčí Copyright (c) 1994-6, Regents of the University of California
+</p>
+<p>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ĹŻ.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<p>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.
+</p>
+<h3><a name="item1.4">1.4</a>) Na kterých platformåch lze provozovat PostgreSQL?</h3>
+<p>Stručně řečeno, PostgreSQL běží na všech moderních unixových systémech. Seznam těch, u kterých proběhlo testování, naleznete v instalačních instrukcích.
+</p>
+<p>PostreSQL také běží nativně na všech Microsof Windows systémech odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP a Windows2003. Instalační balíček naleznete na adrese <a href="http://pgfoundry.org/projects/pginstaller" title="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>. Na starších systémech s ještě MS-DOS jádrem lze spustit PostgreSQL s emulačním programem Cygwin.
+</p>
+<p>DĂĄle existuje port pro Novell Netware 6 port na adrese <a href="http://forge.novell.com" title="http://forge.novell.com">http://forge.novell.com</a>, a pro OS/2 verze (eComStation) na adrese <a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F" title="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a> .
+</p>
+<h3><a name="item1.5">1.5</a>) Kde mohu zĂ­skat PostgreSQL?</h3>
+<p>PomocĂ­ webovĂŠho klienta z adresy <a href="http://www.postgresql.org/ftp/" title="http://www.postgresql.org/ftp/">http://www.postgresql.org/ftp/</a> nebo klienta ftp z adresy <a href="ftp://ftp.postgresql.org/pub/" title="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a>.
+</p>
+<h3><a name="item1.6">1.6</a>) JakĂĄ je poslednĂ­ verze?</h3>
+<p>Nejnovější verzí PostgreSQL je verze 8.2.5
+</p>
+<p>V plánu je uvolňovat každoročně jednu velkou verzi a každých několik měsíců malé verze.
+</p>
+<h3><a name="item1.7">1.7</a>) Kde mohu zĂ­skat podporu?</h3>
+<p>Nejčastější forma podpory uživatelům PostgreSQL komunitou je prostřednictvím e-mailů. Na našem webovém serveru naleznete <a href="http://www.postgresql.org/community/lists/" title="http://www.postgresql.org/community/lists/">odkaz</a> na stránky,kde se můžete přihlásit do elektronické konference. Pro začátek jsou doporučené konference general nebo bugs.
+</p>
+<p>Další cestou je IRC kanál #postgresql na Freenode (irc.freenode.net). K připojení použijte Unixový příkaz irc -x '#postgresql' "$USER" irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti existuje ještě španělská (#postgresql-es) a francouzská (#postgresqlfr) verze. Další PostgreSQL kanál naleznete na EFNet.
+</p>
+<p>Seznam společností poskytující komerční podporu naleznete na adrese <a href="http://techdocs.postgresql.org/companies.php" title="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</a>.
+</p>
+<h3><a name="item1.8">1.8</a>) Jak a kam hlĂĄsit chyby?</h3>
+<p>Vyplňte formulář na adrese <a href="http://www.postgresql.org/support/submitbug" title="http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug</a>. Na našem ftp serveru <a href="ftp://ftp.postgresql.org/pub/" title="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a> si ověřte, že používáte aktuální verzi PostreSQL.
+</p>
+<p>Chyby reportované prostřednictvím chybového formuláře nebo zasláním mailu do PostgreSQL konference obvykle generuje následující odezvu:
+</p>
+<ul><li> Nejedná se o chybu, a proč
+</li>
+<li> JednĂĄ se o znĂĄmou chybu, kterĂĄ je jiĹž v seznamu ĂşkolĹŻ <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>
+</li>
+<li> Tato chyba byla opravena v aktuĂĄlnĂ­ verzi
+</li>
+<li> Tato chyba byla již opravena ve verzi, která zatím nebyla oficiálně uvolněna
+</li>
+<li> PoŞadavek na dalťí doplňující informace:
+<ul><li> Operační systém
+</li>
+<li> Verze PostgreSQL
+</li>
+<li> Test reprodukujĂ­cĂ­ chybu
+</li>
+<li> LadĂ­cĂ­ informace
+</li>
+<li> Backtrace výstup debuggeru
+</li>
+</ul>
+</li>
+<li> Jedná se o zatím nezjištěnou chybu, pak můžete čekat
+<ul><li> Zåplatu odstraňující chybu, kterå bude vloŞena do dalťí velkÊ nebo malÊ verze
+</li>
+<li> Informaci, že se jedná o chybu, kterou nelze okamžitě řešit a je proto přidána do <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>
+</li>
+</ul>
+</li>
+</ul>
+<h3><a name="item1.9">1.9</a>) Kde najdu informace o znåmých chybåch nebo nepodporovaných vlastnostech?</h3>
+<p>PostgreSQL podporuje rozšířenou podmnožinu SQL:2003. V našem <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a> naleznete seznam známých chyb, chybějících vlastností, a plány do budoucna.
+</p>
+<p>Odezva na poĹžadavek na novou vlastnost PostgreSQL je obvykle:
+</p>
+<ul><li> PoĹžadavek je jiĹž v <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>
+</li>
+<li> Požadovaná funkce není chtěná protože
+<ul><li> Duplikuje jiĹž existujĂ­cĂ­ funkci, kterĂĄ respektuje SQL standard
+</li>
+<li> Implementací funkce by se příliš zkomplikoval kód bez relevantního přínosu
+</li>
+<li> Funkce by mohla být nebezpečná nebo nespolehlivá
+</li>
+</ul>
+</li>
+<li> Požadavek je přidán do <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>
+</li>
+</ul>
+<p>PostgreSQL nepožívá systém pro sledování chyb, protože jsme zjistili, že je efektivnější přímo reagovat na maily a udržovat aktuální <a href="http://www.postgresql.org/docs/faqs.TODO.html" title="http://www.postgresql.org/docs/faqs.TODO.html">TODO</a>. V praxi je snaha o co nejrychlejší řešení chyb, a chyby, které by se mohly projevit u mnoha uživatelů jsou opravovány velice rychle. Jediné místo, kde lze dohledat všechny změny, rozšíření a opravy v PostgreSQL je CVS log. Poznámky k verzi "Release notes" nezachycují všechny změny, k němž došlo.
+</p>
+<h3><a name="item1.10">1.10</a>) JakĂĄ je dostupnĂĄ dokumentace?</h3>
+<p>PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál, manuálové stránky a testovací příklady. Podívejte se do adresáře /doc. Manuál je přístupný online na <a href="http://www.postgresql.org/docs" title="http://www.postgresql.org/docs">http://www.postgresql.org/docs</a>.
+</p>
+<p>K dispozici jsou zdarma dvě online knihy na adresách <a href="http://www.postgresql.org/docs/books/awbook.html" title="http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html</a> a <a href="http://www.commandprompt.com/ppbook/" title="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a>. Další literaturu lze zakoupit. Nejpopulárnější je od Kerryho Douglase. Seznam dostupné literatury je na <a href="http://techdocs.postgresql.org/techdocs/bookreviews.php" title="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php</a>. Ještě je kolekce technicky orientovaných článků tematicky spojených s PostgreSQL na adrese <a href="http://techdocs.postgresql.org/" title="http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</a>.
+</p>
+<p>Řádkový klient psql má \d příkazy pro zobrazení informací o typech, operátorech, funkcích, agregačních funkcí, atd. Použijte \? pro zobrazení dostupných příkazů.
+</p>
+<p>DalĹĄĂ­ dokumentaci najdete na naĹĄem webu.
+</p>
+<h3><a name="item1.11">1.11</a>) Jak se mohu naučit SQL?</h3>
+<p>Podívejte se do výše uvedené dokumentace. Další online knihou je "Teach Yourself SQL in 21 Days, Second Edition" na adrese <a href="http://members.tripod.com/er4ebus/sql/index.htm" title="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>. Mnoho našich uživatelů doporučuje knihu The Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. Další The Complete Reference SQL, Groff et al., McGraw-Hill.
+</p>
+<p>DalĹĄĂ­ online tutoriĂĄly jsou dostupnĂŠ na adresĂĄch:
+</p>
+<ul><li> <a href="http://www.intermedia.net/support/sql/sqltut.shtm" title="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a>
+</li>
+<li> <a href="http://sqlcourse.com" title="http://sqlcourse.com">http://sqlcourse.com</a>
+</li>
+<li> <a href="http://www.w3schools.com/sql/default.asp" title="http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp</a>
+</li>
+<li> <a href="http://mysite.verizon.net/Graeme_Birchall/id1.html" title="http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html</a>
+</li>
+</ul>
+<h3><a name="item1.12">1.12</a>) Jak se mohu připojit k týmu vývojářů?</h3>
+<p>Prostudujte si <a href="http://www.postgresql.org/docs/faqs.FAQ_DEV.html" title="http://www.postgresql.org/docs/faqs.FAQ_DEV.html">Developer's FAQ</a>.
+</p>
+<h3><a name="item1.13">1.13</a>) Jak je na tom PostgreSQL v porovnåní s jinými databåzemi?</h3>
+<p>Software můžeme porovnávat z několika různých pohledů: vlastnosti, výkon, spolehlivost, podpora a cena.
+</p>
+<script></script>
+<h4> Vlastnosti </h4>
+<p>PostgreSQL nabízí většinu funkcí funkcionality velkých komerčních DBMS systémů jako jsou: transakce, vnořené dotazy, spouště, referenční integrita a sofistikovaný systém zamykání. Poskytujeme určité funkce, které ostatní systémy běžně nepodporují. Např. uživatelem definované typy, dědičnost, pravidla (rules), a MVCC architekturu.
+</p>
+<h4> Výkon </h4>
+<p>Výkon PostgreSQL je srovnatelný s ostatními komerčními nebo Open Source databázemi. V některých případech je rychlejší, jindy pomalejší. Náš výkon je obvykle +/-10% vůči ostatním databázím.
+</p>
+<h4> Spolehlivost </h4>
+<p>Uvědomujeme si, že databáze musí být stoprocentně spolehlivá, jinak je nepoužitelná. Snažíme se, aby každá verze byla dobře otestována a obsahovala minimum chyb. Každá verze je minimálně několik měsíců v beta testovacím režimu. Do produkčního režimu se dostane, až když nedochází k dalším změnám nebo opravám. Věříme, že jsem více než srovnatelní s ostatními databázemi v této oblasti.
+</p>
+<h4> Podpora </h4>
+<p>Na našich internetových konferencích se setkává velká skupina vývojářů a uživatelů při řešení vyskytujících se problémů.
+Naše internetové konference umožňují kontakt velké skupiny vývojářů a uživatelů. Nemůžeme garantovat opravu chyby, ale komerční DBMSs také vždy negarantují řešení problémů. Věříme ale, že díky přímému kontaktu na vývojáře, naši uživatelskou komunitu, manuálům, a dostupným zdrojovým kódům máme lepší podporu než ostatní DBMSs. Pro ty, kteří preferují komerční "per-incident" podporu, existuje společností, kteří ji nabízejí (FAQ sekce 1.7.)
+</p>
+<h4> Cena </h4>
+<p>PostgreSQL lze používat bezplatně (a to i pro komerční použití). Také můžete neomezeně používat náš kód ve svých produktech s výjimkami specifikovanými v naší licenci (přebíráme BSD licenci).
+</p>
+<h3><a name="item1.14">1.14</a>) Je PostgreSQL připraven na aktuální zavádění letního času v některých zemích?</h3>
+<p>Počínaje verzí 8.0.[4+] podporuje PostgreSQL letní čas také pro USA. Podpora letního času (daylight saving time) pro Kanadu a Západní Austrálii je obsažena ve verzích 8.0.[10+] a 8.1.[6+] a všech následujících verzích. Starší verze používaly systémovou databázi časových zón obsahující, kromě jiného, informaci o tom, zda se pro danou časovou zónu rozlišuje mezi letním a zimním časem.
+</p>
+<hr>
+<h2 align="center">Dotazy na klientskĂĄ rozhranĂ­</h2>
+<h3><a name="item2.1">2.1</a>) KterĂĄ rozhranĂ­ jsou pouĹžitelnĂĄ pro PostgreSQL?</h3>
+<p>PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C. Všechna další rozhraní představují nezávislé projekty, které je třeba stáhnout z internetu samostatně. Osamostatnění těchto projektů umožňuje nezávislost vývojových týmů a možnost vydávat nové verze bez ohledu na vydání nové verze PostgreSQL.
+</p>
+<p>Některé programovací jazyky jako je např. PHP obsahují rozhraní pro PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho dalších jsou dostupné na adrese: <a href="http://gborg.postgresql.org" title="http://gborg.postgresql.org">http://gborg.postgresql.org</a> v sekci Drivers/Interfaces.
+</p>
+<h3><a name="item2.2">2.2</a>) JakÊ nåstroje lze pouŞít pro PostgreSQL a web?</h3>
+<p>Dobrým úvodem do problematiky databází v prostředí webových stránek může být web <a href="http://www.webreview.com" title="http://www.webreview.com">http://www.webreview.com</a>.
+</p>
+<p>PHP (<a href="http://www.php.net" title="http://www.php.net">http://www.php.net</a>) je vynikajĂ­cĂ­m rozhranĂ­m pro tvorbu webĹŻ.
+</p>
+<p>Pro složitější úlohy se často používá Perl a jeho BDB:Pg rozhraní s podporou CGI - CGI.pm nebo mod_perl(u).
+</p>
+<h3><a name="item2.3">2.3</a>) Existuje grafickĂŠ rozhranĂ­ pro PostgreSQL?</h3>
+<p>K dispozici je řada grafických nástrojů podporujících PostgreSQL a to od komerčních nebo open source vývojářů. Podrobný seznam naleznete na adrese
+<a href="http://www.postgresql.org/docs/techdocs.54" title="http://www.postgresql.org/docs/techdocs.54">http://www.postgresql.org/docs/techdocs.54</a>.
+</p>
+<hr>
+<h2 align="center">AdministrativnĂ­ dotazy</h2>
+<h3><a name="item3.1">3.1</a>) Jak nainstalovat PostgreSQL jinam neĹž do /usr/local/pgsql?</h3>
+<p>Při spouštění configure nastavte parametr --prefix
+</p>
+<h3><a name="item3.2">3.2</a>) Jak nastavit pravidla pro přístup z jiných stanic?</h3>
+<p>Ve výchozí konfiguraci, PostgreSQL umožňuje pouze připojení z lokálního uživatele prostřednictvím Unix domain sockets nebo TCP/IP spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a povolení adresy v souboru $PGDATA/pg_hba.conf se nelze připojit k PostgreSQL z ostatních stanic. Změna výše zmíněných parametrů vyžaduje restart databázového serveru.
+</p>
+<h3><a name="item3.3">3.3</a>) Jak vyladit databåzi na vyťťí výkon?</h3>
+<p>Výkon systému můžete ovlivnit ve třech oblastech:
+</p>
+<h4> Změny dotazu </h4>
+<ul><li> Použitím indexů včetně částečných a funkcionálních
+</li>
+<li> PouŞitím COPY místo opakovaných INSERTů
+</li>
+<li> Sloučením mnoha SQL příkazů do jedné transakce snížením režie na commit
+</li>
+<li> Používáním CLUSTERU, pokud načítáte větší počet řádek podle indexu
+</li>
+<li> PouĹžitĂ­m klauzule LIMIT v poddotazech
+</li>
+<li> Použitím předpřipravených dotazů
+</li>
+<li> Používáním ANALYZE. Tento příkaz aktualizuje statistiky, které se používají při optimalizaci dotazu
+</li>
+<li> PravidelnÊ pouŞití VACUUM nebo pouŞívåní pg_autovacuum
+</li>
+<li> Odstraněním indexů před rozsáhlými změnami v datech
+</li>
+</ul>
+<h4> Konfigurace serveru </h4>
+<p>Určité parametry v souboru postgresql.conf mají vliv na výkon serveru. Detaily naleznete v příručce Administrátora v Server Run-time Environment/Run-time Configuration. Další komentáře naleznete v <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html" title="http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html</a> a <a href="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html" title="http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html</a>.
+</p>
+<h4> Výběr hardware </h4>
+<p>Vliv hardware na výkon serveru je popsån v dokumentech <a href="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html" title="http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html">http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html</a> a <a href="http://www.powerpostgresql.com/PerfList/" title="http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/</a>.
+</p>
+<h3><a name="item3.4">3.4</a>) Jaké mám ladící prostředky?</h3>
+<p>Nastavením log_* proměnných v konfiguraci serveru si vynutíte logování dotazů a procesních statistik, které Vám mohou pomoci při ladění a optimalizaci výkonu.
+</p>
+<h3><a name="item3.5">3.5</a>) Co znamená "Sorry, too many clients", když se zkouším připojit?</h3>
+<p>Překročil jste výchozí limit, který je 100 současně připojených uživatelů. V konfiguraci serveru v postgresql.conf tuto hodnotu můžete zvětšit změnou hodnoty max_connection. Nezapomeňte restartovat server.
+</p>
+<h3><a name="item3.6">3.6</a>) Proč je nutný dump a obnovení (load) databáze při upgradu PostgreSQL?</h3>
+<p>Způsob číslování je popsán v dokumentaci na <a href="http://www.postgresql.org/support/versioning" title="http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning</a>. Instrukce k provedení migrace na vyšší verzi jsou taktéž v dokumentaci na adrese <a href="http://www.postgresql.org/docs/current/static/install-upgrading.html" title="http://www.postgresql.org/docs/current/static/install-upgrading.html">http://www.postgresql.org/docs/current/static/install-upgrading.html</a>.
+</p>
+<h3><a name="item3.7">3.7</a>) Jaký hardware bych měl používat?</h3>
+<p>Jelikož PC jsou většinou kompatibilní, lidé mají tendence věřit, že všechna PC jsou stejně kvalitní. Což není pravda. Paměti ECC, SCSI a kvalitní základní desky jsou mnohem spolehlivější a výkonnější než lacinější hardware. PostgreSQL poběží na většině hardwaru, nicméně pokud je pro Vás spolehlivost a výkon systému důležitá, je dobré věnovat čas nalezení vhodné hardwarové konfigurace. Na našich elektronických konferencích můžete diskutovat o vhodných konfiguracích a značkách.
+</p>
+<hr>
+<h2 align="center">ProvoznĂ­ dotazy</h2>
+<h3><a name="item4.1">4.1</a>) Jak získat pouze první řádek dotazu? Náhodný řádek?</h3>
+<p>Pokud potřebujete pouze několik řádků a pokud víte kolik, použijte
+SELECT LIMIT. Pokud bude moŞnÊ pouŞít index shodující se s ORDER BY,
+je možné, že se nebude provádět celý dotaz. Pokud neznáte počet záznamů,
+použijte kurzor a příkaz FETCH.
+</p>
+<p>Pro výběr náhodného řádku použijte příkaz ve tvaru:
+</p>
+<pre>
+SELECT col
+FROM tab
+ORDER BY random()
+LIMIT 1;
+</pre>
+<h3><a name="item4.2">4.2</a>) Jak získám seznam tabulek, indexů, databází, a definovaných uživatelů. Mohu vidět dotazy, které používá psql pro zobrazení těchto informací?</h3>
+<p>V psql příkazem \dt získáte seznam tabulek. Úplný seznam příkazů psql získáte příkazem \?. Alternativně si můžete prostudovat zdrojový kód psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL příkazy, které jsou generovány pro získání výstupu psql "backslash" příkazů. Také můžete nastartovat psql s parametrem -E, který způsobí zobrazení všech SQL příkazů, které se odesílají na server. PostgreSQL také podporuje SQL standard INFORMAČNÍ SCHÉMATA (standardní systémové tabulky). Klasickým dotazem do systémových tabulek získáte požadované informace o struktuře databáze.
+</p>
+<p>Systémové tabulky PostgreSQL (mimo rámec SQL standardů) používají prefix pg_. Pro zjištění struktury databáze je můžete použít také, i když preferovány jsou dotazy do informačního schématu.
+</p>
+<p>Seznam všech databází získáte příkazem psql -l
+</p>
+<p>Další inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. Obsahuje ilustrační SELECTy potřebné k získání informací z systémových tabulek databáze.
+</p>
+<h3><a name="item4.3">4.3</a>) Jak změnit datový typ sloupce?</h3>
+<p>Ve verzích 8.0 a pozdějších jednoduše:
+</p>
+<pre>
+ALTER TABLE ALTER COLUMN TYPE
+</pre><p>V starĹĄĂ­ch verzĂ­ch:
+</p>
+<pre>
+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;
+</pre><p>Po změně spusťte příkaz VACUUM FULL, aby došlo k uvolnění diskového prostoru použitého v tu chvíli již neplatnými záznamy.
+</p>
+<h3><a name="item4.4">4.4</a>) Jaká je maximální velikost řádku, tabulky a databáze?</h3>
+<p>PostgreSQL mĂĄ tato omezenĂ­:
+</p>
+<table border="0">
+<tr><td> MaximĂĄlnĂ­ velikost databĂĄze: </td><td> neomezena (existujĂ­ 32TB db)
+</td></tr>
+<tr><td> MaximĂĄlnĂ­ velikost tabulky: </td><td> 32 TB
+</td></tr>
+<tr><td> Maximální velikost řádky: </td><td> 480GB
+</td></tr>
+<tr><td> MaximĂĄlnĂ­ velikost poloĹžky </td><td> 1 GB
+</td></tr>
+<tr><td> Maximální počet řádků v tabulce: </td><td> neomezeno
+</td></tr>
+<tr><td> Maximální počet sloupců v tabulce: </td><td> 250-1600 podle typů
+</td></tr>
+<tr><td> Maximální počet indexů na tabulce: </td><td> neomezeno
+</td></tr>
+</table>
+<p>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.
+</p>
+<p>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ĂŠ.
+</p>
+<p>Maximální velikost tabulky a maximální počet sloupců můžeme
+zečtyřnásobit nastavením velikosti bloku na 32K.
+</p>
+<p>Indexy jsou povolené pouze na sloupcích jejichž délka je menší než 2000 znaků. Pokud tuto délku překročíme a index potřebujeme pro zajištění jednoznačnosti, je vhodnější použít funkcionální index nad MD5 funkcí nebo fulltextový index.
+</p>
+<h3><a name="item4.5">4.5</a>) Kolik diskového prostoru je potřeba k uložení dat z normálního textového souboru?</h3>
+<p>PostgreSQL vyžaduje až pětinásobek diskového prostoru k uložení dat z
+textovĂŠho souboru.
+</p>
+<p>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ěrně dvacet bytů
+dlouhĂ˝. TextovĂ˝ soubor bude 2.8 MB dlouhĂ˝. Velikost databĂĄze
+obsahujĂ­cĂ­ odpovĂ­dajĂ­cĂ­ data bude zhruba 5.2 MB.
+</p>
+<pre>
+ 24 bytů: hlavička řádku (přibližně)
+ 24 bytů: jedna celočíselná položka a jedna textová
+ + 4 byty: ukazatel na strĂĄnku k entici
------------------------------------------------------
- 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)
-</PRE>
- <P>Indexy nemají tak velkou režii, ale mohou být také velké, protože
- obsahují indexovaná data.</P>
-
- <P>Hodnoty <SMALL>NULL</SMALL> jsou uloženy v bitmapách, takže spotřebují jen velmi málo
- diskového prostoru.</P>
-
- <H4><A name="4.7">4.7</A>) Jak získám seznam vytvořených tabulek, indexů, databází?</H4>
-
- <P><I>psql</I> 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 <I>pg_</I>. Spuštění <I>psql</I> s parametrem <I>-l</I> provede výpis názvů
- všech databází.</P>
-
- <P>Soubor <I>pgsql/src/tutorial/syscat.source</I> obsahuje <SMALL>SELECT</SMALL>y přistupující k
- systémovým tabulkámm.</P>
-
- <H4><A name="4.8">4.8</A>) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?</H4>
-
- <P>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í.</P>
-
- <P>PostgreSQL rozhoduje o použití indexů na základě statistiky přístupů k
- tabulce. Tyto statistiky se shromažďují příkazy <SMALL>VACUUM ANALYZE</SMALL> nebo
- <SMALL>ANALYZE</SMALL>. 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.</P>
-
- <P>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.</P>
-
- <P>Jinak je tomu v případě použití <SMALL>LIMIT</SMALL> a <SMALL>ORDER BY</SMALL>, 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:</P>
-<PRE>
- SELECT col
- FROM tab
- ORDER BY col [ DESC ]
- LIMIT 1;
-</PRE>
- <P>Pokud si myslíte, že optimizer mylně zvolil sekvenční prohledávání
- tabulky, použijte příkaz <CODE>SET enable_seqscan TO 'off'</CODE> a zkuste zda je
- indexní prohledávání rychlejší.</P>
-
- <P>Při vyhledávání na základě vzoru jako je např. operátor <SMALL>LIKE</SMALL> nebo <I>~</I> se
- indexy použíjí pouze za určitých skutečností:</P>
- <UL>
- <LI>začátek hledaného vzoru musí být ukotven k začátku, tj.
- <UL>
- <LI>vzor <SMALL>LIKE</SMALL> nesmí začínat <I>%</I></LI>
- <LI><I>~</I> regulární výraz musí začínat <I>^</I></LI>
- </UL></LI>
- <LI>vzor nesmí začínat intervalem, např. [a-e]</LI>
- <LI>vyhledávaní, které není Case sensitiv jako je <SMALL>ILIKE</SMALL> nebo <I>~*</I>
- nepoužívá indexy. Můžete ale použít funkcionální indexy, které jsou
- posány v sekci <A href="#4.12">4.12</A></LI>
- <LI>při inicializaci databáze (<I>initdb</I>) 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í).</LI>
- </UL>
- <H4><A name="4.9">4.9</A>) Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz?</H4>
-
- Podívejte se do manuálové stránky příkazu <SMALL>EXPLAIN</SMALL>.
-
- <H4><A name="4.10">4.10</A>) Co to je R-tree index?</H4>
-
- <P>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 <I>point</I>, pak systém může efektivně odpovědět na dotaz -
- vyber všechny body uvnitř obdélníků.</P>
-
- <P>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</P>
-
- <P>Tyto materiály naleznete v Stonebraker's "Readings in Database Systems".</P>
-
- <P>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.</P>
-
- <H4><A name="4.11">4.11</A>) Co je Genetic Query Optimizer?</H4>
-
- <P><SMALL>GEQO</SMALL> 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.</P>
-
- <H4><A name="4.12">4.12</A>) Jak provést vyhledávání regulárního výrazu case sensitiv,
- insensitiv? Jak použít index pro case insensitive vyhledávání?</H4>
-
- <P>Operátor <I>~</I> slouží k porování s regulárním výrazem, jeho modifikace <I>*~</I>
- představuje case insensitive vyhledávání. Jedná se o obdobu <SMALL>LIKE</SMALL> a
- <SMALL>ILIKE</SMALL>.</P>
-
- <P>Pro vyhledávání bez ohledu na velká malá písmena použijeme:</P>
-<PRE>
- SELECT *
- FROM tab
- WHERE lower(col) = 'abc';
-</PRE>
- V tomto případě se nepoužije standardní index. Nicméně, použije se
- funkcionální index, pokud jej vytvoříte:
-<PRE>
- CREATE INDEX tabindex ON tab (lower(col));
-</PRE>
- <H4><A name="4.13">4.13</A>) Jak v dotazu detekovat, že položka je NULL?</H4>
-
- <P>Určíte pomocí <SMALL>IS NULL</SMALL> nebo <SMALL>IS NOT NULL</SMALL></P>
-
- <H4><A name="4.14">4.14</A>) Jaké jsou rozdíly mezi různými znakovými typy?</H4>
-<PRE>
-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
-</PRE>
- <P>S interními názvy se setkáte v systémovém katalogu a v některých
- chybových hlášeních.</P>
-
- <P>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 <SMALL>TOAST</SMALL>em, takže prostor na disku může
- být nižší než je očekáváno.</P>
-
- <P><SMALL>VARCHAR(n)</SMALL> je vhodný pro ukládání textů promměné délky s pevně
- stanovenou maximální délkou. <SMALL>TEXT</SMALL> je pro řetězce bez omezení délky s
- maximem jeden gigabajt.</P>
-
- <P><SMALL>CHAR(n)</SMALL> slouží k ukládání řetězců stejné délky. <SMALL>CHAR(n)</SMALL> doplní prázdné
- znaky do specifikované délky, zatímco VARCHAR(n) uloží pouze předané
- znaky. <SMALL>BYTEA</SMALL> je určeno pro ukládání binárních dat, včetně <SMALL>NULL</SMALL> byte.
- Všechny zde popsané typy mají podobné výkonnostní charakteristiky.</P>
-
- <H4><A name="4.15.1">4.15.1</A>) Jak vytvořit serial/auto-increment pole?</H4>
-
- <P>PostgreSQL podporuje typ <SMALL>SERIAL</SMALL>. Při jeho použití se automaticky vytvoří
- SEQUENCE. Například:</P>
-<PRE>
- CREATE TABLE person (
- id SERIAL,
- name TEXT
- );
-</PRE>
- je automaticky převedeno do
-<PRE>
- 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);
-</PRE>
- Viz dokumentace <I>create_sequence</I> v manuálových stránkách. Dále můžete
- použít unikátní hodnotu <I>OID</I> každého řádku. Potom ale musíte spouštět
- <I>pg_dump</I> s přepínačem <I>-o</I>, tak aby zůstaly zachovány hodnoty <SMALL>OID</SMALL> (u
- příkazu copy <SMALL>COPY WITH OIDS</SMALL>).
-
- <H4><A name="4.15.2">4.15.2</A>) Jak získat hodnotu <SMALL>SERIAL</SMALL> po vložení řádku?</H4>
-
- <P>Jednou z možností je získat budoucí hodnotu <SMALL>SERIAL</SMALL> funkcí <I>nextval()</I> před
- samotným vložením a pak ji vložit explicitně. Například v jakémsi
- pseudojazyku:</P>
-<PRE>
- newid = execute("SELECT nextval('person_id_seq')");
- execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-</PRE>
- <P>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
- <I>tabulka_sloupec_seq</I>.</P>
-
- <P>Alternativně můžete získat hodnotu posledně generovou sekvencí funkcí
- <I>currval()</I> po vložení:</P>
-<PRE>
- execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
- new_id = execute("SELECT currval('person_id_seq')");
-</PRE>
- <P>Konečně můžete použít <SMALL>OID</SMALL> hodnotu vrácenou příkazem <SMALL>INSERT</SMALL>, 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 <I>$sth->{pg_oid_status}</I>
- po každém <I>$sth->execute()</I>.</P>
-
- <H4><A name="4.15.3">4.15.3</A>) Nepovede <I>currval()</I> a <I>nextval()</I> k rozhození
- podmínek při souběhu s jinými uživateli?</H4>
-
- <P>Nikoliv, <I>currval()</I> vrací hodnotu naposledy generovanou ve vašem
- backendu, a ta tudíž není společná všem uživatelům.</P>
-
- <H4><A name="4.15.4">4.15.4</A>) Proč není vygenerované číslo použito při přerušení transakce?
- Proč vznikají díry v číslování vlastní sekvencí/SERIAL sloupce?</H4>
-
- <P>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í.</P>
-
- <H4><A name="4.16">4.16</A>) Co to je <SMALL>OID</SMALL>? Co je to <SMALL>TID</SMALL>?</H4>
-
- <P>Každý řádek vytvořený v PostgreSQL získá jedinečné <SMALL>OID</SMALL>. Všechna <SMALL>OID</SMALL>
- generovaná během inicializace databáze jsou menší než 16384
- (include/access/transam.h). Všechna <SMALL>OID</SMALL> generovaná na požadavek
- uživatele jsou rovna nebo vyšší této hodnotě. Normálně, všechna <SMALL>OID</SMALL> jsou
- jedinečná nejen uvnitř tabulky nebo databáze, ale v rámci celé instalace
- PostgreSQL</P>
-
- <P>PostgreSQL používá <SMALL>OID</SMALL> ve svém interním systému tabulek k vytvoření
- relací. Tato <SMALL>OID</SMALL> mohou být použita k identifikaci konkrétního uživatele
- a použita v spojení. Pro <SMALL>OID</SMALL> hodnoty je doporučen typ <SMALL>OID</SMALL>. Nad tímto
- sloupcem můžete vytvořit index pro urychlení přístupu.</P>
-
- <P><SMALL>OID</SMALL> 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 <SMALL>OID</SMALL>, nebo chcete zkopírovat tabulku s
- původními <SMALL>OID</SMALL>, lze použít:</P>
-<PRE>
- 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';
-</PRE>
- <P><SMALL>OID</SMALL> 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.</P>
-
- <P><SMALL>TID</SMALL> 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).</P>
-
- <H4><A name="4.17">4.17</A>) Jaký je význam některých výrazů použitých v PostgreSQL?</H4>
-
- <P>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:</P>
- <UL>
- <LI> tabulka, relace, třída (table, relation, class)</LI>
- <LI> řádek, záznam, ntice (row, record, tuple)</LI>
- <LI> sloupec, položka, atribut (column, field, attribute)</LI>
- <LI> vyhledání, výběr (retrieve, select)</LI>
- <LI> náhrada, úprava (replace, update)</LI>
- <LI> přidání, vkládání (append, insert)</LI>
- <LI> OID, serial value (OID, serial value)</LI>
- <LI> portal, kurzor (portal, cursor)</LI>
- <LI> range variable, jméno tabulky, alias tabulky (range
- variable, table name, table alias)</LI>
- </UL>
-
- <P>seznam těchto výrazů můžete nalézt na
- <A href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A>.</P>
-
- <H4><A name="4.18">4.18</A>) Proč jsem získal chybové hlášení "ERROR: Memory exhausted in AllocSetAlloc()"?</H4>
-
- <P>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</P>
-<PRE>
- ulimit -d 262144
- limit datasize 256m
-</PRE>
- <P>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.</P>
-
- <H4><A name="4.19">4.19</A>) Jak se dozvím, kterou verzi PostgreSQL používám?</H4>
-
- <P>V psql spusťte <CODE>SELECT version();</CODE></P>
-
- <H4><A name="4.20">4.20</A>) Proč operace s velkými objekty končí "invalid large obj descriptor"?</H4>
-
- <P>Všechny operace s velkými objekty - <CODE>lo_open</CODE>, <CODE>lo_close</CODE>, ... musíte
- spouštět v transakci, tj. mezi příkazy <CODE>BEGIN WORK</CODE> a <CODE>COMMIT</CODE>.</P>
-
- <P>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é.</P>
-
- Pokud používáte interface podobné <SMALL>ODBC</SMALL> musíte nastavit <CODE>set
- auto_commit off</CODE>.
-
- <H4><A name="4.21">4.21</A>) Jak vytvořit sloupec obsahující implicitně aktuální datum?</H4>
-
- <P>Použijte <I>CURRENT_TIMESTAMP</I>:</P>
-<PRE>
-<CODE>
-CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-</CODE>
-</PRE>
- <H4><A name="4.22">4.22</A>) Proč jsou moje vnořené dotazy používající IN tak pomalé?</H4>
-
- <P>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ů <SMALL>IN</SMALL> bylo rychlé. Pro ostatní případy je vhodné
- nahradit <SMALL>IN</SMALL> <SMALL>EXISTS</SMALL>:</P>
-<PRE>
- SELECT *
- FROM tab
- WHERE col IN (SELECT subcol FROM subtab);
-</PRE>
-<p>na:</p>
-<PRE>
- SELECT *
+ 52 bytů na řádek
+</pre><p>Velikost datovĂŠ strĂĄnky PostgreSQL je 8192 bytĹŻ (8KB)
+</p>
+<pre>
+ 8192 bytĹŻ na strĂĄnce
+---------------------- = 158 řádek na stránku
+ 52 bytů za řádek
+
+100000 řádek
+----------------------- = 633 strĂĄnek (zaokrouhleno nahoru)
+ 158 řádek na stránce
+
+633 datových strånek * 8192 bytů na kaŞdou strånku = 5,185,536 bytů (5.2 MB)
+</pre><p>Indexy nemají tak velkou reŞii, ale mohou být takÊ velkÊ, protoŞe
+obsahujĂ­ indexovanĂĄ data.
+</p>
+<p>Hodnoty NULL jsou uloĹženy v bitmapĂĄch, takĹže zabĂ­rajĂ­ jen velmi mĂĄlo
+diskovĂŠho prostoru.
+</p>
+<h3><a name="item4.6">4.6</a>) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?</h3>
+<p>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í.
+</p>
+<p>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.
+</p>
+<p>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Ĺž pouĹžitĂ­ indexu na velkĂŠ tabulce.
+</p>
+<p>Jinak je tomu v případě použití LIMIT a ORDER BY, při kterém se
+většinou index použije, jelikož je výsledkem pouze malá část tabulky.
+</p>
+<p>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
+prohledĂĄvĂĄnĂ­ s indexem rychlejĹĄĂ­.
+</p>
+<p>Při vyhledávání na základě vzoru jako je např. operátor LIKE nebo ~ se
+indexy použijí pouze za určitých skutečností:
+</p>
+<ul><li> začátek hledaného vzoru musí být ukotven k začátku, tj.
+<ul><li> vzor LIKE nesmí začínat %
+</li>
+<li> ~ regulární výraz musí začínat ^
+</li>
+</ul>
+</li>
+<li> vzor nesmí začínat intervalem, např. [a-e]
+</li>
+<li> vyhledåvaní, kterÊ není Case sensitiv jako je ILIKE nebo ~* nepouŞívå indexy. MůŞete ale pouŞít funkcionålní indexy, kterÊ jsou popsåny v sekci 4.8
+</li>
+<li> při inicializaci databáze (initdb) musí být použito C locale nebo vytvořte speciální text_pattern_index, který umožní, při respektování zmíněných podmínek použití indexu operací LIKE. Pro vyhledávání celých slov je možné a výhodné použít fulltext.
+</li>
+</ul>
+<h3><a name="item4.7">4.7</a>) Jak zjistĂ­m, jak se vyhodnocuje mĹŻj dotaz?</h3>
+<p>Podívejte se do nápovědy k příkazu EXPLAIN.
+</p>
+<h3><a name="item4.8">4.8</a>) Jak pouŞít case-(in)sensitive regulårní výraz? Jak pouŞít index pro case insensitive hledåní?</h3>
+<p>Vyhledávání prostřednictvím regulárních vzorů zajišťuje operátor ~, který je case-sensitive. Jeho case-insensitive varianta je operátor ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE.
+</p>
+<p>Case-insensitive vyhledání se řeší:
+</p>
+<pre>
+SELECT *
+FROM tab
+WHERE lower(col) = 'abc';
+</pre><p>Tento dotaz nepouŞije standardní index. Musíte pouŞít tzv. funkcionålní index:
+</p>
+<pre>
+CREATE INDEX tabindex ON tab (lower(col));
+</pre><p>Pokud index vytvoříme jako unikátní, tak můžeme ukládat řetězce obsahující malá i velká písmena, ale nikoliv řetězce, které se od sebe odlišují jen v malých a velkých písmenech. K zajištění zápisu řetězce obsahující pouze malá nebo pouze velká písmena použijte CHECK kontroly nebo triggery.
+</p>
+<h3><a name="item4.9">4.9</a>) Jak v dotazu detekovat, že položka je NULL? Jak bezpečně spojit dva řetězce, pokud mohou obsahovat NULL? Lze třídit podle toho, jestli je položka NULL nebo ne?</h3>
+<p>Pokud chcete testovat hodnotu NULL pouĹžijte operĂĄtor IS:
+</p>
+<pre>
+ SELECT *
FROM tab
- WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
-</PRE>
- <P>Pro urychlení vytvořete index pro subcol. </P>
-
- <P>Ve verzi 7.4 a pozdějších, <SMALL>IN</SMALL> používá stejně sofistikovanou techniku
- spojování tabulek jako ostatní dotazy a je preferovaný před <SMALL>EXISTS</SMALL>.</P>
-
- <H4><A name="4.23">4.23</A>) Jak provést vnější spojení (outer join)?</H4>
-
- <P>PostgreSQL podporuje vnější spojení tabulek standardními SQL příkazy.
- Zde jsou dva příklady:</P>
-<PRE>
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-</PRE>
- nebo
-<PRE>
- SELECT *
- FROM t1 LEFT OUTER JOIN USING (col);
-</PRE>
- <P>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í (<SMALL>RIGHT JOIN</SMALL>) přidá
- nepřipojené řádky z t2. <SMALL>FULL JOIN</SMALL> vrátí všechny řádky, včetně
- nepřipojených z tbulek t1 a t2. Klíčové slovo <SMALL>OUTER</SMALL> je nepovinné a váže
- se na <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL> a <SMALL>FULL</SMALL> join. Běžné
- spojení se nazývá <SMALL>INNER JOIN</SMALL>.</P>
-
- <P>V dřívějších verzích se vnější spojení tabulek mohlo simulovat pomocí
- <SMALL>UNION</SMALL> a <SMALL>NOT IN</SMALL>. Například pro spojení tabulek tab1 a tab2, je
- následující dotaz ekvivalentní k vnějšímu spojení dvou tabulek:</P>
-<PRE>
- 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;
-</PRE>
-
- <H4><A name="4.24">4.24</A>) Jak provést dotaz z více databází?</H4>
-
- <P>PostgreSQL nepodporuje dotazy do jiné než aktuální databáze.</P>
-
- <P><I>contrib/dblink</I> 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í.</P>
-
- <H4><A name="4.25">4.25</A>) Může funkce vrátit více řádků nebo sloupců?</H4>
-
- <P>V PostgreSQL 7.3 můžete jednoduše vracet více řádků nebo sloupců z
- funkce, viz:
- <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P>
-
- <H4><A name="4.26">4.26</A>) Proč nelze spolehlivě vytvářet a rušit dočasné tabulky v PL/pgSQL funkcích?</H4>
-
- <P>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í <SMALL>EXECUTE</SMALL>, tj.
- dynamické provádění dotazu. Tento příkaz zajistí opakovaný překlad
- dotazu při každém volání funkce.</P>
-
- <H4><A name="4.27">4.27</A>) Jaké jsou možnosti replikace databází?</H4>
-
- <P>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 <A href="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</A> najdete
- jejich seznam. Na řešení multi-master replikaci se pracuje na
- <A href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>.</P>
-
- <H4><A name="4.28">4.28</A>) Jaké jsou možnosti šifrování databází?</H4>
- <UL>
- <LI><I>contrib/pgcrypto</I> obsahuje šifrovací funkce použitelné v SQL
- dotazech.</LI>
- <LI>K šifrování přenosu dat z klienta na server, musí být server
- přeložen s podporou <I>ssl</I> a přepínač <I>ssl</I> v <I>postgresql.conf</I> musí být
- nastaven na hodnotu true. Klient musí mít vytvořen záznam hostssl v
- <I>pg_hba.conf</I> a také mít povolen režim <I>ssl</I>. Lze použít i jiné
- prostředky, nejen nativní podporu ssl v PostgreSQL, např. stunel a
- ssh.</LI>
- <LI>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
- <I>PASSWORD_ENCRYPTION</I> v <I>postgresql.conf</I></LI>
- <LI> Server může běžet na šifrovaném souborovém systému.</LI>
- </UL>
- <HR>
-
- <H2 align="center">Rozšiřování PostgreSQL</H2>
-
- <H4><A name="5.1">5.1</A>) Napsal jsem UDF funkci, PostgreSQL však končí dump core?</H4>
-
- <P>Problém může být způsoben mnoha okolnostmi. Vyzkoušejte si svoji funkci
- nejdříve v nějaké jednoduché aplikaci.</P>
-
- <H4><A name="5.2">5.2</A>) Jak mohu přispět nějakými šikovnými datovými typy a funkcemi do PostgreSQL?</H4>
-
- <P>Pošlete své rozšíření do konference pgsql-hackers, a ono pak možná
- skončí v podadresáři contrib.</P>
-
- <H4><A name="5.3">5.3</A>) Jak napsat funkci v C vracející ntici?</H4>
-
- <P>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 <I>contrib/tablefunc</I>.</P>
-
- <H4><A name="5.4">5.4</A>) Modifikoval jsem zdrojové soubory. Tato změna nebyla při rekompilaci vzata v potaz. Proč?</H4>
-
- <P><I>Makefile</I> nemá informace o závislostech mezi hlavičkovými soubory. Musíte
- provést <I>make clean</I> a pak <I>make</I>. Pokud používáte <SMALL>gcc</SMALL>, můžete použít
- přepínač <I>--enable-depend</I> příkazu <I>configure</I> k automatickému řešení
- závislostí překladačem.</P>
- </BODY>
-</HTML>
+ WHERE col IS NULL;
+</pre><p>K spojení řetězců, které mohou obsahovat hodnotu NULL, používejte funkci COALESCE(), např.:
+</p>
+<pre>
+ SELECT COALESCE(col1, '') || COALESCE(col2, '')
+ FROM tab
+</pre><p>Pokud chcete třídit podle hodnoty NULL, použijte výraz IS NULL nebo IS NOT NULL v klauzuli ORDER. Hodnota pravda má přednost před hodnotou false a tedy pokud použijete:
+</p>
+<pre>
+ SELECT *
+ FROM tab
+ ORDER BY (col IS NOT NULL)
+</pre><p>tak záznamy s NULL budou na začátku setříděných dat.
+</p>
+<h3><a name="item4.10">4.10</a>) JakÊ jsou rozdíly mezi různými znakovými typy?</h3>
+<table border="0">
+<tr><td>Typ </td><td> InternĂ­ nĂĄzev </td><td> PoznĂĄmky
+</td></tr>
+<tr><td> VARCHAR(n)</td><td> varchar</td><td> n určuje maximální délku
+</td></tr>
+<tr><td> CHAR(n)</td><td> bpchar </td><td> řetězec je do dané délky rozšířen mezerami
+</td></tr>
+<tr><td> TEXT</td><td> text</td><td> bez omezenĂ­ dĂŠlky
+</td></tr>
+<tr><td> BYTEA</td><td> bytea</td><td> pole bytĹŻ nespecifikovanĂŠ dĂŠlky
+</td></tr>
+<tr><td> "char"</td><td> char</td><td> jeden znak
+</td></tr>
+</table>
+<p>Na interní názvy můžete narazit v systémovém katalogu nebo v některých chybových hlášeních.
+</p>
+<p>Čtyři první typy jsou tzv. varlena typy (první čtyři byty na disku jsou obsahují délku, ostatní obsahují vlastní data). Skutečně obsazený prostor je tedy o něco málo větší než deklarovaná velikost. Na druhou stranu, delší řetězce jsou komprimovány, takže obsazený prostor na disku může být menší než se čeká.
+</p>
+<p>VARCHAR(n) je vhodný pro ukládání různě dlouhých řetězců u kterých známe délkové omezení, TEXT pro řetězce bez omezení délky (maximum je jeden gigabyte).
+</p>
+<p>CHAR(n) se používá pro uložení stejně dlouhých řetězců. CHAR(n) doplní mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot. Všechny zmíněné typy mají podobné výkonové charakteristiky.
+</p>
+<h3><a name="item4.11.1">4.11.1</a>) Jak vytvořit serial/auto-increment položku?</h3>
+<p>V PostgreSQL můžete použít datový typ SERIAL. Jeho použitím se automaticky vytvoří sekvence.
+Například:
+</p>
+<pre>
+CREATE TABLE person (
+ id SERIAL,
+ name TEXT
+);
+</pre><p>je automaticky transformovĂĄno na:
+</p>
+<pre>
+CREATE SEQUENCE person_id_seq;
+CREATE TABLE person (
+ id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
+ name TEXT
+);
+</pre><p>Podrobnější informace najdete v manuálu v popisu příkazu create_sequence.
+</p>
+<h3><a name="item4.11.2">4.11.2</a>) Jak získat hodnotu SERIAL po vložení řádku?</h3>
+<p>Nejjednoduťťím způsob, jak získat vygenerovanou hodnotu typu SERIAL, je vyuŞít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadå takto:
+</p>
+<pre>
+INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
+</pre><p>Také můžete použít funkci nextvall() a její výsledek použít v příkazu INSERT, nebo zavolat currval() po provedení příkazu INSERT.
+</p>
+<h3><a name="item4.11.3">4.11.3</a>) Nezpůsobí currval() a nextval() problémy ve více uživatelském prostředí?</h3>
+<p>Ne, currval vracĂ­ vĹždy hodnotu, kterĂĄ byla vygenerovĂĄna pro vĂĄs.
+</p>
+<h3><a name="item4.11.4">4.11.4</a>) Proč není vygenerované číslo použito při přerušení transakce?Proč vznikají díry v číslování prostřednictvím sekvence nebo typu SERIAL?</h3>
+<p>Poté co sekvence vygeneruje nové číslo, tak se nedochází k zamčení sekvence a nečeká se na úspěšné nebo neúspěšné dokončení transakce. Odvoláním transakce, která si vyžádala čísla sekvence se tato čísla nenávratně ztratí.
+</p>
+<h3><a name="item4.12">4.12</a>) Co to je OID? Co je to CTID?</h3>
+<p>V případě, že tabulku nezaložíme s atributem WITHOUT OIDS, tak má každý řádek unikátní identifikační číslo OID. Toto číslo je 4 bajtové celé číslo, které je jedinečné v celé instalaci. Přeteče po 4 miliardách řádků. PostgreSQL používá OIDs jako interní linky v interních systémových tabulkách.
+</p>
+<p>K získání unikátního čísla v nesystémových tabulkách je vhodnější použití typu SERIAL než OID, jelikož sekvence SERIAL se používá pouze pro jednu tabulku a je tudíž méně náchylná na přetečení. Pokud byste se toho obávali, použijte typ SERIAL8.
+</p>
+<p>CTID se používá k identifikaci konkrétního fyzického řádku. CTID se mění pokud je řádek modifikován nebo znovu načten. Používají ho indexy jako adresaci fyzických řádků.
+</p>
+<h3><a name="item4.13">4.13</a>) Co znamenĂĄ chybovĂŠ hlĂĄĹĄenĂ­ "ERROR: Memory exhausted in AllocSetAlloc()"?</h3>
+<p>Pravděpodobně jste vyčerpal dostupnou virtuální paměť, nebo tvůj kernel
+má příliš nízké limity u určitých zdrojů. Před startem PostgreSQL vyzkoušejte:
+</p>
+<pre>
+ulimit -d 262144
+limit datasize 256m
+</pre><p>Možná, že se projde pouze jeden příkaz - záleží to na vašem shellu.
+Měl by zvednout limity datových segmentů vašich procesů na dostatečně velkou
+hodnotu a snad umožnit dokončení dotazu. Změna limitů se bude aplikovat
+pouze na aktuální proces a na všechny nově vytvořené procesy. Jestliže máte
+problém s SQL klientem, protože vám server vrátil příliš dat, zkuste to
+před startem klienta.
+</p>
+<h3><a name="item4.14">4.14</a>) Jak zjistím, kterou verzi PostgreSQL pouŞívåm?</h3>
+<p>V psql napiĹĄte:
+</p>
+<pre>
+SELECT version();
+</pre>
+<h3><a name="item4.15">4.15</a>) Jak vytvořit sloupec, který bude implicitně obsahovat aktuální čas?</h3>
+<p>PouĹžijte CURRENT_TIMESTAMP:
+</p>
+<pre>
+CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
+</pre>
+<h3><a name="item4.16">4.16</a>) Jak provést vnější spojení (outer join)?</h3>
+<p>PostgreSQL podporuje standardní SQL syntaxi pro vnější spojení. Zde jsou
+dva příklady:
+</p>
+<pre>
+SELECT *
+FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
+</pre><p>nebo
+</p>
+<pre>
+SELECT *
+FROM t1 LEFT OUTER JOIN t2 USING (col);
+</pre><p>Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a ještě vrátí všechny nespárované řádky t2 (ty, které nedohledá v t2). RIGHT JOIN by připojil všechny nespárované řádky z t2. FULL JOIN vrátí všechny spárované řádky i všechny zbývající řádky z obou tabulek. Klíčové slovo OUTER je volitelné. Běžná operace JOIN se také označuje jako vnitřní spojení.
+</p>
+<h3><a name="item4.17">4.17</a>) Jak provést dotaz napříč několika databázemi?</h3>
+<p>Neexistuje žádný způsob, jak se v dotazu odkazovat na tabulky z jiné než aktuální databáze. A to protože má systémové tabulky uložené nezávisle v každé databázi a není tak úplně zřejmé, jak by se dotaz provedený napříč databázemi měl chovat.
+</p>
+<p>Jeden z doplňků dblink umožňuje dotaz nad několika tabulkami pomocí funkcí. Druhý způsob je simultální připojení klienta ke všem relevantním databázím a sloučení výsledku na straně klienta.
+</p>
+<h3><a name="item4.18">4.18</a>) Může funkce vrátit více řádků nebo sloupců?</h3>
+<p>Jde to jednoduĹĄe pomocĂ­ set-returning funkce. VĂ­ce na
+<a href="http://www.postgresql.org/docs/techdocs.17" title="http://www.postgresql.org/docs/techdocs.17">http://www.postgresql.org/docs/techdocs.17</a>.
+</p>
+<h3><a name="item4.19">4.19</a>) Co je příčinou chyby "relation with OID xxxxx does not exist"?</h3>
+<p>Nechtěným vedlejším efektem kešování SQL dotazů v PL/pgSQL funkci je problém s neplatnými odkazy na dočasné tabulky, které byly od prvního spuštění funkce zrušeny a znovu vytvořeny před dalším spuštěním PL/pgSQL funkce. Řešením je použít příkaz EXECUTE a to proto, že prováděcí plán SQL příkazu spouštěného příkazem EXECUTE se vytváří pokaždé znovu (neukládá se do cache).
+</p>
+<p>Tento problém by se neměl vyskytovat u PostgreSQL verze 8.3 a vyšších verzích.
+</p>
+<h3><a name="item4.20">4.20</a>) JakĂŠ jsou moĹžnosti replikace databĂĄzĂ­?</h3>
+<p>Replikaci databáze umožňuje několik technoligií. Každá má určité výhody a nevýhody.
+</p>
+<p>Master/Slave replikaci podporuje jeden hlavní server, který přijímá požadavky na zápis a čtení, a několik podřízených serverů, které umožňují pouze čtení (SELECT). Nejrozšířenějším volně dostupným řešením tohoto typu je <a href="http://main.slony.info/" title="http://main.slony.info/">Slony-I</a>.
+</p>
+<p>Replikace typu Multi-master podporuje existenci několika serverů s povoleným zápisem na více replikovaných serverech. Toto řešení zvyšuje zátěž serverů, protože je nutná synchronizace serverů. Nejrozšířenějším volně dostupným řešením je <a href="http://pgfoundry.org/projects/pgcluster/" title="http://pgfoundry.org/projects/pgcluster/">PGCluster</a>.
+</p>
+<p>Ještě existuje několik komerčních a hardware řešení replikací podporujících různé modely replikace.
+</p>
+<h3><a name="item4.21">4.21</a>) Proč v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proč jsou velká písmena v názvech automaticky převedena na malá písmena?</h3>
+<p>Nejčastějším důvodem nerozpoznání názvu objektu bylo použití vložení názvu sloupce nebo tabulky mezi uvozovky při zakládání tabulky. Pokud se název zapíše mezi uvozovky, pak je case sensitive, a v důsledku toho je nutné názvy těchto sloupců nebo tabulek v SQL příkazech také vkládat mezi uvozovky (pokud obsahují velká písmena). Některé programy, jako je například pgAdmin, automaticky používají uvozovky. Takže pokud chcete, aby systém identifikoval identifikátor, musíte:
+</p>
+<ul><li> nepoužívat uvozovky v příkazu CREATE TABLE
+</li>
+<li> v identifikåtoru pouŞít pouze malå písmena
+</li>
+<li> v dotazech vklĂĄdat identifikĂĄtory do uvozovek
+</li>
+</ul>
+</body>
+</htm>