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') 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 @@ - -
- - - - - - -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.
-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.
- -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.
- -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.
- -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.
- -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.
- -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:
-- --
Poslední verze PostgreSQL je 7.4.3. Plánujeme uvolnit významnou verzi - každých šest až osm měsíců.
- -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.
- -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).
- -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.
- -Nemá, můžeme pracovat s datumy po roce 2000 našeho letopočtu i před - rokem 2000 př.n.l.
- -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.
- -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.
- -Existuje několik hledisek jak porovnávat software: vlastnosti, výkon, - spolehlivost, podpora a cena.
-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.
- -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.
- -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.
- -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.
- -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.
-Použijte volbu --prefix při spuštění configure.
- -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ů.
- -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.
- -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.
- -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.
- -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.
- -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.
- -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.
- -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ářů.
- -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.
- -Popis najdete v manuálové stránce DECLARE
- -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; --
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.
- -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. - -
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.
- -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: +
+
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. +
+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. +
+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: +
+Prostudujte si Developer's FAQ. +
+Software mĹŻĹžeme porovnĂĄvat z nÄkolika rĹŻznĂ˝ch pohledĹŻ: vlastnosti, vĂ˝kon, spolehlivost, podpora a cena. +
+ +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 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. +
+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. +
+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.) +
+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). +
+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. +
+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. +
+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). +
+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. +
+PĹi spouĹĄtÄnĂ configure nastavte parametr --prefix +
+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. +
+VĂ˝kon systĂŠmu mĹŻĹžete ovlivnit ve tĹech oblastech: +
+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. +
+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/. +
+NastavenĂm log_* promÄnnĂ˝ch v konfiguraci serveru si vynutĂte logovĂĄnĂ dotazĹŻ a procesnĂch statistik, kterĂŠ VĂĄm mohou pomoci pĹi ladÄnĂ a optimalizaci vĂ˝konu. +
+PĹ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. +
+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. +
+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. +
+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; ++
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. +
+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. +
+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. +
+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.
- -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.
- -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í:
-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.
- -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.
- -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)); --
Určíte pomocí IS NULL nebo IS NOT NULL
- --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.
- -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).
-
- 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().
- -Nikoliv, currval() vrací hodnotu naposledy generovanou ve vašem - backendu, a ta tudíž není společná všem uživatelům.
- -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í.
- -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).
- -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.
- -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.
- -V psql spusťte SELECT version();
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 nastavitset
- auto_commit off.
-
- Použijte CURRENT_TIMESTAMP:
-
-
-CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-
-
- 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. +
+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Ă: +
+PodĂvejte se do nĂĄpovÄdy k pĹĂkazu EXPLAIN. +
+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. +
+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.
- -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; -- -
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í.
- -V PostgreSQL 7.3 můžete jednoduše vracet více řádků nebo sloupců z - funkce, viz: - http://techdocs.postgresql.org/guides/SetReturningFunctions.
- -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.
- -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.
- -Problém může být způsoben mnoha okolnostmi. Vyzkoušejte si svoji funkci - nejdříve v nějaké jednoduché aplikaci.
- -Pošlete své rozšíření do konference pgsql-hackers, a ono pak možná - skončí v podadresáři contrib.
- -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.
- -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. +
+| 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. +
+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. +
+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. +
+Ne, currval vracĂ vĹždy hodnotu, kterĂĄ byla vygenerovĂĄna pro vĂĄs. +
+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Ă. +
+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ĹŻ. +
+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. +
+V psql napiĹĄte: +
++SELECT version(); ++
PouĹžijte CURRENT_TIMESTAMP: +
++CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ++
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Ă. +
+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. +
+Jde to jednoduĹĄe pomocĂ set-returning funkce. VĂce na +http://www.postgresql.org/docs/techdocs.17. +
+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. +
+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. +
+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: +
+