From 5c996884a05ad62f00b8e4432beca1d7dd177d61 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 1 Nov 2007 17:28:03 +0000 Subject: Update Czech FAQ. Pavel Stehule --- doc/src/FAQ/FAQ_czech.html | 1806 ++++++++++++++++---------------------------- 1 file changed, 642 insertions(+), 1164 deletions(-) (limited to 'doc/src/FAQ') diff --git a/doc/src/FAQ/FAQ_czech.html b/doc/src/FAQ/FAQ_czech.html index 7baa4c0dea9..3a485388eed 100644 --- a/doc/src/FAQ/FAQ_czech.html +++ b/doc/src/FAQ/FAQ_czech.html @@ -1,1167 +1,645 @@ - - - - - - - - - PostgreSQL FAQ - - - - - -

Č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-2007, PostgreSQL Global Development Group - Dílčí Copyright (c) 1994-6, Regents of the University of California

- -

Uděluje se oprávnění k užití, rozmnožování, provádění úprav a - rozšiřování tohoto softwaru a dokumentace k němu, pro jakékoli účely, - bez licenčního poplatku a bez písemné licenční smlouvy, za podmínky, že - na všech jeho kopiích je uvedeno oznámení o výše uvedených právech, - jakož i obsah tohoto a dvou následujících odstavců.

- -

THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ŽÁDNÉM - PŘÍPADĚ ODPOVĚDNA ŽÁDNÉ TŘETÍ OSOBĚ ZA PŘÍMOU, NEPŘÍMOU, ZVLÁŠTNÍ, - NAHODILOU NEBO VÝSLEDNOU ŠKODU, VČETNĚ UŠLÉHO ZISKU, ZPůSOBENOU UŽITÍM - TOHOTO SOFTWARU A DOKUMENTACE K NĚMU, A TO I V PŘÍPADĚ, ŽE THE - UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOŽNOSTI VZNIKU TAKOVÉ - ŠKODY.

- -

HE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO - NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VýROBKU KE SPECIFICKýM - ÚČELůM. NÍŽE UVEDENý SOFTWARE JE POSKYTNUT "JAK STOJÍ A LEŽÍ" A THE - UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO ÚDRŽBU, PODPORU, - AKTUALIZACI, VYLEPŠENÍ NEBO MODIFIKACI.

- -

Výše uvedené je BSD licence, běžná licence otevřeného zdroje. Není zde - žádné omezení ohledně užití kódu zdroje. Jsme s tím spokojeni a nemáme v - úmyslu na této skutečnosti cokoli měnit.

- -

1.3) Na kterých Unixex lze spustit PostgreSQL?

- -

PostgreSQL běží na všech moderních unixových platformách. V instalačních - instrukcích naleznete aktuální seznam všech platforem na kterých byla - testováním ověřena funkcionalita PostgreSQL.

- -

1.4) Které ne-unixové platformy jsou podporované?

- -

Klient

- -

Knihovna libpq, psql a některé další moduly byly přeloženy pro MS - Windows. Klienta lze provozovat na MS Windows, ten prostřednictvím - TCP/IP protokolu komunikuje se serverem běžícím na některé z - podporovaných Unixových platforem. K překladu lze použít win32.mak a - Win32 knihovny libpq a psql. K databázi PostgerSQL lze přistupovat skrze - rozhraní ODBC.

- -

Server

- -

Server může být na WindowsNT a Win2k provozován pouze s knihovnou - Cygwin, Cygnus Unix/NT porting library. Více pgsql/doc/FAQ_MSWIN v - distribuci nebo MS Windows FAQ na adrese - http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN.

- -

Na nativním portu pro MS Win NT/2000/XP se pracuje. Další informace - o aktuálním stavu PostgreSQL pro Windows naleznet na adrese - http://techdocs.postgresql.org/guides/Windows a - - http://momjian.postgresql.org/main/writings/pgsql/win32.html.

- -

Existující port pro Novell Netware 6 naleznete na - http://forge.novell.com.

- -

1.5) Kde mohu získat PostgreSQL?

- -

Primárním anonymním ftp serverem pro PostgreSQL je - ftp://ftp.PostgreSQL.org/pub. - Seznam zrcadel naleznete na našich webových stránkách.

- -

1.6) Kde mohu získat podporu?

- -

Hlavní mailová konference je: - pgsql-general@PostgreSQL.org. Slouží k - diskuzím ohledně PostgreSQL. Přihlásíte se zasláním mailu obsahující - následující řádky v těle dopisu (nikoliv v záhlaví - subjectu):

-
-    subscribe
-    end
-
-

na adresu - pgsql-general-request@PostgreSQL.org.

- -

Můžete si vyžádat denní přehled (diggest), který má zhruba 30K denně - zpráv.

- -

Konference psql-bugs je určena k zasílání zpráv o chybách. Pro - přihlášení pošlete mail se stejným obsahem jako v předchozím případě na - adresu - pgsql-bugs-request@PostgreSQL.org.

- -

Do vývojářské konference se přihlásíte odesláním dopisu s již zmiňovaným - obsahem na mailto:pgsql-hackers-request@PostgreSQL.org.

- -

Seznam dalších konferencí naleznete na stránkách PostgreSQL:

-
-

http://www.postgresql.org

-
-

1.7) Jaká je poslední verze?

- -

Poslední verze PostgreSQL je 7.4.3. Plánujeme uvolnit významnou verzi - každých šest až osm měsíců.

- -

1.8) Jaká je dostupná dokumentace?

- -

Různé manuály, manuálové stránky a několik malých testovacích příkladů - jsou součásti distribuce. Podívejte se do adresáře /doc. Manuály jsou - přístupné online na http://www.PostgreSQL.org/docs.

- -

Na adresách http://www.PostgreSQL.org/docs/awbook.html a - http://www.commandprompt.com/ppbook/ - naleznezte dvě online knihy o PostgreSQL. Seznam dostupné literatury je na - - http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor - technických článků s tematikou PostgresQL najdete na http://techdocs.PostgreSQL.org/.

- -

psql má užitečný metapříkaz \d sloužící k zobrazení informací o typech, - operátorech, funkcí, agregačních funkcí atd.

- -

Více dokumentace naleznete na našich webových stránkách.

- -

1.9) Kde najdu seznam známých chyb nebo nepodporovaných vlastností?

- -

PostgreSQL podporuje rozšířenou podmnožinu SQL-92. V našem - TODO - najdete seznam známých chyb, chybějících vlastností a seznam vlastností, - které budou do systému implementovány v budoucnu (včetně priorit).

- -

1.10) Jak se mohu naučit SQL?

- -

V knize The PostgreSQL book na - http://www.PostgreSQL.org/docs/awbook.html je vysvětlen jazyk SQL (vyšla - česky). Další dostupnou knihou je http://www.commandprompt.com/ppbook. - Kvalitní návody naleznete na - http://www.intermedia.net/support/sql/sqltut.shtm, a na - http://sqlcourse.com.

- -

Další je Teach Yourself SQL in 21 days, Second Edition na http://members.tripod.com/er4ebus/sql/index.htm.

- -

Mnoho uživatelů doporučuje The Practical SQL Handbook, Bowman, Judith - S., et al., Addison-Wesley. Jiní preferují The Complete Reference SQL, - Groff et al., McGraw-Hill.

- -

1.11) Nemá PostgreSQL problémy s rokem 2000?

- -

Nemá, můžeme pracovat s datumy po roce 2000 našeho letopočtu i před - rokem 2000 př.n.l.

- -

1.12) Jak se připojit k vývojářskému týmu?

- -

Nejdříve si stáhněte nejnovější zdroje a přečtěte si vývojářskou - dokumentaci na našem webu nebo v distribuci. Pak se přihlašte do - konferencí pgsql-hackers a pgsql-patches. Kvalitní záplaty posílejte do - pgsql-patches.

- -

Právo commit má v CVS archivu asi třinácti lidí. Každý z nich poslal - mnoho kvalitních záplat, takže tehdejší commiters měli jistotu, že budou - předkládat jenom kvalitní záplaty a mohli jim předělit větší práva.

- -

1.13) Kam podat report o chybě?

- -

Navštivte naši PostgreSQL BugTool stránku na http://www.PostgreSQL.org/bugs/bugs.php, - která obsahuje návod a směrnice jak podat chybový report.

- -

Ověřte si na našem ftp serveru ftp://ftp.PostgreSQL.org/pub, - zda-li máte nejnovější verzi PostgreSQL a zda-li k ní neexistují nějaké záplaty.

- -

1.14) Jak je na tom PostgreSQL v porovnání s jinými databázemi?

- -

Existuje několik hledisek jak porovnávat software: vlastnosti, výkon, - spolehlivost, podpora a cena.

-
-
Vlastnosti
-
PostgreSQL má hodně společných vlastností s velkými komerčními - DBMS, např. transakce, vnořené dotazy, spouště, pohledy, kontrolu - referenční integrity a sofistikované zamykání. Podporuje některé - vlastnosti, které tyto systémy nemají, uživatelem definované typy, - dědičnost, pravidla, MVCC redukující zamykání.

- -
Výkon
-
Výkonnostně je na tom PostgreSQL podobně jako další komerční ale - i open source databáze, v něčem je rychlejší, jindy pomalejší. - V porovnání s MySQL a podobnými databázovými systémy je PostgreSQL - rychlejší při víceuživatelském přístupu, složitějších dotazech - a zatížení read/write dotazy. MySQL je rychlejší v jednodušších - dotazech s malým počtem uživatelů. Navíc, MySQL nepodporuje mnohé - vlatnosti zmíněné v sekci vlastnosti. Zapracovali jsme na - spolehlivosti a podporovaných vlastnostech, a výkon zvyšujeme - v každé verzi. Zajímavou stránku porovnávající PostgreSQL a MySQL - naleznete na http://openacs.org/philosophy/why-not-mysql.html. - Za vývojem MySQL není Open Source komunita, ale komerční společnost, - přestože svoje produkty distribuuje jako Open Source.

- -
Spolehlivost
-
Jsme si vědomi, že databáze musí být spolehlivá, jinak je - nepoužitelná. Snažíme se zveřejňovat dobře otestovaný, stabilní - kód s minimem chyb. Každá verze je více než měsíc v beta testování, - a naše historie verzí ukazuje, že můžeme nabídnout stabilní, solidní - verze, které jsou připraveny pro reálné nasazení. V této oblasti - jsme srovnatelní s dalšími databázemi.

- -
Podpora
-
Na naší mailové konferenci můžete kontaktovat velkou skupinu - vývojářů a uživatelů.problémů. Nemůžeme garantovat opravu, - nicméně komerční databáze také ne vždy nabídnou opravu. Podle - ohlasů je naše podpora hodnocena lépe než u jiných DBMS a to - díky přímému kontaktu s vývojáři, velkou komunitou uživatelů, - kvalitními manuály a přístupným zdrojovým kódem. Pro uživatele, - kteří vyžadují podporu ke konkrétním případům, existuje placená - podpora (FAQ sekce 1.6).

- -
Cena
-
PosgreSQL lze volně používat pro nekomerční i komerční použití. - Můžete do svých produktů přidat náš kód bez omezení, respektive - v souladu s podmínkami naší licenční smlouvy (v duchu BSD licence).
-
-
- -

1.15) Jak lze finančně pomoci PostgreSQL?

- -

PosgreSQL má prvotřídní infrastrukturu od našeho začátku v roce 1996. - Vděčíme za to Marku Fournierovi, který založil a spravoval tuto - infrastrukturu několik let.

- -

Kvalitní infrastruktura je velice důležitá pro každý open source - projekt. Předchází nedorozuměním, která velice zdržují pokrok v - projektu.

- -

Tato infrastruktura není laciná. K jejímu zajištění je třeba stále - hradit určité měsíční a jednorázové částky. Pokud máte Vy nebo Vaše - společnost peníze, které nám můžete darovat, obraťe se na http://store.pgsql.com/shopping/ a darujte je.

- -

Ačkoliv webová stránka zmiňuje PostgreSQL, Inc. vklady jsou určeny pouze - k podpoře projektu PostgreSQL a nepodporují žádnou existující - společnost. Pokud to vyžadujete, můžete poslat kontrolu na naši - kontaktní adresu.

-
- -

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í:

- -

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
+
+
+PostgreSQL FAQ
+
+
+
+
+
+
+

Frequently Asked Questions

+

Často kladené dotazy (FAQ) PostgreSQL +

+

Poslední aktualizace: 29. října 2007 (aktualizováno pro PostgreSQL 8.3) +

+

Současný správce: Bruce Momjian (bruce@momjian.us) +

+

Přeložil: Pavel Stěhule (pavel.stehule@gmail.com) +

+

Nejaktuálnější verzi tohoto dokumentu naleznete na adrese +http://www.postgresql.org/files/documentation/faqs/FAQ.html +

+

Odpovědi na otázky vázané na konkrétní platformy naleznete na +adrese http://www.postgresql.org/docs/faq/. +

+
+

ObecnĂŠ otĂĄzky

+1.1) Co je to PostgreSQL? Jakå je språvnå výslovnost slova PostgreSQL?
+1.2) Kdo řídí vývoj PostgreSQL?
+1.3) Pod jakou licencĂ­ je PostgreSQL?
+1.4) Na kterých platformåch lze provozovat PostgreSQL?
+1.5) Kde mohu zĂ­skat PostgreSQL?
+1.6) JakĂĄ je poslednĂ­ verze?
+1.7) Kde mohu zĂ­skat podporu?
+1.8) Jak a kam hlĂĄsit chyby?
+1.9) Kde najdu informace o znåmých chybåch nebo nepodporovaných vlastnostech?
+1.10) JakĂĄ je dostupnĂĄ dokumentace?
+1.11) Jak se mohu naučit SQL?
+1.12) Jak se mohu připojit k týmu vývojářů?
+1.13) Jak je na tom PostgreSQL v porovnåní s jinými databåzemi?
+1.14) Je PostgreSQL připraven na aktuální zavádění letního času v některých zemích?
+

Dotazy na klientskĂĄ rozhranĂ­

+2.1) KterĂĄ rozhranĂ­ jsou pouĹžitelnĂĄ pro PostgreSQL?
+2.2) JakÊ nåstroje lze pouŞít pro PostgreSQL a web?
+2.3) Existuje grafickĂŠ rozhranĂ­ pro PostgreSQL?
+

AdministrativnĂ­ dotazy

+3.1) Jak nainstalovat PostgreSQL jinam neĹž do /usr/local/pgsql?
+3.2) Jak nastavit pravidla pro přístup z jiných stanic?
+3.3) Jak vyladit databåzi na vyťťí výkon?
+3.4) Jaké mám ladící prostředky?
+3.5) Co znamená "Sorry, too many clients", když se zkouším připojit?
+3.6) Proč je nutný dump a obnovení (load) databáze při upgradu PostgreSQL?
+3.7) Jaký hardware bych měl používat?
+

ProvoznĂ­ dotazy

+4.1) Jak získat pouze první řádek dotazu? Náhodný řádek?
+4.2) Jak získám seznam tabulek, indexů, databází, a definovaných uživatelů. Mohu vidět dotazy, které používá psql pro zobrazení těchto informací?
+4.3) Jak změnit datový typ sloupce?
+4.4) Jaká je maximální velikost řádku, tabulky a databáze?
+4.5) Kolik diskového prostoru je potřeba k uložení dat z normálního textového souboru?
+4.6) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?
+4.7) Jak zjistĂ­m, jak se vyhodnocuje mĹŻj dotaz?
+4.8) Jak pouŞít case-(in)sensitive regulårní výraz? Jak pouŞít index pro case insensitive hledåní?
+4.9) Jak v dotazu detekovat, že položka je NULL? Jak bezpečně spojit dva řetězce, pokud mohou obsahovat NULL? Lze třídit podle toho, jestli je položka NULL nebo ne?
+4.10) JakÊ jsou rozdíly mezi různými znakovými typy?
+4.11.1) Jak vytvořit serial/auto-increment položku?
+4.11.2) Jak získat hodnotu SERIAL po vložení řádku?
+4.11.3) Nezpůsobí currval() a nextval() problémy ve více uživatelském prostředí?
+4.11.4) Proč není vygenerované číslo použito při přerušení transakce?Proč vznikají díry v číslování prostřednictvím sekvence nebo typu SERIAL?
+4.12) Co to je OID? Co je to CTID?
+4.13) Co znamenĂĄ chybovĂŠ hlĂĄĹĄenĂ­ "ERROR: Memory exhausted in AllocSetAlloc()"?
+4.14) Jak zjistím, kterou verzi PostgreSQL pouŞívåm?
+4.15) Jak vytvořit sloupec, který bude implicitně obsahovat aktuální čas?
+4.16) Jak provést vnější spojení (outer join)?
+4.17) Jak provést dotaz napříč několika databázemi?
+4.18) Může funkce vrátit více řádků nebo sloupců?
+4.19) Co je příčinou chyby "relation with OID xxxxx does not exist"?
+4.20) JakĂŠ jsou moĹžnosti replikace databĂĄzĂ­?
+4.21) Proč v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proč jsou velká písmena v názvech automaticky převedena na malá písmena?
+
+

ObecnĂŠ otĂĄzky

+

1.1) Co je to PostgreSQL? Jakå je språvnå výslovnost slova PostgreSQL?

+

Výslovnost PostgreSQL je Post-Gres-Q-L +, nebo zjednodušeně Postgres +. V řadě jazyků je slovo PostgreSQL obtížně vyslovitelný, proto se v hovoru často používá zjednodušená forma názvu. Pro ty, kteří by si rádi poslechli výslovnost, je k dispozici audiozáznam v MP3 formátu. +

+

PostgreSQL je relační databáze s některými objektovými rysy, která má možnosti tradičních +komerčních databázových systémů s několika rozšířeními, které lze najít v DBMS +systémech příští generace. Používání PostgreSQL není omezené a veškeré zdrojové kódy jsou +volně dostupné. +

+

Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojářů navzájem komunikujících +prostřednictvím internetu. Tento projekt není řízen žádnou obchodní organizací. Pokud se chcete +přidat k projektu, přečtěte si vývojářské FAQ na adrese http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html . +

+

1.2) Kdo řídí vývoj PostgreSQL?

+

Pokud budete hledat organizaci řídící vývoj PostgreSQL, budete zklamáni. Nic takového +neexistuje. Existují pouze "core" a CVS skupiny uživatelů, ale ty existují více z administrátorských +důvodů než z organizačních. Projekt je směrován komunitou vývojářů a uživatelů, ke které se +kdokoliv může připojit. Jediné co potřebuje, je přihlásit se do elektronické konference. Více ve +vývojářském FAQ. +

+

1.3) Pod jakou licencĂ­ je 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. +

+

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.4) Na kterých platformåch lze provozovat PostgreSQL?

+

Stručně řečeno, PostgreSQL běží na všech moderních unixových systémech. Seznam těch, u kterých proběhlo testování, naleznete v instalačních instrukcích. +

+

PostreSQL také běží nativně na všech Microsof Windows systémech odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP a Windows2003. Instalační balíček naleznete na adrese http://pgfoundry.org/projects/pginstaller. Na starších systémech s ještě MS-DOS jádrem lze spustit PostgreSQL s emulačním programem Cygwin. +

+

DĂĄle existuje port pro Novell Netware 6 port na adrese http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F . +

+

1.5) Kde mohu zĂ­skat PostgreSQL?

+

PomocĂ­ webovĂŠho klienta z adresy http://www.postgresql.org/ftp/ nebo klienta ftp z adresy ftp://ftp.postgresql.org/pub/. +

+

1.6) JakĂĄ je poslednĂ­ verze?

+

Nejnovější verzí PostgreSQL je verze 8.2.5 +

+

V plánu je uvolňovat každoročně jednu velkou verzi a každých několik měsíců malé verze. +

+

1.7) Kde mohu zĂ­skat podporu?

+

Nejčastější forma podpory uživatelům PostgreSQL komunitou je prostřednictvím e-mailů. Na našem webovém serveru naleznete odkaz na stránky,kde se můžete přihlásit do elektronické konference. Pro začátek jsou doporučené konference general nebo bugs. +

+

Další cestou je IRC kanál #postgresql na Freenode (irc.freenode.net). K připojení použijte Unixový příkaz irc -x '#postgresql' "$USER" irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti existuje ještě španělská (#postgresql-es) a francouzská (#postgresqlfr) verze. Další PostgreSQL kanál naleznete na EFNet. +

+

Seznam společností poskytující komerční podporu naleznete na adrese http://techdocs.postgresql.org/companies.php. +

+

1.8) Jak a kam hlĂĄsit chyby?

+

Vyplňte formulář na adrese http://www.postgresql.org/support/submitbug. Na našem ftp serveru ftp://ftp.postgresql.org/pub/ si ověřte, že používáte aktuální verzi PostreSQL. +

+

Chyby reportované prostřednictvím chybového formuláře nebo zasláním mailu do PostgreSQL konference obvykle generuje následující odezvu: +

+ +

1.9) Kde najdu informace o znåmých chybåch nebo nepodporovaných vlastnostech?

+

PostgreSQL podporuje rozšířenou podmnožinu SQL:2003. V našem TODO naleznete seznam známých chyb, chybějících vlastností, a plány do budoucna. +

+

Odezva na poĹžadavek na novou vlastnost PostgreSQL je obvykle: +

+ +

PostgreSQL nepožívá systém pro sledování chyb, protože jsme zjistili, že je efektivnější přímo reagovat na maily a udržovat aktuální TODO. V praxi je snaha o co nejrychlejší řešení chyb, a chyby, které by se mohly projevit u mnoha uživatelů jsou opravovány velice rychle. Jediné místo, kde lze dohledat všechny změny, rozšíření a opravy v PostgreSQL je CVS log. Poznámky k verzi "Release notes" nezachycují všechny změny, k němž došlo. +

+

1.10) JakĂĄ je dostupnĂĄ dokumentace?

+

PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál, manuálové stránky a testovací příklady. Podívejte se do adresáře /doc. Manuál je přístupný online na http://www.postgresql.org/docs. +

+

K dispozici jsou zdarma dvě online knihy na adresách http://www.postgresql.org/docs/books/awbook.html a http://www.commandprompt.com/ppbook/. Další literaturu lze zakoupit. Nejpopulárnější je od Kerryho Douglase. Seznam dostupné literatury je na http://techdocs.postgresql.org/techdocs/bookreviews.php. Ještě je kolekce technicky orientovaných článků tematicky spojených s PostgreSQL na adrese http://techdocs.postgresql.org/. +

+

Řádkový klient psql má \d příkazy pro zobrazení informací o typech, operátorech, funkcích, agregačních funkcí, atd. Použijte \? pro zobrazení dostupných příkazů. +

+

DalĹĄĂ­ dokumentaci najdete na naĹĄem webu. +

+

1.11) Jak se mohu naučit SQL?

+

Podívejte se do výše uvedené dokumentace. Další online knihou je "Teach Yourself SQL in 21 Days, Second Edition" na adrese http://members.tripod.com/er4ebus/sql/index.htm. Mnoho našich uživatelů doporučuje knihu The Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. Další The Complete Reference SQL, Groff et al., McGraw-Hill. +

+

DalĹĄĂ­ online tutoriĂĄly jsou dostupnĂŠ na adresĂĄch: +

+ +

1.12) Jak se mohu připojit k týmu vývojářů?

+

Prostudujte si Developer's FAQ. +

+

1.13) Jak je na tom PostgreSQL v porovnåní s jinými databåzemi?

+

Software můžeme porovnávat z několika různých pohledů: vlastnosti, výkon, spolehlivost, podpora a cena. +

+ +

Vlastnosti

+

PostgreSQL nabízí většinu funkcí funkcionality velkých komerčních DBMS systémů jako jsou: transakce, vnořené dotazy, spouště, referenční integrita a sofistikovaný systém zamykání. Poskytujeme určité funkce, které ostatní systémy běžně nepodporují. Např. uživatelem definované typy, dědičnost, pravidla (rules), a MVCC architekturu. +

+

Výkon

+

Výkon PostgreSQL je srovnatelný s ostatními komerčními nebo Open Source databázemi. V některých případech je rychlejší, jindy pomalejší. Náš výkon je obvykle +/-10% vůči ostatním databázím. +

+

Spolehlivost

+

Uvědomujeme si, že databáze musí být stoprocentně spolehlivá, jinak je nepoužitelná. Snažíme se, aby každá verze byla dobře otestována a obsahovala minimum chyb. Každá verze je minimálně několik měsíců v beta testovacím režimu. Do produkčního režimu se dostane, až když nedochází k dalším změnám nebo opravám. Věříme, že jsem více než srovnatelní s ostatními databázemi v této oblasti. +

+

Podpora

+

Na našich internetových konferencích se setkává velká skupina vývojářů a uživatelů při řešení vyskytujících se problémů. +Naše internetové konference umožňují kontakt velké skupiny vývojářů a uživatelů. Nemůžeme garantovat opravu chyby, ale komerční DBMSs také vždy negarantují řešení problémů. Věříme ale, že díky přímému kontaktu na vývojáře, naši uživatelskou komunitu, manuálům, a dostupným zdrojovým kódům máme lepší podporu než ostatní DBMSs. Pro ty, kteří preferují komerční "per-incident" podporu, existuje společností, kteří ji nabízejí (FAQ sekce 1.7.) +

+

Cena

+

PostgreSQL lze používat bezplatně (a to i pro komerční použití). Také můžete neomezeně používat náš kód ve svých produktech s výjimkami specifikovanými v naší licenci (přebíráme BSD licenci). +

+

1.14) Je PostgreSQL připraven na aktuální zavádění letního času v některých zemích?

+

Počínaje verzí 8.0.[4+] podporuje PostgreSQL letní čas také pro USA. Podpora letního času (daylight saving time) pro Kanadu a Západní Austrálii je obsažena ve verzích 8.0.[10+] a 8.1.[6+] a všech následujících verzích. Starší verze používaly systémovou databázi časových zón obsahující, kromě jiného, informaci o tom, zda se pro danou časovou zónu rozlišuje mezi letním a zimním časem. +

+
+

Dotazy na klientskĂĄ rozhranĂ­

+

2.1) KterĂĄ rozhranĂ­ jsou pouĹžitelnĂĄ pro PostgreSQL?

+

PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C. Všechna další rozhraní představují nezávislé projekty, které je třeba stáhnout z internetu samostatně. Osamostatnění těchto projektů umožňuje nezávislost vývojových týmů a možnost vydávat nové verze bez ohledu na vydání nové verze PostgreSQL. +

+

Některé programovací jazyky jako je např. PHP obsahují rozhraní pro PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho dalších jsou dostupné na adrese: http://gborg.postgresql.org v sekci Drivers/Interfaces. +

+

2.2) JakÊ nåstroje lze pouŞít pro PostgreSQL a web?

+

Dobrým úvodem do problematiky databází v prostředí webových stránek může být web http://www.webreview.com. +

+

PHP (http://www.php.net) je vynikajĂ­cĂ­m rozhranĂ­m pro tvorbu webĹŻ. +

+

Pro složitější úlohy se často používá Perl a jeho BDB:Pg rozhraní s podporou CGI - CGI.pm nebo mod_perl(u). +

+

2.3) Existuje grafickĂŠ rozhranĂ­ pro PostgreSQL?

+

K dispozici je řada grafických nástrojů podporujících PostgreSQL a to od komerčních nebo open source vývojářů. Podrobný seznam naleznete na adrese +http://www.postgresql.org/docs/techdocs.54. +

+
+

AdministrativnĂ­ dotazy

+

3.1) Jak nainstalovat PostgreSQL jinam neĹž do /usr/local/pgsql?

+

Při spouštění configure nastavte parametr --prefix +

+

3.2) Jak nastavit pravidla pro přístup z jiných stanic?

+

Ve výchozí konfiguraci, PostgreSQL umožňuje pouze připojení z lokálního uživatele prostřednictvím Unix domain sockets nebo TCP/IP spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a povolení adresy v souboru $PGDATA/pg_hba.conf se nelze připojit k PostgreSQL z ostatních stanic. Změna výše zmíněných parametrů vyžaduje restart databázového serveru. +

+

3.3) Jak vyladit databåzi na vyťťí výkon?

+

Výkon systému můžete ovlivnit ve třech oblastech: +

+

Změny dotazu

+ +

Konfigurace serveru

+

Určité parametry v souboru postgresql.conf mají vliv na výkon serveru. Detaily naleznete v příručce Administrátora v Server Run-time Environment/Run-time Configuration. Další komentáře naleznete v http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. +

+

Výběr hardware

+

Vliv hardware na výkon serveru je popsån v dokumentech http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html a http://www.powerpostgresql.com/PerfList/. +

+

3.4) Jaké mám ladící prostředky?

+

Nastavením log_* proměnných v konfiguraci serveru si vynutíte logování dotazů a procesních statistik, které Vám mohou pomoci při ladění a optimalizaci výkonu. +

+

3.5) Co znamená "Sorry, too many clients", když se zkouším připojit?

+

Překročil jste výchozí limit, který je 100 současně připojených uživatelů. V konfiguraci serveru v postgresql.conf tuto hodnotu můžete zvětšit změnou hodnoty max_connection. Nezapomeňte restartovat server. +

+

3.6) Proč je nutný dump a obnovení (load) databáze při upgradu PostgreSQL?

+

Způsob číslování je popsán v dokumentaci na http://www.postgresql.org/support/versioning. Instrukce k provedení migrace na vyšší verzi jsou taktéž v dokumentaci na adrese http://www.postgresql.org/docs/current/static/install-upgrading.html. +

+

3.7) Jaký hardware bych měl používat?

+

Jelikož PC jsou většinou kompatibilní, lidé mají tendence věřit, že všechna PC jsou stejně kvalitní. Což není pravda. Paměti ECC, SCSI a kvalitní základní desky jsou mnohem spolehlivější a výkonnější než lacinější hardware. PostgreSQL poběží na většině hardwaru, nicméně pokud je pro Vás spolehlivost a výkon systému důležitá, je dobré věnovat čas nalezení vhodné hardwarové konfigurace. Na našich elektronických konferencích můžete diskutovat o vhodných konfiguracích a značkách. +

+
+

ProvoznĂ­ dotazy

+

4.1) Jak získat pouze první řádek dotazu? Náhodný řádek?

+

Pokud potřebujete pouze několik řádků a pokud víte kolik, použijte +SELECT LIMIT. Pokud bude možné použít index shodující se s ORDER BY, +je možné, že se nebude provádět celý dotaz. Pokud neznáte počet záznamů, +použijte kurzor a příkaz FETCH. +

+

Pro výběr náhodného řádku použijte příkaz ve tvaru: +

+
+SELECT col
+FROM tab
+ORDER BY random()
+LIMIT 1;
+
+

4.2) Jak získám seznam tabulek, indexů, databází, a definovaných uživatelů. Mohu vidět dotazy, které používá psql pro zobrazení těchto informací?

+

V psql příkazem \dt získáte seznam tabulek. Úplný seznam příkazů psql získáte příkazem \?. Alternativně si můžete prostudovat zdrojový kód psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL příkazy, které jsou generovány pro získání výstupu psql "backslash" příkazů. Také můžete nastartovat psql s parametrem -E, který způsobí zobrazení všech SQL příkazů, které se odesílají na server. PostgreSQL také podporuje SQL standard INFORMAČNÍ SCHÉMATA (standardní systémové tabulky). Klasickým dotazem do systémových tabulek získáte požadované informace o struktuře databáze. +

+

Systémové tabulky PostgreSQL (mimo rámec SQL standardů) používají prefix pg_. Pro zjištění struktury databáze je můžete použít také, i když preferovány jsou dotazy do informačního schématu. +

+

Seznam všech databází získáte příkazem psql -l +

+

Další inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. Obsahuje ilustrační SELECTy potřebné k získání informací z systémových tabulek databáze. +

+

4.3) Jak změnit datový typ sloupce?

+

Ve verzích 8.0 a pozdějších jednoduše: +

+
+ALTER TABLE ALTER COLUMN TYPE
+

V starĹĄĂ­ch verzĂ­ch: +

+
+BEGIN;
+ALTER TABLE tab ADD COLUMN new_col new_data_type;
+UPDATE tab SET new_col = CAST(old_col AS new_data_type);
+ALTER TABLE tab DROP COLUMN old_col;
+COMMIT;
+

Po změně spusťte příkaz VACUUM FULL, aby došlo k uvolnění diskového prostoru použitého v tu chvíli již neplatnými záznamy. +

+

4.4) 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: 480GB +
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. +

+

Indexy jsou povolené pouze na sloupcích jejichž délka je menší než 2000 znaků. Pokud tuto délku překročíme a index potřebujeme pro zajištění jednoznačnosti, je vhodnější použít funkcionální index nad MD5 funkcí nebo fulltextový index. +

+

4.5) 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ěrně dvacet bytů +dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze +obsahující odpovídající data bude zhruba 5.2 MB. +

+
+    24 bytů: hlavička řádku (přibližně)
+    24 bytů: jedna celočíselná položka a jedna textová
+   + 4 byty: ukazatel na strĂĄnku k entici
    ------------------------------------------------------
-    64 bytů na řádek
-
-   Velikost datové stránky PostgreSQL je 8KB
-
-    8192 bytů na stránce
-    ---------------------- = 128 řádek na stránku
-      64 bytů za řádek
-
-    100000 řádek
-    -------------------- = 782 stránek (zaokrouhleno nahoru)
-       128 řádek na stránce
-
-    782 * 8192 = 6, 406, 144 bytů (6.4 MB)
-
-

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í:

- -

4.9) Jak zjistím, jak optimizer dotazu vyhodnocuje můj dotaz?

- - Podívejte se do manuálové stránky příkazu EXPLAIN. - -

4.10) Co to je R-tree index?

- -

R-tree index se používá pro indexování prostorových dat. Hash index - nemůže obsloužit prohledávání oblastí. B-tree index může řídit vyhledání - oblastí v jedné dimenzi. R-tree index může podporovat hledání v - multidimenzionálních datech. Použijeme-li například R-tree index na - atributy typu point, pak systém může efektivně odpovědět na dotaz - - vyber všechny body uvnitř obdélníků.

- -

Původní návrh R-tree je Guttman, A. "R-trees: A Dynamic Index Structure - for Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on - Mgmt of Data, 45-57

- -

Tyto materiály naleznete v Stonebraker's "Readings in Database Systems".

- -

Vestavěné R-tree může sloužit k indexaci polygonů a oblastí. Teoreticky - můžeme R-tree použít i pro více dimenzí (jiné než 3D). Ve skutečnosti - ale takové rozšíření R-tree vyžaduje trochu práce a ve součastnosti - chybí dokumentace jak na to.

- -

4.11) Co je Genetic Query Optimizer?

- -

GEQO modul urychluje optimalizaci dotazů při spojování množství tabulek - metodou Genetických algoritmů (GA). To umožňuje získat velkého množství - variant spojení při neúplném prohledáváním.

- -

4.12) Jak provést vyhledávání regulárního výrazu case sensitiv, - insensitiv? Jak použít index pro case insensitive vyhledávání?

- -

Operátor ~ slouží k porování s regulárním výrazem, jeho modifikace *~ - představuje case insensitive vyhledávání. Jedná se o obdobu LIKE a - ILIKE.

- -

Pro vyhledávání bez ohledu na velká malá písmena použijeme:

-
-    SELECT * 
-    FROM tab
-    WHERE lower(col) = 'abc';
-
- V tomto případě se nepoužije standardní index. Nicméně, použije se - funkcionální index, pokud jej vytvoříte: -
-    CREATE INDEX tabindex ON tab (lower(col));
-
-

4.13) Jak v dotazu detekovat, že položka je NULL?

- -

Určíte pomocí IS NULL nebo IS NOT NULL

- -

4.14) Jaké jsou rozdíly mezi různými znakovými typy?

-
-Typ         Interní název       Poznámka
---------------------------------------------------------------------------
-VARCHAR(n)  varchar             omezeno maximální délkou, bez doplnění mezerami
-CHAR(n)     bpchar              řetězec je doplněn mezerami do dané délky
-TEXT        text                bez horního limitu na délku
-BYTEA       bytea               pole bytů (bezpečně lze uložit i znak NULL)
-"char"      char                jeden znak
-
-

S interními názvy se setkáte v systémovém katalogu a v některých - chybových hlášeních.

- -

První čtyři uvedené typy jsou tzv. varlena typy (tj. první čtyři byty na - disku nesou údaj o délce, následují samotná data). Proto skutečný - použitý prostor je vždy o něco málo větší než deklarovaná délka. Naopak, - tyto datové typy jsou komprimovánty TOASTem, takže prostor na disku může - být nižší než je očekáváno.

- -

VARCHAR(n) je vhodný pro ukládání textů promměné délky s pevně - stanovenou maximální délkou. TEXT je pro řetězce bez omezení délky s - maximem jeden gigabajt.

- -

CHAR(n) slouží k ukládání řetězců stejné délky. CHAR(n) doplní prázdné - znaky do specifikované délky, zatímco VARCHAR(n) uloží pouze předané - znaky. BYTEA je určeno pro ukládání binárních dat, včetně NULL byte. - Všechny zde popsané typy mají podobné výkonnostní charakteristiky.

- -

4.15.1) Jak vytvořit serial/auto-increment pole?

- -

PostgreSQL podporuje typ SERIAL. Při jeho použití se automaticky vytvoří - SEQUENCE. Například:

-
-    CREATE TABLE person (
-        id   SERIAL,
-        name TEXT
-    );
-
- je automaticky převedeno do -
-    CREATE SEQUENCE person_id_seq;
-    CREATE TABLE person (
-        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
-        name TEXT
-    );
-    CREATE UNIQUE INDEX person_id_key ON person(id);
-
- Viz dokumentace create_sequence v manuálových stránkách. Dále můžete - použít unikátní hodnotu OID každého řádku. Potom ale musíte spouštět - pg_dump s přepínačem -o, tak aby zůstaly zachovány hodnoty OID (u - příkazu copy COPY WITH OIDS). - -

4.15.2) Jak získat hodnotu SERIAL po vložení řádku?

- -

Jednou z možností je získat budoucí hodnotu SERIAL funkcí nextval() před - samotným vložením a pak ji vložit explicitně. Například v jakémsi - pseudojazyku:

-
-    newid = execute("SELECT nextval('person_id_seq')");
-    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-
-

Můžete pak ještě použít hodnotu newid v dalších dotazech, např. jako - hodnotu cizího klíče. Název automaticky vytvořené sekvence je - tabulka_sloupec_seq.

- -

Alternativně můžete získat hodnotu posledně generovou sekvencí funkcí - currval() po vložení:

-
-    execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
-    new_id = execute("SELECT currval('person_id_seq')");
-
-

Konečně můžete použít OID hodnotu vrácenou příkazem INSERT, ale to je - pravděpodobně nejméně přenositelné řešení. V Perlu při použití DBI - modulu Edmunda Mergleho DBD:Pg oid hodnotu získáme $sth->{pg_oid_status} - po každém $sth->execute().

- -

4.15.3) Nepovede currval() a nextval() k rozhození - podmínek při souběhu s jinými uživateli?

- -

Nikoliv, currval() vrací hodnotu naposledy generovanou ve vašem - backendu, a ta tudíž není společná všem uživatelům.

- -

4.15.4) Proč není vygenerované číslo použito při přerušení transakce? - Proč vznikají díry v číslování vlastní sekvencí/SERIAL sloupce?

- -

K zajištění efektivnosti souběhu, jsou hodnoty posloupnosti, když se o - ně požádá, a sekvence není zamčena do ukončení transakce. To způsobuje - díry v číslování ze zrušených transakcí.

- -

4.16) Co to je OID? Co je to TID?

- -

Každý řádek vytvořený v PostgreSQL získá jedinečné OID. Všechna OID - generovaná během inicializace databáze jsou menší než 16384 - (include/access/transam.h). Všechna OID generovaná na požadavek - uživatele jsou rovna nebo vyšší této hodnotě. Normálně, všechna OID jsou - jedinečná nejen uvnitř tabulky nebo databáze, ale v rámci celé instalace - PostgreSQL

- -

PostgreSQL používá OID ve svém interním systému tabulek k vytvoření - relací. Tato OID mohou být použita k identifikaci konkrétního uživatele - a použita v spojení. Pro OID hodnoty je doporučen typ OID. Nad tímto - sloupcem můžete vytvořit index pro urychlení přístupu.

- -

OID jsou dána všem řádkům z centrální oblasti a jsou použita v každé - databázi. Pokud potřebujete změnit OID, nebo chcete zkopírovat tabulku s - původními OID, lze použít:

-
-        CREATE TABLE new_table(old_oid oid, mycol int);
-        SELECT old_oid, mycol INTO new FROM old;
-        COPY new TO '/tmp/pgtable';
-        DELETE FROM new;
-        COPY new WITH OIDS FROM '/tmp/pgtable';
-
-

OID jsou uložena jako 4bajtový integer a přetečou po čtyřech miliardách. - Nebylo hlášeno, že by se tak někdy stalo, přesto ale plánujeme odstranit - tento limit dřív než se tak stane.

- -

TID se používají i identifikaci fyzických řádků s hodnotou bloku a - offsetu. TIDs se mění modifikací řádků (používá se jako ukazatel indexu - fyzického řádku).

- -

4.17) Jaký je význam některých výrazů použitých v PostgreSQL?

- -

V některých zdrojových kódech nebo starší dokumentaci se můžete setkat s - následujícími výrazy, které mají širší význam. Zde je příklad nekterých:

- - -

seznam těchto výrazů můžete nalézt na - http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html.

- -

4.18) Proč jsem získal chybové hlášení "ERROR: Memory exhausted in AllocSetAlloc()"?

- -

Pravděpodobně došlo k vyčerpání virtuální paměťi na Vašem systému, nebo - jádro má nízký limit pro určité zdroje. Vyzkoušejte před startem - posmatera

-
-    ulimit -d 262144
-    limit datasize 256m
-
-

Záleží na Vašem shellu, zda budou tyto příkazy úspěšné, měly by zvýšit - limit datového segmentu pro Vaše procesy a umožnit tak dokončení dotazu. - Tyto příkazy se aplikují na aktuální proces a všechny synovské procesy - vytvořené po provedení příkazu. Pokud máte problémy s SQL klientem - protože backend vrací příliš mnoho dat, zkuste zvýšit limity před - startem klienta.

- -

4.19) Jak se dozvím, kterou verzi PostgreSQL používám?

- -

V psql spusťte SELECT version();

- -

4.20) Proč operace s velkými objekty končí "invalid large obj descriptor"?

- -

Všechny operace s velkými objekty - lo_open, lo_close, ... musíte - spouštět v transakci, tj. mezi příkazy BEGIN WORK a COMMIT.

- -

PostgreSQL uvolňuje handle velkých objektů při skončení transakce. Pokud - budete pracovat s velkými objekty mimo transakci, pravděpodobně - dostanete toto chybové hlášení, protože handle již budou neplatné.

- - Pokud používáte interface podobné ODBC musíte nastavit set - auto_commit off. - -

4.21) Jak vytvořit sloupec obsahující implicitně aktuální datum?

- -

Použijte CURRENT_TIMESTAMP:

-
-
-CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-
-
-

4.22) Proč jsou moje vnořené dotazy používající IN tak pomalé?

- -

Dřívější verze (před 7.4) spojovali vnořené dotazy k vnějším sekvenčním - čtením výsledku poddotazu pro každý řádek vnějšího dotazu. Pokud poddotaz - vrátil několik málo řádků IN bylo rychlé. Pro ostatní případy je vhodné - nahradit IN EXISTS:

-
-    SELECT * 
-    FROM tab
-    WHERE col IN (SELECT subcol FROM subtab);
-
-

na:

-
-   SELECT * 
+    52 bytů na řádek
+

Velikost datovĂŠ strĂĄnky PostgreSQL je 8192 bytĹŻ (8KB) +

+
+ 8192 bytĹŻ na strĂĄnce
+---------------------- = 158 řádek na stránku
+  52 bytů za řádek
+
+100000 řádek
+----------------------- = 633 strĂĄnek (zaokrouhleno nahoru)
+   158 řádek na stránce
+
+633 datových strånek * 8192 bytů na kaŞdou strånku = 5,185,536 bytů (5.2 MB)
+

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 zabĂ­rajĂ­ jen velmi mĂĄlo +diskovĂŠho prostoru. +

+

4.6) 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ž použití indexu 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, jelikož je výsledkem pouze malá část tabulky. +

+

Pokud si myslíte, že optimizer mylně zvolil sekvenční prohledávání +tabulky, použijte příkaz SET enable_seqscan TO 'off' a zkuste zda je +prohledávání s indexem rychlejší. +

+

Při vyhledávání na základě vzoru jako je např. operátor LIKE nebo ~ se +indexy použijí pouze za určitých skutečností: +

+ +

4.7) Jak zjistĂ­m, jak se vyhodnocuje mĹŻj dotaz?

+

Podívejte se do nápovědy k příkazu EXPLAIN. +

+

4.8) Jak pouŞít case-(in)sensitive regulårní výraz? Jak pouŞít index pro case insensitive hledåní?

+

Vyhledávání prostřednictvím regulárních vzorů zajišťuje operátor ~, který je case-sensitive. Jeho case-insensitive varianta je operátor ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE. +

+

Case-insensitive vyhledání se řeší: +

+
+SELECT *
+FROM tab
+WHERE lower(col) = 'abc';
+

Tento dotaz nepouŞije standardní index. Musíte pouŞít tzv. funkcionålní index: +

+
+CREATE INDEX tabindex ON tab (lower(col));
+

Pokud index vytvoříme jako unikátní, tak můžeme ukládat řetězce obsahující malá i velká písmena, ale nikoliv řetězce, které se od sebe odlišují jen v malých a velkých písmenech. K zajištění zápisu řetězce obsahující pouze malá nebo pouze velká písmena použijte CHECK kontroly nebo triggery. +

+

4.9) Jak v dotazu detekovat, že položka je NULL? Jak bezpečně spojit dva řetězce, pokud mohou obsahovat NULL? Lze třídit podle toho, jestli je položka NULL nebo ne?

+

Pokud chcete testovat hodnotu NULL pouĹžijte operĂĄtor IS: +

+
+   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í?

- -
- -

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.

- - + WHERE col IS NULL; +

K spojení řetězců, které mohou obsahovat hodnotu NULL, používejte funkci COALESCE(), např.: +

+
+   SELECT COALESCE(col1, '') || COALESCE(col2, '')
+   FROM tab
+

Pokud chcete třídit podle hodnoty NULL, použijte výraz IS NULL nebo IS NOT NULL v klauzuli ORDER. Hodnota pravda má přednost před hodnotou false a tedy pokud použijete: +

+
+   SELECT *
+   FROM tab
+   ORDER BY (col IS NOT NULL)
+

tak záznamy s NULL budou na začátku setříděných dat. +

+

4.10) JakÊ jsou rozdíly mezi různými znakovými typy?

+ + + + + + + +
Typ InternĂ­ nĂĄzev PoznĂĄmky +
VARCHAR(n) varchar n určuje maximální délku +
CHAR(n) bpchar řetězec je do dané délky rozšířen mezerami +
TEXT text bez omezenĂ­ dĂŠlky +
BYTEA bytea pole bytĹŻ nespecifikovanĂŠ dĂŠlky +
"char" char jeden znak +
+

Na interní názvy můžete narazit v systémovém katalogu nebo v některých chybových hlášeních. +

+

Čtyři první typy jsou tzv. varlena typy (první čtyři byty na disku jsou obsahují délku, ostatní obsahují vlastní data). Skutečně obsazený prostor je tedy o něco málo větší než deklarovaná velikost. Na druhou stranu, delší řetězce jsou komprimovány, takže obsazený prostor na disku může být menší než se čeká. +

+

VARCHAR(n) je vhodný pro ukládání různě dlouhých řetězců u kterých známe délkové omezení, TEXT pro řetězce bez omezení délky (maximum je jeden gigabyte). +

+

CHAR(n) se používá pro uložení stejně dlouhých řetězců. CHAR(n) doplní mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot. Všechny zmíněné typy mají podobné výkonové charakteristiky. +

+

4.11.1) Jak vytvořit serial/auto-increment položku?

+

V PostgreSQL můžete použít datový typ SERIAL. Jeho použitím se automaticky vytvoří sekvence. +Například: +

+
+CREATE TABLE person (
+  id   SERIAL,
+  name TEXT
+);
+

je automaticky transformovĂĄno na: +

+
+CREATE SEQUENCE person_id_seq;
+CREATE TABLE person (
+  id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
+  name TEXT
+);
+

Podrobnější informace najdete v manuálu v popisu příkazu create_sequence. +

+

4.11.2) Jak získat hodnotu SERIAL po vložení řádku?

+

Nejjednoduťťím způsob, jak získat vygenerovanou hodnotu typu SERIAL, je vyuŞít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadå takto: +

+
+INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
+

Také můžete použít funkci nextvall() a její výsledek použít v příkazu INSERT, nebo zavolat currval() po provedení příkazu INSERT. +

+

4.11.3) Nezpůsobí currval() a nextval() problémy ve více uživatelském prostředí?

+

Ne, currval vracĂ­ vĹždy hodnotu, kterĂĄ byla vygenerovĂĄna pro vĂĄs. +

+

4.11.4) Proč není vygenerované číslo použito při přerušení transakce?Proč vznikají díry v číslování prostřednictvím sekvence nebo typu SERIAL?

+

Poté co sekvence vygeneruje nové číslo, tak se nedochází k zamčení sekvence a nečeká se na úspěšné nebo neúspěšné dokončení transakce. Odvoláním transakce, která si vyžádala čísla sekvence se tato čísla nenávratně ztratí. +

+

4.12) Co to je OID? Co je to CTID?

+

V případě, že tabulku nezaložíme s atributem WITHOUT OIDS, tak má každý řádek unikátní identifikační číslo OID. Toto číslo je 4 bajtové celé číslo, které je jedinečné v celé instalaci. Přeteče po 4 miliardách řádků. PostgreSQL používá OIDs jako interní linky v interních systémových tabulkách. +

+

K získání unikátního čísla v nesystémových tabulkách je vhodnější použití typu SERIAL než OID, jelikož sekvence SERIAL se používá pouze pro jednu tabulku a je tudíž méně náchylná na přetečení. Pokud byste se toho obávali, použijte typ SERIAL8. +

+

CTID se používá k identifikaci konkrétního fyzického řádku. CTID se mění pokud je řádek modifikován nebo znovu načten. Používají ho indexy jako adresaci fyzických řádků. +

+

4.13) Co znamenĂĄ chybovĂŠ hlĂĄĹĄenĂ­ "ERROR: Memory exhausted in AllocSetAlloc()"?

+

Pravděpodobně jste vyčerpal dostupnou virtuální paměť, nebo tvůj kernel +má příliš nízké limity u určitých zdrojů. Před startem PostgreSQL vyzkoušejte: +

+
+ulimit -d 262144
+limit datasize 256m
+

Možná, že se projde pouze jeden příkaz - záleží to na vašem shellu. +Měl by zvednout limity datových segmentů vašich procesů na dostatečně velkou +hodnotu a snad umožnit dokončení dotazu. Změna limitů se bude aplikovat +pouze na aktuální proces a na všechny nově vytvořené procesy. Jestliže máte +problém s SQL klientem, protože vám server vrátil příliš dat, zkuste to +před startem klienta. +

+

4.14) Jak zjistím, kterou verzi PostgreSQL pouŞívåm?

+

V psql napiĹĄte: +

+
+SELECT version();
+
+

4.15) Jak vytvořit sloupec, který bude implicitně obsahovat aktuální čas?

+

PouĹžijte CURRENT_TIMESTAMP: +

+
+CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
+
+

4.16) Jak provést vnější spojení (outer join)?

+

PostgreSQL podporuje standardní SQL syntaxi pro vnější spojení. Zde jsou +dva příklady: +

+
+SELECT *
+FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
+

nebo +

+
+SELECT *
+FROM t1 LEFT OUTER JOIN t2 USING (col);
+

Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a ještě vrátí všechny nespárované řádky t2 (ty, které nedohledá v t2). RIGHT JOIN by připojil všechny nespárované řádky z t2. FULL JOIN vrátí všechny spárované řádky i všechny zbývající řádky z obou tabulek. Klíčové slovo OUTER je volitelné. Běžná operace JOIN se také označuje jako vnitřní spojení. +

+

4.17) Jak provést dotaz napříč několika databázemi?

+

Neexistuje žádný způsob, jak se v dotazu odkazovat na tabulky z jiné než aktuální databáze. A to protože má systémové tabulky uložené nezávisle v každé databázi a není tak úplně zřejmé, jak by se dotaz provedený napříč databázemi měl chovat. +

+

Jeden z doplňků dblink umožňuje dotaz nad několika tabulkami pomocí funkcí. Druhý způsob je simultální připojení klienta ke všem relevantním databázím a sloučení výsledku na straně klienta. +

+

4.18) Může funkce vrátit více řádků nebo sloupců?

+

Jde to jednoduĹĄe pomocĂ­ set-returning funkce. VĂ­ce na +http://www.postgresql.org/docs/techdocs.17. +

+

4.19) Co je příčinou chyby "relation with OID xxxxx does not exist"?

+

Nechtěným vedlejším efektem kešování SQL dotazů v PL/pgSQL funkci je problém s neplatnými odkazy na dočasné tabulky, které byly od prvního spuštění funkce zrušeny a znovu vytvořeny před dalším spuštěním PL/pgSQL funkce. Řešením je použít příkaz EXECUTE a to proto, že prováděcí plán SQL příkazu spouštěného příkazem EXECUTE se vytváří pokaždé znovu (neukládá se do cache). +

+

Tento problém by se neměl vyskytovat u PostgreSQL verze 8.3 a vyšších verzích. +

+

4.20) JakĂŠ jsou moĹžnosti replikace databĂĄzĂ­?

+

Replikaci databáze umožňuje několik technoligií. Každá má určité výhody a nevýhody. +

+

Master/Slave replikaci podporuje jeden hlavní server, který přijímá požadavky na zápis a čtení, a několik podřízených serverů, které umožňují pouze čtení (SELECT). Nejrozšířenějším volně dostupným řešením tohoto typu je Slony-I. +

+

Replikace typu Multi-master podporuje existenci několika serverů s povoleným zápisem na více replikovaných serverech. Toto řešení zvyšuje zátěž serverů, protože je nutná synchronizace serverů. Nejrozšířenějším volně dostupným řešením je PGCluster. +

+

Ještě existuje několik komerčních a hardware řešení replikací podporujících různé modely replikace. +

+

4.21) Proč v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proč jsou velká písmena v názvech automaticky převedena na malá písmena?

+

Nejčastějším důvodem nerozpoznání názvu objektu bylo použití vložení názvu sloupce nebo tabulky mezi uvozovky při zakládání tabulky. Pokud se název zapíše mezi uvozovky, pak je case sensitive, a v důsledku toho je nutné názvy těchto sloupců nebo tabulek v SQL příkazech také vkládat mezi uvozovky (pokud obsahují velká písmena). Některé programy, jako je například pgAdmin, automaticky používají uvozovky. Takže pokud chcete, aby systém identifikoval identifikátor, musíte: +

+ + + -- cgit v1.2.3