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