diff options
Diffstat (limited to 'doc/FAQ_czech')
-rw-r--r-- | doc/FAQ_czech | 849 |
1 files changed, 0 insertions, 849 deletions
diff --git a/doc/FAQ_czech b/doc/FAQ_czech deleted file mode 100644 index 99120e60606..00000000000 --- a/doc/FAQ_czech +++ /dev/null @@ -1,849 +0,0 @@ - - Frequently Asked Questions - - Casto kladené dotazy (FAQ) PostgreSQL - - Poslední aktualizace: 29. ríjna 2007 (aktualizováno pro PostgreSQL - 8.3) - - Soucasný správce: Bruce Momjian (bruce@momjian.us) - - Prelozil: Pavel Stehule (pavel.stehule@gmail.com) - - Nejaktuálnejsí verzi tohoto dokumentu naleznete na adrese - http://www.postgresql.org/files/documentation/faqs/FAQ.html - - Odpovedi na otázky vázané na konkrétní platformy naleznete na adrese - http://www.postgresql.org/docs/faq/. - _________________________________________________________________ - - Obecné otázky - - 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL? - 1.2) Kdo rídí vývoj PostgreSQL? - 1.3) Pod jakou licencí je PostgreSQL? - 1.4) Na kterých platformách lze provozovat PostgreSQL? - 1.5) Kde mohu získat PostgreSQL? - 1.6) Jaká je poslední verze? - 1.7) Kde mohu získat podporu? - 1.8) Jak a kam hlásit chyby? - 1.9) Kde najdu informace o známých chybách nebo nepodporovaných - vlastnostech? - 1.10) Jaká je dostupná dokumentace? - 1.11) Jak se mohu naucit SQL? - 1.12) Jak se mohu pripojit k týmu vývojáru? - 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi? - 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v - nekterých zemích? - - Dotazy na klientská rozhraní - - 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL? - 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web? - 2.3) Existuje grafické rozhraní pro PostgreSQL? - - Administrativní dotazy - - 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql? - 3.2) Jak nastavit pravidla pro prístup z jiných stanic? - 3.3) Jak vyladit databázi na vyssí výkon? - 3.4) Jaké mám ladící prostredky? - 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit? - 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu - PostgreSQL? - 3.7) Jaký hardware bych mel pouzívat? - - Provozní dotazy - - 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek? - 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných - uzivatelu. Mohu videt dotazy, které pouzívá psql pro zobrazení techto - informací? - 4.3) Jak zmenit datový typ sloupce? - 4.4) Jaká je maximální velikost rádku, tabulky a databáze? - 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního - textového souboru? - 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc? - 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz? - 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index - pro case insensitive hledání? - 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit - dva retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli - je polozka NULL nebo ne? - 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy? - 4.11.1) Jak vytvorit serial/auto-increment polozku? - 4.11.2) Jak získat hodnotu SERIAL po vlození rádku? - 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském - prostredí? - 4.11.4) Proc není vygenerované císlo pouzito pri prerusení - transakce?Proc vznikají díry v císlování prostrednictvím sekvence nebo - typu SERIAL? - 4.12) Co to je OID? Co je to CTID? - 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in - AllocSetAlloc()"? - 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám? - 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální - cas? - 4.16) Jak provést vnejsí spojení (outer join)? - 4.17) Jak provést dotaz napríc nekolika databázemi? - 4.18) Muze funkce vrátit více rádku nebo sloupcu? - 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"? - 4.20) Jaké jsou moznosti replikace databází? - 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? - Proc jsou velká písmena v názvech automaticky prevedena na malá - písmena? - _________________________________________________________________ - - Obecné otázky - - 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL? - - Výslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres . - V rade jazyku je slovo PostgreSQL obtízne vyslovitelný, proto se v - hovoru casto pouzívá zjednodusená forma názvu. Pro ty, kterí by si - rádi poslechli výslovnost, je k dispozici audiozáznam v MP3 formátu. - - PostgreSQL je relacní databáze s nekterými objektovými rysy, která má - moznosti tradicních komercních databázových systému s nekolika - rozsíreními, které lze najít v DBMS systémech prístí generace. - Pouzívání PostgreSQL není omezené a veskeré zdrojové kódy jsou volne - dostupné. - - Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojáru - navzájem komunikujících prostrednictvím internetu. Tento projekt není - rízen zádnou obchodní organizací. Pokud se chcete pridat k projektu, - prectete si vývojárské FAQ na adrese - http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html . - - 1.2) Kdo rídí vývoj PostgreSQL? - - Pokud budete hledat organizaci rídící vývoj PostgreSQL, budete - zklamáni. Nic takového neexistuje. Existují pouze "core" a CVS skupiny - uzivatelu, ale ty existují více z administrátorských duvodu nez z - organizacních. Projekt je smerován komunitou vývojáru a uzivatelu, ke - které se kdokoliv muze pripojit. Jediné co potrebuje, je prihlásit se - do elektronické konference. Více ve vývojárském FAQ. - - 1.3) Pod jakou licencí je PostgreSQL? - - PostgreSQL je predmetem následujících autorských práv: - - Dílcí Copyright (c) 1996-2009, PostgreSQL Global Development Group - Dílcí Copyright (c) 1994-6, Regents of the University of California - - Udeluje se oprávnení k uzití, rozmnozování, provádení úprav a - rozsirování tohoto softwaru a dokumentace k nemu, pro jakékoli úcely, - bez licencního poplatku a bez písemné licencní smlouvy, za podmínky, - ze na vsech jeho kopiích je uvedeno oznámení o výse uvedených právech, - jakoz i obsah tohoto a dvou následujících odstavcu. - - THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ZÁDNÉM - PRÍPADE ODPOVEDNA ZÁDNÉ TRETÍ OSOBE ZA PRÍMOU, NEPRÍMOU, ZVLÁSTNÍ, - NAHODILOU NEBO VÝSLEDNOU SKODU, VCETNE USLÉHO ZISKU, ZPUSOBENOU UZITÍM - TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRÍPADE, ZE THE - UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOZNOSTI VZNIKU TAKOVÉ - SKODY. - - THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO - NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÝROBKU KE - SPECIFICKÝM ÚCELUM. NÍZE UVEDENÝ SOFTWARE JE POSKYTNUT "JAK STOJÍ A - LEZÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO - ÚDRZBU, PODPORU, AKTUALIZACI, VYLEPSENÍ NEBO MODIFIKACI. - - Výse uvedené je BSD licence, bezná licence otevreného zdroje. Není zde - zádné omezení ohledne uzití kódu zdroje. Jsme s tím spokojeni a nemáme - v úmyslu na této skutecnosti cokoli menit. - - 1.4) Na kterých platformách lze provozovat PostgreSQL? - - Strucne receno, PostgreSQL bezí na vsech moderních unixových - systémech. Seznam tech, u kterých probehlo testování, naleznete v - instalacních instrukcích. - - PostreSQL také bezí nativne na vsech Microsof Windows systémech - odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP - a Windows2003. Instalacní balícek naleznete na adrese - http://pgfoundry.org/projects/pginstaller. Na starsích systémech s - jeste MS-DOS jádrem lze spustit PostgreSQL s emulacním programem - Cygwin. - - Dále existuje port pro Novell Netware 6 port na adrese - http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese - http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre - SQL&stype=all&sort=type&dir=%2F . - - 1.5) Kde mohu získat PostgreSQL? - - Pomocí webového klienta z adresy http://www.postgresql.org/ftp/ nebo - klienta ftp z adresy ftp://ftp.postgresql.org/pub/. - - 1.6) Jaká je poslední verze? - - Nejnovejsí verzí PostgreSQL je verze 8.2.5 - - V plánu je uvolnovat kazdorocne jednu velkou verzi a kazdých nekolik - mesícu malé verze. - - 1.7) Kde mohu získat podporu? - - Nejcastejsí forma podpory uzivatelum PostgreSQL komunitou je - prostrednictvím e-mailu. Na nasem webovém serveru naleznete odkaz na - stránky,kde se muzete prihlásit do elektronické konference. Pro - zacátek jsou doporucené konference general nebo bugs. - - Dalsí cestou je IRC kanál #postgresql na Freenode (irc.freenode.net). - K pripojení pouzijte Unixový príkaz irc -x '#postgresql' "$USER" - irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti - existuje jeste spanelská (#postgresql-es) a francouzská - (#postgresqlfr) verze. Dalsí PostgreSQL kanál naleznete na EFNet. - - Seznam spolecností poskytující komercní podporu naleznete na adrese - http://techdocs.postgresql.org/companies.php. - - 1.8) Jak a kam hlásit chyby? - - Vyplnte formulár na adrese - http://www.postgresql.org/support/submitbug. Na nasem ftp serveru - ftp://ftp.postgresql.org/pub/ si overte, ze pouzíváte aktuální verzi - PostreSQL. - - Chyby reportované prostrednictvím chybového formuláre nebo zasláním - mailu do PostgreSQL konference obvykle generuje následující odezvu: - * Nejedná se o chybu, a proc - * Jedná se o známou chybu, která je jiz v seznamu úkolu TODO - * Tato chyba byla opravena v aktuální verzi - * Tato chyba byla jiz opravena ve verzi, která zatím nebyla - oficiálne uvolnena - * Pozadavek na dalsí doplnující informace: - + Operacní systém - + Verze PostgreSQL - + Test reprodukující chybu - + Ladící informace - + Backtrace výstup debuggeru - * Jedná se o zatím nezjistenou chybu, pak muzete cekat - + Záplatu odstranující chybu, která bude vlozena do dalsí velké - nebo malé verze - + Informaci, ze se jedná o chybu, kterou nelze okamzite resit a - je proto pridána do TODO - - 1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech? - - PostgreSQL podporuje rozsírenou podmnozinu SQL:2003. V nasem TODO - naleznete seznam známých chyb, chybejících vlastností, a plány do - budoucna. - - Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle: - * Pozadavek je jiz v TODO - * Pozadovaná funkce není chtená protoze - + Duplikuje jiz existující funkci, která respektuje SQL - standard - + Implementací funkce by se prílis zkomplikoval kód bez - relevantního prínosu - + Funkce by mohla být nebezpecná nebo nespolehlivá - * Pozadavek je pridán do TODO - - PostgreSQL nepozívá systém pro sledování chyb, protoze jsme zjistili, - ze je efektivnejsí prímo reagovat na maily a udrzovat aktuální TODO. V - praxi je snaha o co nejrychlejsí resení chyb, a chyby, které by se - mohly projevit u mnoha uzivatelu jsou opravovány velice rychle. Jediné - místo, kde lze dohledat vsechny zmeny, rozsírení a opravy v PostgreSQL - je CVS log. Poznámky k verzi "Release notes" nezachycují vsechny - zmeny, k nemz doslo. - - 1.10) Jaká je dostupná dokumentace? - - PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál, - manuálové stránky a testovací príklady. Podívejte se do adresáre /doc. - Manuál je prístupný online na http://www.postgresql.org/docs. - - K dispozici jsou zdarma dve online knihy na adresách - http://www.postgresql.org/docs/books/awbook.html a - http://www.commandprompt.com/ppbook/. Dalsí literaturu lze zakoupit. - Nejpopulárnejsí je od Kerryho Douglase. Seznam dostupné literatury je - na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je - kolekce technicky orientovaných clánku tematicky spojených s - PostgreSQL na adrese http://techdocs.postgresql.org/. - - Rádkový klient psql má \d príkazy pro zobrazení informací o typech, - operátorech, funkcích, agregacních funkcí, atd. Pouzijte \? pro - zobrazení dostupných príkazu. - - Dalsí dokumentaci najdete na nasem webu. - - 1.11) Jak se mohu naucit SQL? - - Podívejte se do výse uvedené dokumentace. Dalsí online knihou je - "Teach Yourself SQL in 21 Days, Second Edition" na adrese - http://members.tripod.com/er4ebus/sql/index.htm. Mnoho nasich - uzivatelu doporucuje knihu The Practical SQL Handbook, Bowman, Judith - S., et al., Addison-Wesley. Dalsí The Complete Reference SQL, Groff et - al., McGraw-Hill. - - Dalsí online tutoriály jsou dostupné na adresách: - * http://www.intermedia.net/support/sql/sqltut.shtm - * http://sqlcourse.com - * http://www.w3schools.com/sql/default.asp - * http://mysite.verizon.net/Graeme_Birchall/id1.html - - 1.12) Jak se mohu pripojit k týmu vývojáru? - - Prostudujte si Developer's FAQ. - - 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi? - - Software muzeme porovnávat z nekolika ruzných pohledu: vlastnosti, - výkon, spolehlivost, podpora a cena. - - Vlastnosti - - PostgreSQL nabízí vetsinu funkcí funkcionality velkých komercních DBMS - systému jako jsou: transakce, vnorené dotazy, spouste, referencní - integrita a sofistikovaný systém zamykání. Poskytujeme urcité funkce, - které ostatní systémy bezne nepodporují. Napr. uzivatelem definované - typy, dedicnost, pravidla (rules), a MVCC architekturu. - - Výkon - - Výkon PostgreSQL je srovnatelný s ostatními komercními nebo Open - Source databázemi. V nekterých prípadech je rychlejsí, jindy - pomalejsí. Nás výkon je obvykle +/-10% vuci ostatním databázím. - - Spolehlivost - - Uvedomujeme si, ze databáze musí být stoprocentne spolehlivá, jinak je - nepouzitelná. Snazíme se, aby kazdá verze byla dobre otestována a - obsahovala minimum chyb. Kazdá verze je minimálne nekolik mesícu v - beta testovacím rezimu. Do produkcního rezimu se dostane, az kdyz - nedochází k dalsím zmenám nebo opravám. Veríme, ze jsem více nez - srovnatelní s ostatními databázemi v této oblasti. - - Podpora - - Na nasich internetových konferencích se setkává velká skupina vývojáru - a uzivatelu pri resení vyskytujících se problému. Nase internetové - konference umoznují kontakt velké skupiny vývojáru a uzivatelu. - Nemuzeme garantovat opravu chyby, ale komercní DBMSs také vzdy - negarantují resení problému. Veríme ale, ze díky prímému kontaktu na - vývojáre, nasi uzivatelskou komunitu, manuálum, a dostupným zdrojovým - kódum máme lepsí podporu nez ostatní DBMSs. Pro ty, kterí preferují - komercní "per-incident" podporu, existuje spolecností, kterí ji - nabízejí (FAQ sekce 1.7.) - - Cena - - PostgreSQL lze pouzívat bezplatne (a to i pro komercní pouzití). Také - muzete neomezene pouzívat nás kód ve svých produktech s výjimkami - specifikovanými v nasí licenci (prebíráme BSD licenci). - - 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v nekterých - zemích? - - Pocínaje verzí 8.0.[4+] podporuje PostgreSQL letní cas také pro USA. - Podpora letního casu (daylight saving time) pro Kanadu a Západní - Austrálii je obsazena ve verzích 8.0.[10+] a 8.1.[6+] a vsech - následujících verzích. Starsí verze pouzívaly systémovou databázi - casových zón obsahující, krome jiného, informaci o tom, zda se pro - danou casovou zónu rozlisuje mezi letním a zimním casem. - _________________________________________________________________ - - Dotazy na klientská rozhraní - - 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL? - - PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C. - Vsechna dalsí rozhraní predstavují nezávislé projekty, které je treba - stáhnout z internetu samostatne. Osamostatnení techto projektu - umoznuje nezávislost vývojových týmu a moznost vydávat nové verze bez - ohledu na vydání nové verze PostgreSQL. - - Nekteré programovací jazyky jako je napr. PHP obsahují rozhraní pro - PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho - dalsích jsou dostupné na adrese: http://gborg.postgresql.org v sekci - Drivers/Interfaces. - - 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web? - - Dobrým úvodem do problematiky databází v prostredí webových stránek - muze být web http://www.webreview.com. - - PHP (http://www.php.net) je vynikajícím rozhraním pro tvorbu webu. - - Pro slozitejsí úlohy se casto pouzí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 rada grafických nástroju podporujících PostgreSQL a to - od komercních nebo open source vývojáru. Podrobný seznam naleznete na - adrese http://www.postgresql.org/docs/techdocs.54. - _________________________________________________________________ - - Administrativní dotazy - - 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql? - - Pri spoustení configure nastavte parametr --prefix - - 3.2) Jak nastavit pravidla pro prístup z jiných stanic? - - Ve výchozí konfiguraci, PostgreSQL umoznuje pouze pripojení z - lokálního uzivatele prostrednictvím Unix domain sockets nebo TCP/IP - spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a - povolení adresy v souboru $PGDATA/pg_hba.conf se nelze pripojit k - PostgreSQL z ostatních stanic. Zmena výse zmínených parametru vyzaduje - restart databázového serveru. - - 3.3) Jak vyladit databázi na vyssí výkon? - - Výkon systému muzete ovlivnit ve trech oblastech: - - Zmeny dotazu - - * Pouzitím indexu vcetne cástecných a funkcionálních - * Pouzitím COPY místo opakovaných INSERTu - * Sloucením mnoha SQL príkazu do jedné transakce snízením rezie na - commit - * Pouzíváním CLUSTERU, pokud nacítáte vetsí pocet rádek podle indexu - * Pouzitím klauzule LIMIT v poddotazech - * Pouzitím predpripravených dotazu - * Pouzíváním ANALYZE. Tento príkaz aktualizuje statistiky, které se - pouzívají pri optimalizaci dotazu - * Pravidelné pouzití VACUUM nebo pouzívání pg_autovacuum - * Odstranením indexu pred rozsáhlými zmenami v datech - - Konfigurace serveru - - Urcité parametry v souboru postgresql.conf mají vliv na výkon serveru. - Detaily naleznete v prírucce Administrátora v Server Run-time - Environment/Run-time Configuration. Dalsí komentáre naleznete v - http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht - ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html. - - Výber hardware - - Vliv hardware na výkon serveru je popsán v dokumentech - http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html - a http://www.powerpostgresql.com/PerfList/. - - 3.4) Jaké mám ladící prostredky? - - Nastavením log_* promenných v konfiguraci serveru si vynutíte logování - dotazu a procesních statistik, které Vám mohou pomoci pri ladení a - optimalizaci výkonu. - - 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit? - - Prekrocil jste výchozí limit, který je 100 soucasne pripojených - uzivatelu. V konfiguraci serveru v postgresql.conf tuto hodnotu muzete - zvetsit zmenou hodnoty max_connection. Nezapomente restartovat server. - - 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu PostgreSQL? - - Zpusob císlování je popsán v dokumentaci na - http://www.postgresql.org/support/versioning. Instrukce k provedení - migrace na vyssí verzi jsou taktéz v dokumentaci na adrese - http://www.postgresql.org/docs/current/static/install-upgrading.html. - - 3.7) Jaký hardware bych mel pouzívat? - - Jelikoz PC jsou vetsinou kompatibilní, lidé mají tendence verit, ze - vsechna PC jsou stejne kvalitní. Coz není pravda. Pameti ECC, SCSI a - kvalitní základní desky jsou mnohem spolehlivejsí a výkonnejsí nez - lacinejsí hardware. PostgreSQL pobezí na vetsine hardwaru, nicméne - pokud je pro Vás spolehlivost a výkon systému dulezitá, je dobré - venovat cas nalezení vhodné hardwarové konfigurace. Na nasich - elektronických konferencích muzete diskutovat o vhodných konfiguracích - a znackách. - _________________________________________________________________ - - Provozní dotazy - - 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek? - - Pokud potrebujete pouze nekolik rádku a pokud víte kolik, pouzijte - SELECT LIMIT. Pokud bude mozné pouzít index shodující se s ORDER BY, - je mozné, ze se nebude provádet celý dotaz. Pokud neznáte pocet - záznamu, pouzijte kurzor a príkaz FETCH. - - Pro výber náhodného rádku pouzijte príkaz ve tvaru: -SELECT col -FROM tab -ORDER BY random() -LIMIT 1; - - 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných uzivatelu. - Mohu videt dotazy, které pouzívá psql pro zobrazení techto informací? - - V psql príkazem \dt získáte seznam tabulek. Úplný seznam príkazu psql - získáte príkazem \?. Alternativne si muzete prostudovat zdrojový kód - psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL - príkazy, které jsou generovány pro získání výstupu psql "backslash" - príkazu. Také muzete nastartovat psql s parametrem -E, který zpusobí - zobrazení vsech SQL príkazu, které se odesílají na server. PostgreSQL - také podporuje SQL standard INFORMACNÍ SCHÉMATA (standardní systémové - tabulky). Klasickým dotazem do systémových tabulek získáte pozadované - informace o strukture databáze. - - Systémové tabulky PostgreSQL (mimo rámec SQL standardu) pouzívají - prefix pg_. Pro zjistení struktury databáze je muzete pouzít také, i - kdyz preferovány jsou dotazy do informacního schématu. - - Seznam vsech databází získáte príkazem psql -l - - Dalsí inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. - Obsahuje ilustracní SELECTy potrebné k získání informací z systémových - tabulek databáze. - - 4.3) Jak zmenit datový typ sloupce? - - Ve verzích 8.0 a pozdejsích jednoduse: -ALTER TABLE ALTER COLUMN TYPE - - V starsích verzích: -BEGIN; -ALTER TABLE tab ADD COLUMN new_col new_data_type; -UPDATE tab SET new_col = CAST(old_col AS new_data_type); -ALTER TABLE tab DROP COLUMN old_col; -COMMIT; - - Po zmene spustte príkaz VACUUM FULL, aby doslo k uvolnení diskového - prostoru pouzitého v tu chvíli jiz neplatnými záznamy. - - 4.4) Jaká je maximální velikost rádku, tabulky a databáze? - - PostgreSQL má tato omezení: - - Maximální velikost databáze: neomezena (existují 32TB db) - Maximální velikost tabulky: 32 TB - Maximální velikost rádky: 480GB - Maximální velikost polozky 1 GB - Maximální pocet rádku v tabulce: neomezeno - Maximální pocet sloupcu v tabulce: 250-1600 podle typu - Maximální pocet indexu na tabulce: neomezeno - - Ve skutecnosti nic není neomezeno, limitem bývá vzdy dostupná disková - pamet nebo velikost operacní pameti. Pokud máte nekterou z techto - hodnot neobvykle velkou, muze dojít ke snízení výkonu. - - Maximální velikost tabulky je 32 TB a nevyzaduje podporu velkých - souboru operacním systémem. Velké tabulky se ukládají do nekolika 1 GB - souboru takze limity souborového systému nejsou podstatné. - - Maximální velikost tabulky a maximální pocet sloupcu muzeme - zectyrnásobit nastavením velikosti bloku na 32K. - - Indexy jsou povolené pouze na sloupcích jejichz délka je mensí nez - 2000 znaku. Pokud tuto délku prekrocíme a index potrebujeme pro - zajistení jednoznacnosti, je vhodnejsí pouzít funkcionální index nad - MD5 funkcí nebo fulltextový index. - - 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního textového - souboru? - - PostgreSQL vyzaduje az petinásobek diskového prostoru k ulození dat z - textového souboru. - - Napríklad, uvazujme soubor se 100 tisíci rádky obsahující na kazdé - rádce celé císlo a textový popis. Text je v prumerne dvacet bytu - dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze - obsahující odpovídající data bude zhruba 5.2 MB. - 24 bytu: hlavicka rádku (priblizne) - 24 bytu: jedna celocíselná polozka a jedna textová - + 4 byty: ukazatel na stránku k entici - ------------------------------------------------------ - 52 bytu na rádek - - Velikost datové stránky PostgreSQL je 8192 bytu (8KB) - 8192 bytu na stránce ----------------------- = 158 rádek na stránku - 52 bytu za rádek - -100000 rádek ------------------------ = 633 stránek (zaokrouhleno nahoru) - 158 rádek na stránce - -633 datových stránek * 8192 bytu na kazdou stránku = 5,185,536 bytu (5.2 MB) - - Indexy nemají tak velkou rezii, ale mohou být také velké, protoze - obsahují indexovaná data. - - Hodnoty NULL jsou ulozeny v bitmapách, takze zabírají jen velmi málo - diskového prostoru. - - 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc? - - Kazdý dotaz nemusí nutne pouzít existující indexy. Index se pouzije - tehdy, kdyz je tabulka vetsí nez urcitá minimální velikost, a dotaz - vybírá pouze procentuálne malou cást rádku tabulky. To proto, ze - náhodný prístup k disku daný ctením indexu muze být pomalejsí nez - lineární ctení tabulky nebo sekvencní ctení. - - PostgreSQL rozhoduje o pouzití indexu na základe statistiky prístupu k - tabulce. Tyto statistiky se shromazdují príkazy VACUUM ANALYZE nebo - ANALYZE. Díky statistikám má optimizer informaci o poctu rádek v - tabulce a muze lépe rozhodnout o pouzití indexu. Statistiky se uplatní - pri urcení optimálního poradí a metody spojení tabulek. Statistiky by - se meli aktualizovat opakovane, tak jak se mení obsah tabulek. - - Indexy nejsou obycejne pouzity pro setrídení nebo spojení tabulek. - Sekvencní zpracování následované explicitním trídením je obycejne - rychlejsí nez pouzití indexu na velké tabulce. - - Jinak je tomu v prípade pouzití LIMIT a ORDER BY, pri kterém se - vetsinou index pouzije, jelikoz je výsledkem pouze malá cást tabulky. - - Pokud si myslíte, ze optimizer mylne zvolil sekvencní prohledávání - tabulky, pouzijte príkaz SET enable_seqscan TO 'off' a zkuste zda je - prohledávání s indexem rychlejsí. - - Pri vyhledávání na základe vzoru jako je napr. operátor LIKE nebo ~ se - indexy pouzijí pouze za urcitých skutecností: - * zacátek hledaného vzoru musí být ukotven k zacátku, tj. - + vzor LIKE nesmí zacínat % - + ~ regulární výraz musí zacínat ^ - * vzor nesmí zacínat intervalem, napr. [a-e] - * vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~* - nepouzívá indexy. Muzete ale pouzít funkcionální indexy, které - jsou popsány v sekci 4.8 - * pri inicializaci databáze (initdb) musí být pouzito C locale nebo - vytvorte speciální text_pattern_index, který umozní, pri - respektování zmínených podmínek pouzití indexu operací LIKE. Pro - vyhledávání celých slov je mozné a výhodné pouzít fulltext. - - 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz? - - Podívejte se do nápovedy k príkazu EXPLAIN. - - 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index pro case - insensitive hledání? - - Vyhledávání prostrednictvím regulárních vzoru zajistuje operátor ~, - který je case-sensitive. Jeho case-insensitive varianta je operátor - ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE. - - Case-insensitive vyhledání se resí: -SELECT * -FROM tab -WHERE lower(col) = 'abc'; - - Tento dotaz nepouzije standardní index. Musíte pouzít tzv. - funkcionální index: -CREATE INDEX tabindex ON tab (lower(col)); - - Pokud index vytvoríme jako unikátní, tak muzeme ukládat retezce - obsahující malá i velká písmena, ale nikoliv retezce, které se od sebe - odlisují jen v malých a velkých písmenech. K zajistení zápisu retezce - obsahující pouze malá nebo pouze velká písmena pouzijte CHECK kontroly - nebo triggery. - - 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit dva - retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli je polozka - NULL nebo ne? - - Pokud chcete testovat hodnotu NULL pouzijte operátor IS: - SELECT * - FROM tab - WHERE col IS NULL; - - K spojení retezcu, které mohou obsahovat hodnotu NULL, pouzívejte - funkci COALESCE(), napr.: - SELECT COALESCE(col1, '') || COALESCE(col2, '') - FROM tab - - Pokud chcete trídit podle hodnoty NULL, pouzijte výraz IS NULL nebo IS - NOT NULL v klauzuli ORDER. Hodnota pravda má prednost pred hodnotou - false a tedy pokud pouzijete: - SELECT * - FROM tab - ORDER BY (col IS NOT NULL) - - tak záznamy s NULL budou na zacátku setrídených dat. - - 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy? - - Typ Interní název Poznámky - VARCHAR(n) varchar n urcuje maximální délku - CHAR(n) bpchar retezec je do dané délky rozsíren mezerami - TEXT text bez omezení délky - BYTEA bytea pole bytu nespecifikované délky - "char" char jeden znak - - Na interní názvy muzete narazit v systémovém katalogu nebo v nekterých - chybových hláseních. - - Ctyri první typy jsou tzv. varlena typy (první ctyri byty na disku - jsou obsahují délku, ostatní obsahují vlastní data). Skutecne obsazený - prostor je tedy o neco málo vetsí nez deklarovaná velikost. Na druhou - stranu, delsí retezce jsou komprimovány, takze obsazený prostor na - disku muze být mensí nez se ceká. - - VARCHAR(n) je vhodný pro ukládání ruzne dlouhých retezcu u kterých - známe délkové omezení, TEXT pro retezce bez omezení délky (maximum je - jeden gigabyte). - - CHAR(n) se pouzívá pro ulození stejne dlouhých retezcu. CHAR(n) doplní - mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak - jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot. - Vsechny zmínené typy mají podobné výkonové charakteristiky. - - 4.11.1) Jak vytvorit serial/auto-increment polozku? - - V PostgreSQL muzete pouzít datový typ SERIAL. Jeho pouzitím se - automaticky vytvorí sekvence. Napríklad: -CREATE TABLE person ( - id SERIAL, - name TEXT -); - - je automaticky transformováno na: -CREATE SEQUENCE person_id_seq; -CREATE TABLE person ( - id INT4 NOT NULL DEFAULT nextval('person_id_seq'), - name TEXT -); - - Podrobnejsí informace najdete v manuálu v popisu príkazu - create_sequence. - - 4.11.2) Jak získat hodnotu SERIAL po vlození rádku? - - Nejjednodussím zpusob, jak získat vygenerovanou hodnotu typu SERIAL, - je vyuzít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto: -INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id; - - Také muzete pouzít funkci nextvall() a její výsledek pouzít v príkazu - INSERT, nebo zavolat currval() po provedení príkazu INSERT. - - 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském - prostredí? - - Ne, currval vrací vzdy hodnotu, která byla vygenerována pro vás. - - 4.11.4) Proc není vygenerované císlo pouzito pri prerusení transakce?Proc - vznikají díry v císlování prostrednictvím sekvence nebo typu SERIAL? - - Poté co sekvence vygeneruje nové císlo, tak se nedochází k zamcení - sekvence a neceká se na úspesné nebo neúspesné dokoncení transakce. - Odvoláním transakce, která si vyzádala císla sekvence se tato císla - nenávratne ztratí. - - 4.12) Co to je OID? Co je to CTID? - - V prípade, ze tabulku nezalozíme s atributem WITHOUT OIDS, tak má - kazdý rádek unikátní identifikacní císlo OID. Toto císlo je 4 bajtové - celé císlo, které je jedinecné v celé instalaci. Pretece po 4 - miliardách rádku. PostgreSQL pouzívá OIDs jako interní linky v - interních systémových tabulkách. - - K získání unikátního císla v nesystémových tabulkách je vhodnejsí - pouzití typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzívá pouze - pro jednu tabulku a je tudíz méne náchylná na pretecení. Pokud byste - se toho obávali, pouzijte typ SERIAL8. - - CTID se pouzívá k identifikaci konkrétního fyzického rádku. CTID se - mení pokud je rádek modifikován nebo znovu nacten. Pouzívají ho indexy - jako adresaci fyzických rádku. - - 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in - AllocSetAlloc()"? - - Pravdepodobne jste vycerpal dostupnou virtuální pamet, nebo tvuj - kernel má prílis nízké limity u urcitých zdroju. Pred startem - PostgreSQL vyzkousejte: -ulimit -d 262144 -limit datasize 256m - - Mozná, ze se projde pouze jeden príkaz - zálezí to na vasem shellu. - Mel by zvednout limity datových segmentu vasich procesu na dostatecne - velkou hodnotu a snad umoznit dokoncení dotazu. Zmena limitu se bude - aplikovat pouze na aktuální proces a na vsechny nove vytvorené - procesy. Jestlize máte problém s SQL klientem, protoze vám server - vrátil prílis dat, zkuste to pred startem klienta. - - 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám? - - V psql napiste: -SELECT version(); - - 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální cas? - - Pouzijte CURRENT_TIMESTAMP: -CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - - 4.16) Jak provést vnejsí spojení (outer join)? - - PostgreSQL podporuje standardní SQL syntaxi pro vnejsí spojení. Zde - jsou dva príklady: -SELECT * -FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); - - nebo -SELECT * -FROM t1 LEFT OUTER JOIN t2 USING (col); - - Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a jeste - vrátí vsechny nespárované rádky t2 (ty, které nedohledá v t2). RIGHT - JOIN by pripojil vsechny nespárované rádky z t2. FULL JOIN vrátí - vsechny spárované rádky i vsechny zbývající rádky z obou tabulek. - Klícové slovo OUTER je volitelné. Bezná operace JOIN se také oznacuje - jako vnitrní spojení. - - 4.17) Jak provést dotaz napríc nekolika databázemi? - - Neexistuje zádný zpusob, jak se v dotazu odkazovat na tabulky z jiné - nez aktuální databáze. A to protoze má systémové tabulky ulozené - nezávisle v kazdé databázi a není tak úplne zrejmé, jak by se dotaz - provedený napríc databázemi mel chovat. - - Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomocí - funkcí. Druhý zpusob je simultální pripojení klienta ke vsem - relevantním databázím a sloucení výsledku na strane klienta. - - 4.18) Muze funkce vrátit více rádku nebo sloupcu? - - Jde to jednoduse pomocí set-returning funkce. Více na - http://www.postgresql.org/docs/techdocs.17. - - 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"? - - Nechteným vedlejsím efektem kesování SQL dotazu v PL/pgSQL funkci je - problém s neplatnými odkazy na docasné tabulky, které byly od prvního - spustení funkce zruseny a znovu vytvoreny pred dalsím spustením - PL/pgSQL funkce. Resením je pouzít príkaz EXECUTE a to proto, ze - provádecí plán SQL príkazu spousteného príkazem EXECUTE se vytvárí - pokazdé znovu (neukládá se do cache). - - Tento problém by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssích - verzích. - - 4.20) Jaké jsou moznosti replikace databází? - - Replikaci databáze umoznuje nekolik technoligií. Kazdá má urcité - výhody a nevýhody. - - Master/Slave replikaci podporuje jeden hlavní server, který prijímá - pozadavky na zápis a ctení, a nekolik podrízených serveru, které - umoznují pouze ctení (SELECT). Nejrozsírenejsím volne dostupným - resením tohoto typu je Slony-I. - - Replikace typu Multi-master podporuje existenci nekolika serveru s - povoleným zápisem na více replikovaných serverech. Toto resení zvysuje - zátez serveru, protoze je nutná synchronizace serveru. - Nejrozsírenejsím volne dostupným resením je PGCluster. - - Jeste existuje nekolik komercních a hardware resení replikací - podporujících ruzné modely replikace. - - 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proc - jsou velká písmena v názvech automaticky prevedena na malá písmena? - - Nejcastejsím duvodem nerozpoznání názvu objektu bylo pouzití vlození - názvu sloupce nebo tabulky mezi uvozovky pri zakládání tabulky. Pokud - se název zapíse mezi uvozovky, pak je case sensitive, a v dusledku - toho je nutné názvy techto sloupcu nebo tabulek v SQL príkazech také - vkládat mezi uvozovky (pokud obsahují velká písmena). Nekteré - programy, jako je napríklad pgAdmin, automaticky pouzívají uvozovky. - Takze pokud chcete, aby systém identifikoval identifikátor, musíte: - * nepouzívat uvozovky v príkazu CREATE TABLE - * v identifikátoru pouzít pouze malá písmena - * v dotazech vkládat identifikátory do uvozovek |