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