Skip to content
Snippets Groups Projects
FAQ_czech 35.91 KiB

                          Frequently Asked Questions
                                       
   Casto kladen dotazy (FAQ) PostgreSQL
   
   Posledn aktualizace: 29. rjna 2007 (aktualizovno pro PostgreSQL
   8.3)
   
   Soucasn sprvce: Bruce Momjian (bruce@momjian.us)
   
   Prelozil: Pavel Stehule (pavel.stehule@gmail.com)
   
   Nejaktulnejs verzi tohoto dokumentu naleznete na adrese
   http://www.postgresql.org/files/documentation/faqs/FAQ.html
   
   Odpovedi na otzky vzan na konkrtn platformy naleznete na adrese
   http://www.postgresql.org/docs/faq/.
     _________________________________________________________________
   
                               Obecn otzky
                                      
   1.1) Co je to PostgreSQL? Jak je sprvn vslovnost slova PostgreSQL?
   1.2) Kdo rd vvoj PostgreSQL?
   1.3) Pod jakou licenc je PostgreSQL?
   1.4) Na kterch platformch lze provozovat PostgreSQL?
   1.5) Kde mohu zskat PostgreSQL?
   1.6) Jak je posledn verze?
   1.7) Kde mohu zskat podporu?
   1.8) Jak a kam hlsit chyby?
   1.9) Kde najdu informace o znmch chybch nebo nepodporovanch
   vlastnostech?
   1.10) Jak je dostupn dokumentace?
   1.11) Jak se mohu naucit SQL?
   1.12) Jak se mohu pripojit k tmu vvojru?
   1.13) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
   1.14) Je PostgreSQL pripraven na aktuln zavden letnho casu v
   nekterch zemch?
   
                        Dotazy na klientsk rozhran
                                      
   2.1) Kter rozhran jsou pouziteln pro PostgreSQL?
   2.2) Jak nstroje lze pouzt 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 prstup z jinch stanic?
   3.3) Jak vyladit databzi na vyss vkon?
   3.4) Jak mm ladc prostredky?
   3.5) Co znamen "Sorry, too many clients", kdyz se zkousm pripojit?
   3.6) Proc je nutn dump a obnoven (load) databze pri upgradu
   PostgreSQL?
   3.7) Jak hardware bych mel pouzvat?
   
                              Provozn dotazy
                                      
   4.1) Jak zskat pouze prvn rdek dotazu? Nhodn rdek?
   4.2) Jak zskm seznam tabulek, indexu, databz, a definovanch
   uzivatelu. Mohu videt dotazy, kter pouzv psql pro zobrazen techto
   informac?
   4.3) Jak zmenit datov typ sloupce?
   4.4) Jak je maximln velikost rdku, tabulky a databze?
   4.5) Kolik diskovho prostoru je potreba k ulozen dat z normlnho
   textovho souboru?
   4.6) Muj dotaz je pomal a nepouzv vytvoren indexy. Proc?
   4.7) Jak zjistm, jak se vyhodnocuje muj dotaz?
   4.8) Jak pouzt case-(in)sensitive regulrn vraz? Jak pouzt index
   pro case insensitive hledn?
   4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit
   dva retezce, pokud mohou obsahovat NULL? Lze trdit podle toho, jestli
   je polozka NULL nebo ne?
   4.10) Jak jsou rozdly mezi ruznmi znakovmi typy?
   4.11.1) Jak vytvorit serial/auto-increment polozku?
   4.11.2) Jak zskat hodnotu SERIAL po vlozen rdku?
   4.11.3) Nezpusob currval() a nextval() problmy ve vce uzivatelskm
   prostred?
   4.11.4) Proc nen vygenerovan cslo pouzito pri prerusen
   transakce?Proc vznikaj dry v cslovn prostrednictvm sekvence nebo
   typu SERIAL?
   4.12) Co to je OID? Co je to CTID?
   4.13) Co znamen chybov hlsen "ERROR: Memory exhausted in
   AllocSetAlloc()"?
   4.14) Jak zjistm, kterou verzi PostgreSQL pouzvm?
   4.15) Jak vytvorit sloupec, kter bude implicitne obsahovat aktuln
   cas?
   4.16) Jak provst vnejs spojen (outer join)?
   4.17) Jak provst dotaz naprc nekolika databzemi?
   4.18) Muze funkce vrtit vce rdku nebo sloupcu?
   4.19) Co je prcinou chyby "relation with OID xxxxx does not exist"?
   4.20) Jak jsou moznosti replikace databz?
   4.21) Proc v dotazu nejsou rozpoznny nzvy mch tabulek nebo funkc?
   Proc jsou velk psmena v nzvech automaticky prevedena na mal
   psmena?
     _________________________________________________________________
   
                               Obecn otzky
                                      
  1.1) Co je to PostgreSQL? Jak je sprvn vslovnost slova PostgreSQL?
  
   Vslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres .
   V rade jazyku je slovo PostgreSQL obtzne vysloviteln, proto se v
   hovoru casto pouzv zjednodusen forma nzvu. Pro ty, kter by si
   rdi poslechli vslovnost, je k dispozici audiozznam v MP3 formtu.
   
   PostgreSQL je relacn databze s nektermi objektovmi rysy, kter m
   moznosti tradicnch komercnch databzovch systmu s nekolika
   rozsrenmi, kter lze najt v DBMS systmech prst generace.
   Pouzvn PostgreSQL nen omezen a vesker zdrojov kdy jsou volne
   dostupn.
   
   Za vvojem PostgreSQL je mezinrodn skupina nezvislch vvojru
   navzjem komunikujcch prostrednictvm internetu. Tento projekt nen
   rzen zdnou obchodn organizac. Pokud se chcete pridat k projektu,
   prectete si vvojrsk FAQ na adrese
   http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html .
   
  1.2) Kdo rd vvoj PostgreSQL?
  
   Pokud budete hledat organizaci rdc vvoj PostgreSQL, budete
   zklamni. Nic takovho neexistuje. Existuj pouze "core" a CVS skupiny
   uzivatelu, ale ty existuj vce z administrtorskch duvodu nez z
   organizacnch. Projekt je smerovn komunitou vvojru a uzivatelu, ke
   kter se kdokoliv muze pripojit. Jedin co potrebuje, je prihlsit se
   do elektronick konference. Vce ve vvojrskm FAQ.
   
  1.3) Pod jakou licenc je PostgreSQL?
  
   PostgreSQL je predmetem nsledujcch autorskch prv:
   
   Dlc Copyright (c) 1996-2009, PostgreSQL Global Development Group
   Dlc Copyright (c) 1994-6, Regents of the University of California
   
   Udeluje se oprvnen k uzit, rozmnozovn, provden prav a
   rozsirovn tohoto softwaru a dokumentace k nemu, pro jakkoli cely,
   bez licencnho poplatku a bez psemn licencn smlouvy, za podmnky,
   ze na vsech jeho kopich je uvedeno oznmen o vse uvedench prvech,
   jakoz i obsah tohoto a dvou nsledujcch odstavcu.
   
   THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V ZDNM
   PRPADE ODPOVEDNA ZDN TRET OSOBE ZA PRMOU, NEPRMOU, ZVLSTN,
   NAHODILOU NEBO VSLEDNOU SKODU, VCETNE USLHO ZISKU, ZPUSOBENOU UZITM
   TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRPADE, ZE THE
   UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MOZNOSTI VZNIKU TAKOV
   SKODY.
   
   THE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
   NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE
   SPECIFICKM CELUM. NZE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A
   LEZ" A THE UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO
   DRZBU, PODPORU, AKTUALIZACI, VYLEPSEN NEBO MODIFIKACI.
   
   Vse uveden je BSD licence, bezn licence otevrenho zdroje. Nen zde
   zdn omezen ohledne uzit kdu zdroje. Jsme s tm spokojeni a nemme
   v myslu na tto skutecnosti cokoli menit.
   
  1.4) Na kterch platformch lze provozovat PostgreSQL?
  
   Strucne receno, PostgreSQL bez na vsech modernch unixovch
   systmech. Seznam tech, u kterch probehlo testovn, naleznete v
   instalacnch instrukcch.
   
   PostreSQL tak bez nativne na vsech Microsof Windows systmech
   odvozench z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP
   a Windows2003. Instalacn balcek naleznete na adrese
   http://pgfoundry.org/projects/pginstaller. Na starsch systmech s
   jeste MS-DOS jdrem lze spustit PostgreSQL s emulacnm programem
   Cygwin.
   
   Dle 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 zskat PostgreSQL?
  
   Pomoc webovho 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 plnu je uvolnovat kazdorocne jednu velkou verzi a kazdch nekolik
   mescu mal verze.
   
  1.7) Kde mohu zskat podporu?
  
   Nejcastejs forma podpory uzivatelum PostgreSQL komunitou je
   prostrednictvm e-mailu. Na nasem webovm serveru naleznete odkaz na
   strnky,kde se muzete prihlsit do elektronick konference. Pro
   zactek jsou doporucen konference general nebo bugs.
   
   Dals cestou je IRC kanl #postgresql na Freenode (irc.freenode.net).
   K pripojen pouzijte Unixov prkaz irc -x '#postgresql' "$USER"
   irc.freenode.net nebo jakkoholiv jinho IRC klienta. V tto sti
   existuje jeste spanelsk (#postgresql-es) a francouzsk
   (#postgresqlfr) verze. Dals PostgreSQL kanl naleznete na EFNet.
   
   Seznam spolecnost poskytujc komercn podporu naleznete na adrese
   http://techdocs.postgresql.org/companies.php.
   
  1.8) Jak a kam hlsit chyby?
  
   Vyplnte formulr na adrese
   http://www.postgresql.org/support/submitbug. Na nasem ftp serveru
   ftp://ftp.postgresql.org/pub/ si overte, ze pouzvte aktuln verzi
   PostreSQL.
   
   Chyby reportovan prostrednictvm chybovho formulre nebo zaslnm
   mailu do PostgreSQL konference obvykle generuje nsledujc odezvu:
     * Nejedn se o chybu, a proc
     * Jedn se o znmou chybu, kter je jiz v seznamu kolu TODO
     * Tato chyba byla opravena v aktuln verzi
     * Tato chyba byla jiz opravena ve verzi, kter zatm nebyla
       oficilne uvolnena
     * Pozadavek na dals doplnujc informace:
          + Operacn systm
          + Verze PostgreSQL
          + Test reprodukujc chybu
          + Ladc informace
          + Backtrace vstup debuggeru
     * Jedn se o zatm nezjistenou chybu, pak muzete cekat
          + Zplatu odstranujc chybu, kter bude vlozena do dals velk
            nebo mal verze
          + Informaci, ze se jedn o chybu, kterou nelze okamzite resit a
            je proto pridna do TODO
       
  1.9) Kde najdu informace o znmch chybch nebo nepodporovanch vlastnostech?
  
   PostgreSQL podporuje rozsrenou podmnozinu SQL:2003. V nasem TODO
   naleznete seznam znmch chyb, chybejcch vlastnost, a plny do
   budoucna.
   
   Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle:
     * Pozadavek je jiz v TODO
     * Pozadovan funkce nen chten protoze
          + Duplikuje jiz existujc funkci, kter respektuje SQL
            standard
          + Implementac funkce by se prlis zkomplikoval kd bez
            relevantnho prnosu
          + Funkce by mohla bt nebezpecn nebo nespolehliv
     * Pozadavek je pridn do TODO
       
   PostgreSQL nepozv systm pro sledovn chyb, protoze jsme zjistili,
   ze je efektivnejs prmo reagovat na maily a udrzovat aktuln TODO. V
   praxi je snaha o co nejrychlejs resen chyb, a chyby, kter by se
   mohly projevit u mnoha uzivatelu jsou opravovny velice rychle. Jedin
   msto, kde lze dohledat vsechny zmeny, rozsren a opravy v PostgreSQL
   je CVS log. Poznmky k verzi "Release notes" nezachycuj vsechny
   zmeny, k nemz doslo.
   
  1.10) Jak je dostupn dokumentace?
  
   PostgreSQL obsahuje vynikajc dokumentaci zahrnujc manul,
   manulov strnky a testovac prklady. Podvejte se do adresre /doc.
   Manul je prstupn online na http://www.postgresql.org/docs.
   
   K dispozici jsou zdarma dve online knihy na adresch
   http://www.postgresql.org/docs/books/awbook.html a
   http://www.commandprompt.com/ppbook/. Dals literaturu lze zakoupit.
   Nejpopulrnejs je od Kerryho Douglase. Seznam dostupn literatury je
   na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je
   kolekce technicky orientovanch clnku tematicky spojench s
   PostgreSQL na adrese http://techdocs.postgresql.org/.
   
   Rdkov klient psql m \d prkazy pro zobrazen informac o typech,
   opertorech, funkcch, agregacnch funkc, atd. Pouzijte \? pro
   zobrazen dostupnch prkazu.
   
   Dals dokumentaci najdete na nasem webu.
   
  1.11) Jak se mohu naucit SQL?
  
   Podvejte se do vse 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 tutorily jsou dostupn na adresch:
     * 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 tmu vvojru?
  
   Prostudujte si Developer's FAQ.
   
  1.13) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
  
   Software muzeme porovnvat z nekolika ruznch pohledu: vlastnosti,
   vkon, spolehlivost, podpora a cena.
   
    Vlastnosti
    
   PostgreSQL nabz vetsinu funkc funkcionality velkch komercnch DBMS
   systmu jako jsou: transakce, vnoren dotazy, spouste, referencn
   integrita a sofistikovan systm zamykn. Poskytujeme urcit funkce,
   kter ostatn systmy bezne nepodporuj. Napr. uzivatelem definovan
   typy, dedicnost, pravidla (rules), a MVCC architekturu.
   
    Vkon
    
   Vkon PostgreSQL je srovnateln s ostatnmi komercnmi nebo Open
   Source databzemi. V nekterch prpadech je rychlejs, jindy
   pomalejs. Ns vkon je obvykle +/-10% vuci ostatnm databzm.
   
    Spolehlivost
    
   Uvedomujeme si, ze databze mus bt stoprocentne spolehliv, jinak je
   nepouziteln. Snazme se, aby kazd verze byla dobre otestovna a
   obsahovala minimum chyb. Kazd verze je minimlne nekolik mescu v
   beta testovacm rezimu. Do produkcnho rezimu se dostane, az kdyz
   nedochz k dalsm zmenm nebo opravm. Verme, ze jsem vce nez
   srovnateln s ostatnmi databzemi v tto oblasti.
   
    Podpora
    
   Na nasich internetovch konferencch se setkv velk skupina vvojru
   a uzivatelu pri resen vyskytujcch se problmu. Nase internetov
   konference umoznuj kontakt velk skupiny vvojru a uzivatelu.
   Nemuzeme garantovat opravu chyby, ale komercn DBMSs tak vzdy
   negarantuj resen problmu. Verme ale, ze dky prmmu kontaktu na
   vvojre, nasi uzivatelskou komunitu, manulum, a dostupnm zdrojovm
   kdum mme leps podporu nez ostatn DBMSs. Pro ty, kter preferuj
   komercn "per-incident" podporu, existuje spolecnost, kter ji
   nabzej (FAQ sekce 1.7.)
   
    Cena
    
   PostgreSQL lze pouzvat bezplatne (a to i pro komercn pouzit). Tak
   muzete neomezene pouzvat ns kd ve svch produktech s vjimkami
   specifikovanmi v nas licenci (prebrme BSD licenci).
   
  1.14) Je PostgreSQL pripraven na aktuln zavden letnho casu v nekterch
  zemch?
  
   Pocnaje verz 8.0.[4+] podporuje PostgreSQL letn cas tak pro USA.
   Podpora letnho casu (daylight saving time) pro Kanadu a Zpadn
   Austrlii je obsazena ve verzch 8.0.[10+] a 8.1.[6+] a vsech
   nsledujcch verzch. Stars verze pouzvaly systmovou databzi
   casovch zn obsahujc, krome jinho, informaci o tom, zda se pro
   danou casovou znu rozlisuje mezi letnm a zimnm casem.
     _________________________________________________________________
   
                        Dotazy na klientsk rozhran
                                      
  2.1) Kter rozhran jsou pouziteln pro PostgreSQL?
  
   PostgreSQL se distribuuje pouze s rozhranm pro jazyk C a embedded C.
   Vsechna dals rozhran predstavuj nezvisl projekty, kter je treba
   sthnout z internetu samostatne. Osamostatnen techto projektu
   umoznuje nezvislost vvojovch tmu a moznost vydvat nov verze bez
   ohledu na vydn nov verze PostgreSQL.
   
   Nekter programovac jazyky jako je napr. PHP obsahuj rozhran pro
   PostgreSQL. Rozhran pro jazyky jako je Perl, Tcl, Python a mnoho
   dalsch jsou dostupn na adrese: http://gborg.postgresql.org v sekci
   Drivers/Interfaces.
   
  2.2) Jak nstroje lze pouzt pro PostgreSQL a web?
  
   Dobrm vodem do problematiky databz v prostred webovch strnek
   muze bt web http://www.webreview.com.
   
   PHP (http://www.php.net) je vynikajcm rozhranm pro tvorbu webu.
   
   Pro slozitejs lohy se casto pouzv 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 grafickch nstroju podporujcch PostgreSQL a to
   od komercnch nebo open source vvojru. 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 prstup z jinch stanic?
  
   Ve vchoz konfiguraci, PostgreSQL umoznuje pouze pripojen z
   loklnho uzivatele prostrednictvm 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 ostatnch stanic. Zmena vse zmnench parametru vyzaduje
   restart databzovho serveru.
   
  3.3) Jak vyladit databzi na vyss vkon?
  
   Vkon systmu muzete ovlivnit ve trech oblastech:
   
    Zmeny dotazu
    
     * Pouzitm indexu vcetne cstecnch a funkcionlnch
     * Pouzitm COPY msto opakovanch INSERTu
     * Sloucenm mnoha SQL prkazu do jedn transakce snzenm rezie na
       commit
     * Pouzvnm CLUSTERU, pokud nactte vets pocet rdek podle indexu
     * Pouzitm klauzule LIMIT v poddotazech
     * Pouzitm predpripravench dotazu
     * Pouzvnm ANALYZE. Tento prkaz aktualizuje statistiky, kter se
       pouzvaj pri optimalizaci dotazu
     * Pravideln pouzit VACUUM nebo pouzvn pg_autovacuum
     * Odstranenm indexu pred rozshlmi zmenami v datech
       
    Konfigurace serveru
    
   Urcit parametry v souboru postgresql.conf maj vliv na vkon serveru.
   Detaily naleznete v prrucce Administrtora v Server Run-time
   Environment/Run-time Configuration. Dals komentre naleznete v
   http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht
   ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
   
    Vber hardware
    
   Vliv hardware na vkon serveru je popsn v dokumentech
   http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html
   a http://www.powerpostgresql.com/PerfList/.
   
  3.4) Jak mm ladc prostredky?
  
   Nastavenm log_* promennch v konfiguraci serveru si vynutte logovn
   dotazu a procesnch statistik, kter Vm mohou pomoci pri laden a
   optimalizaci vkonu.
   
  3.5) Co znamen "Sorry, too many clients", kdyz se zkousm pripojit?
  
   Prekrocil jste vchoz limit, kter je 100 soucasne pripojench
   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) databze pri upgradu PostgreSQL?
  
   Zpusob cslovn je popsn v dokumentaci na
   http://www.postgresql.org/support/versioning. Instrukce k proveden
   migrace na vyss verzi jsou taktz v dokumentaci na adrese
   http://www.postgresql.org/docs/current/static/install-upgrading.html.
   
  3.7) Jak hardware bych mel pouzvat?
  
   Jelikoz PC jsou vetsinou kompatibiln, lid maj tendence verit, ze
   vsechna PC jsou stejne kvalitn. Coz nen pravda. Pameti ECC, SCSI a
   kvalitn zkladn desky jsou mnohem spolehlivejs a vkonnejs nez
   lacinejs hardware. PostgreSQL pobez na vetsine hardwaru, nicmne
   pokud je pro Vs spolehlivost a vkon systmu dulezit, je dobr
   venovat cas nalezen vhodn hardwarov konfigurace. Na nasich
   elektronickch konferencch muzete diskutovat o vhodnch konfiguracch
   a znackch.
     _________________________________________________________________
   
                              Provozn dotazy
                                      
  4.1) Jak zskat pouze prvn rdek dotazu? Nhodn rdek?
  
   Pokud potrebujete pouze nekolik rdku a pokud vte kolik, pouzijte
   SELECT LIMIT. Pokud bude mozn pouzt index shodujc se s ORDER BY,
   je mozn, ze se nebude provdet cel dotaz. Pokud neznte pocet
   zznamu, pouzijte kurzor a prkaz FETCH.
   
   Pro vber nhodnho rdku pouzijte prkaz ve tvaru:
SELECT col
FROM tab
ORDER BY random()
LIMIT 1;

  4.2) Jak zskm seznam tabulek, indexu, databz, a definovanch uzivatelu.
  Mohu videt dotazy, kter pouzv psql pro zobrazen techto informac?
  
   V psql prkazem \dt zskte seznam tabulek. pln seznam prkazu psql
   zskte prkazem \?. Alternativne si muzete prostudovat zdrojov kd
   psql - soubor pgsql/src/bin/psql/describe.c, kter obsahuje SQL
   prkazy, kter jsou generovny pro zskn vstupu psql "backslash"
   prkazu. Tak muzete nastartovat psql s parametrem -E, kter zpusob
   zobrazen vsech SQL prkazu, kter se odeslaj na server. PostgreSQL
   tak podporuje SQL standard INFORMACN SCHMATA (standardn systmov
   tabulky). Klasickm dotazem do systmovch tabulek zskte pozadovan
   informace o strukture databze.
   
   Systmov tabulky PostgreSQL (mimo rmec SQL standardu) pouzvaj
   prefix pg_. Pro zjisten struktury databze je muzete pouzt tak, i
   kdyz preferovny jsou dotazy do informacnho schmatu.
   
   Seznam vsech databz zskte prkazem psql -l
   
   Dals inspiraci najdete v souboru pgsql/src/tutorial/syscat.source.
   Obsahuje ilustracn SELECTy potrebn k zskn informac z systmovch
   tabulek databze.
   
  4.3) Jak zmenit datov typ sloupce?
  
   Ve verzch 8.0 a pozdejsch jednoduse:
ALTER TABLE ALTER COLUMN TYPE

   V starsch verzch:
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 prkaz VACUUM FULL, aby doslo k uvolnen diskovho
   prostoru pouzitho v tu chvli jiz neplatnmi zznamy.
   
  4.4) Jak je maximln velikost rdku, tabulky a databze?
  
   PostgreSQL m tato omezen:
   
   Maximln velikost databze:       neomezena (existuj 32TB db)
   Maximln velikost tabulky:        32 TB
   Maximln velikost rdky:          480GB
   Maximln velikost polozky         1 GB
   Maximln pocet rdku v tabulce:   neomezeno
   Maximln pocet sloupcu v tabulce: 250-1600 podle typu
   Maximln pocet indexu na tabulce: neomezeno
   
   Ve skutecnosti nic nen neomezeno, limitem bv vzdy dostupn diskov
   pamet nebo velikost operacn pameti. Pokud mte nekterou z techto
   hodnot neobvykle velkou, muze dojt ke snzen vkonu.
   
   Maximln velikost tabulky je 32 TB a nevyzaduje podporu velkch
   souboru operacnm systmem. Velk tabulky se ukldaj do nekolika 1 GB
   souboru takze limity souborovho systmu nejsou podstatn.
   
   Maximln velikost tabulky a maximln pocet sloupcu muzeme
   zectyrnsobit nastavenm velikosti bloku na 32K.
   
   Indexy jsou povolen pouze na sloupcch jejichz dlka je mens nez
   2000 znaku. Pokud tuto dlku prekrocme a index potrebujeme pro
   zajisten jednoznacnosti, je vhodnejs pouzt funkcionln index nad
   MD5 funkc nebo fulltextov index.
   
  4.5) Kolik diskovho prostoru je potreba k ulozen dat z normlnho textovho
  souboru?
  
   PostgreSQL vyzaduje az petinsobek diskovho prostoru k ulozen dat z
   textovho souboru.
   
   Naprklad, uvazujme soubor se 100 tisci rdky obsahujc na kazd
   rdce cel cslo a textov popis. Text je v prumerne dvacet bytu
   dlouh. Textov soubor bude 2.8 MB dlouh. Velikost databze
   obsahujc odpovdajc data bude zhruba 5.2 MB.
    24 bytu: hlavicka rdku (priblizne)
    24 bytu: jedna celocseln polozka a jedna textov
   + 4 byty: ukazatel na strnku k entici
   ------------------------------------------------------
    52 bytu na rdek

   Velikost datov strnky PostgreSQL je 8192 bytu (8KB)
 8192 bytu na strnce
---------------------- = 158 rdek na strnku
  52 bytu za rdek
100000 rdek
----------------------- = 633 strnek (zaokrouhleno nahoru)
   158 rdek na strnce

633 datovch strnek * 8192 bytu na kazdou strnku = 5,185,536 bytu (5.2 MB)

   Indexy nemaj tak velkou rezii, ale mohou bt tak velk, protoze
   obsahuj indexovan data.
   
   Hodnoty NULL jsou ulozeny v bitmapch, takze zabraj jen velmi mlo
   diskovho prostoru.
   
  4.6) Muj dotaz je pomal a nepouzv vytvoren indexy. Proc?
  
   Kazd dotaz nemus nutne pouzt existujc indexy. Index se pouzije
   tehdy, kdyz je tabulka vets nez urcit minimln velikost, a dotaz
   vybr pouze procentulne malou cst rdku tabulky. To proto, ze
   nhodn prstup k disku dan ctenm indexu muze bt pomalejs nez
   linern cten tabulky nebo sekvencn cten.
   
   PostgreSQL rozhoduje o pouzit indexu na zklade statistiky prstupu k
   tabulce. Tyto statistiky se shromazduj prkazy VACUUM ANALYZE nebo
   ANALYZE. Dky statistikm m optimizer informaci o poctu rdek v
   tabulce a muze lpe rozhodnout o pouzit indexu. Statistiky se uplatn
   pri urcen optimlnho porad a metody spojen tabulek. Statistiky by
   se meli aktualizovat opakovane, tak jak se men obsah tabulek.
   
   Indexy nejsou obycejne pouzity pro setrden nebo spojen tabulek.
   Sekvencn zpracovn nsledovan explicitnm trdenm je obycejne
   rychlejs nez pouzit indexu na velk tabulce.
   
   Jinak je tomu v prpade pouzit LIMIT a ORDER BY, pri kterm se
   vetsinou index pouzije, jelikoz je vsledkem pouze mal cst tabulky.
   
   Pokud si myslte, ze optimizer mylne zvolil sekvencn prohledvn
   tabulky, pouzijte prkaz SET enable_seqscan TO 'off' a zkuste zda je
   prohledvn s indexem rychlejs.
   
   Pri vyhledvn na zklade vzoru jako je napr. opertor LIKE nebo ~ se
   indexy pouzij pouze za urcitch skutecnost:
     * zactek hledanho vzoru mus bt ukotven k zactku, tj.
          + vzor LIKE nesm zacnat %
          + ~ regulrn vraz mus zacnat ^
     * vzor nesm zacnat intervalem, napr. [a-e]
     * vyhledvan, kter nen Case sensitiv jako je ILIKE nebo ~*
       nepouzv indexy. Muzete ale pouzt funkcionln indexy, kter
       jsou popsny v sekci 4.8
     * pri inicializaci databze (initdb) mus bt pouzito C locale nebo
       vytvorte speciln text_pattern_index, kter umozn, pri
       respektovn zmnench podmnek pouzit indexu operac LIKE. Pro
       vyhledvn celch slov je mozn a vhodn pouzt fulltext.
       
  4.7) Jak zjistm, jak se vyhodnocuje muj dotaz?
  
   Podvejte se do npovedy k prkazu EXPLAIN.
   
  4.8) Jak pouzt case-(in)sensitive regulrn vraz? Jak pouzt index pro case
  insensitive hledn?
  
   Vyhledvn prostrednictvm regulrnch vzoru zajistuje opertor ~,
   kter je case-sensitive. Jeho case-insensitive varianta je opertor
   ~*. Case-insensitive variac opertoru LIKE je opertor ILIKE.
   
   Case-insensitive vyhledn se res:
SELECT *
FROM tab
WHERE lower(col) = 'abc';

   Tento dotaz nepouzije standardn index. Muste pouzt tzv.
   funkcionln index:
CREATE INDEX tabindex ON tab (lower(col));

   Pokud index vytvorme jako uniktn, tak muzeme ukldat retezce
   obsahujc mal i velk psmena, ale nikoliv retezce, kter se od sebe
   odlisuj jen v malch a velkch psmenech. K zajisten zpisu retezce
   obsahujc pouze mal nebo pouze velk psmena 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 trdit podle toho, jestli je polozka
  NULL nebo ne?
  
   Pokud chcete testovat hodnotu NULL pouzijte opertor IS:
   SELECT *
   FROM tab
   WHERE col IS NULL;

   K spojen retezcu, kter mohou obsahovat hodnotu NULL, pouzvejte
   funkci COALESCE(), napr.:
   SELECT COALESCE(col1, '') || COALESCE(col2, '')
   FROM tab

   Pokud chcete trdit podle hodnoty NULL, pouzijte vraz 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 zznamy s NULL budou na zactku setrdench dat.
   
  4.10) Jak jsou rozdly mezi ruznmi znakovmi typy?
  
   Typ        Intern nzev Poznmky
   VARCHAR(n) varchar       n urcuje maximln dlku
   CHAR(n)    bpchar        retezec je do dan dlky rozsren mezerami
   TEXT       text          bez omezen dlky
   BYTEA      bytea         pole bytu nespecifikovan dlky
   "char"     char          jeden znak
   
   Na intern nzvy muzete narazit v systmovm katalogu nebo v nekterch
   chybovch hlsench.
   
   Ctyri prvn typy jsou tzv. varlena typy (prvn ctyri byty na disku
   jsou obsahuj dlku, ostatn obsahuj vlastn data). Skutecne obsazen
   prostor je tedy o neco mlo vets nez deklarovan velikost. Na druhou
   stranu, dels retezce jsou komprimovny, takze obsazen prostor na
   disku muze bt mens nez se cek.
   
   VARCHAR(n) je vhodn pro ukldn ruzne dlouhch retezcu u kterch
   znme dlkov omezen, TEXT pro retezce bez omezen dlky (maximum je
   jeden gigabyte).
   
   CHAR(n) se pouzv pro ulozen stejne dlouhch retezcu. CHAR(n) dopln
   mezerami na specifikovanou dlku, VARCHAR(n) hodnoty se ukldaj tak
   jak jsou. BYTEA je pro ukldn binrnch dat - non ASCII hodnot.
   Vsechny zmnen typy maj podobn vkonov charakteristiky.
   
  4.11.1) Jak vytvorit serial/auto-increment polozku?
  
   V PostgreSQL muzete pouzt datov typ SERIAL. Jeho pouzitm se
   automaticky vytvor sekvence. Naprklad:
CREATE TABLE person (
  id   SERIAL,
  name TEXT
);

   je automaticky transformovno na:
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
  id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
  name TEXT
);

   Podrobnejs informace najdete v manulu v popisu prkazu
   create_sequence.
   
  4.11.2) Jak zskat hodnotu SERIAL po vlozen rdku?
  
   Nejjednodussm zpusob, jak zskat vygenerovanou hodnotu typu SERIAL,
   je vyuzt klauzuli RETURNING. Pro tabulku z 4.11.1 vypad takto:
INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;

   Tak muzete pouzt funkci nextvall() a jej vsledek pouzt v prkazu
   INSERT, nebo zavolat currval() po proveden prkazu INSERT.
   
  4.11.3) Nezpusob currval() a nextval() problmy ve vce uzivatelskm
  prostred?
  
   Ne, currval vrac vzdy hodnotu, kter byla vygenerovna pro vs.
   
  4.11.4) Proc nen vygenerovan cslo pouzito pri prerusen transakce?Proc
  vznikaj dry v cslovn prostrednictvm sekvence nebo typu SERIAL?
  
   Pot co sekvence vygeneruje nov cslo, tak se nedochz k zamcen
   sekvence a necek se na spesn nebo nespesn dokoncen transakce.
   Odvolnm transakce, kter si vyzdala csla sekvence se tato csla
   nenvratne ztrat.
   
  4.12) Co to je OID? Co je to CTID?
  
   V prpade, ze tabulku nezalozme s atributem WITHOUT OIDS, tak m
   kazd rdek uniktn identifikacn cslo OID. Toto cslo je 4 bajtov
   cel cslo, kter je jedinecn v cel instalaci. Pretece po 4
   miliardch rdku. PostgreSQL pouzv OIDs jako intern linky v
   internch systmovch tabulkch.
   
   K zskn uniktnho csla v nesystmovch tabulkch je vhodnejs
   pouzit typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzv pouze
   pro jednu tabulku a je tudz mne nchyln na pretecen. Pokud byste
   se toho obvali, pouzijte typ SERIAL8.
   
   CTID se pouzv k identifikaci konkrtnho fyzickho rdku. CTID se
   men pokud je rdek modifikovn nebo znovu nacten. Pouzvaj ho indexy
   jako adresaci fyzickch rdku.
   
  4.13) Co znamen chybov hlsen "ERROR: Memory exhausted in
  AllocSetAlloc()"?
  
   Pravdepodobne jste vycerpal dostupnou virtuln pamet, nebo tvuj
   kernel m prlis nzk limity u urcitch zdroju. Pred startem
   PostgreSQL vyzkousejte:
ulimit -d 262144
limit datasize 256m

   Mozn, ze se projde pouze jeden prkaz - zlez to na vasem shellu.
   Mel by zvednout limity datovch segmentu vasich procesu na dostatecne
   velkou hodnotu a snad umoznit dokoncen dotazu. Zmena limitu se bude
   aplikovat pouze na aktuln proces a na vsechny nove vytvoren
   procesy. Jestlize mte problm s SQL klientem, protoze vm server
   vrtil prlis dat, zkuste to pred startem klienta.
   
  4.14) Jak zjistm, kterou verzi PostgreSQL pouzvm?
  
   V psql napiste:
SELECT version();

  4.15) Jak vytvorit sloupec, kter bude implicitne obsahovat aktuln cas?
  
   Pouzijte CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );

  4.16) Jak provst vnejs spojen (outer join)?
  
   PostgreSQL podporuje standardn SQL syntaxi pro vnejs spojen. Zde
   jsou dva prklady:
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
   vrt vsechny nesprovan rdky t2 (ty, kter nedohled v t2). RIGHT
   JOIN by pripojil vsechny nesprovan rdky z t2. FULL JOIN vrt
   vsechny sprovan rdky i vsechny zbvajc rdky z obou tabulek.
   Klcov slovo OUTER je voliteln. Bezn operace JOIN se tak oznacuje
   jako vnitrn spojen.
   
  4.17) Jak provst dotaz naprc nekolika databzemi?
  
   Neexistuje zdn zpusob, jak se v dotazu odkazovat na tabulky z jin
   nez aktuln databze. A to protoze m systmov tabulky ulozen
   nezvisle v kazd databzi a nen tak plne zrejm, jak by se dotaz
   proveden naprc databzemi mel chovat.
   
   Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomoc
   funkc. Druh zpusob je simultln pripojen klienta ke vsem
   relevantnm databzm a sloucen vsledku na strane klienta.
   
  4.18) Muze funkce vrtit vce rdku nebo sloupcu?
  
   Jde to jednoduse pomoc set-returning funkce. Vce na
   http://www.postgresql.org/docs/techdocs.17.
   
  4.19) Co je prcinou chyby "relation with OID xxxxx does not exist"?
  
   Nechtenm vedlejsm efektem kesovn SQL dotazu v PL/pgSQL funkci je
   problm s neplatnmi odkazy na docasn tabulky, kter byly od prvnho
   spusten funkce zruseny a znovu vytvoreny pred dalsm spustenm
   PL/pgSQL funkce. Resenm je pouzt prkaz EXECUTE a to proto, ze
   provdec pln SQL prkazu spoustenho prkazem EXECUTE se vytvr
   pokazd znovu (neukld se do cache).
   
   Tento problm by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssch
   verzch.
   
  4.20) Jak jsou moznosti replikace databz?
  
   Replikaci databze umoznuje nekolik technoligi. Kazd m urcit
   vhody a nevhody.
   
   Master/Slave replikaci podporuje jeden hlavn server, kter prijm
   pozadavky na zpis a cten, a nekolik podrzench serveru, kter
   umoznuj pouze cten (SELECT). Nejrozsrenejsm volne dostupnm
   resenm tohoto typu je Slony-I.
   
   Replikace typu Multi-master podporuje existenci nekolika serveru s
   povolenm zpisem na vce replikovanch serverech. Toto resen zvysuje
   ztez serveru, protoze je nutn synchronizace serveru.
   Nejrozsrenejsm volne dostupnm resenm je PGCluster.
   
   Jeste existuje nekolik komercnch a hardware resen replikac
   podporujcch ruzn modely replikace.
   
  4.21) Proc v dotazu nejsou rozpoznny nzvy mch tabulek nebo funkc? Proc
  jsou velk psmena v nzvech automaticky prevedena na mal psmena?
  
   Nejcastejsm duvodem nerozpoznn nzvu objektu bylo pouzit vlozen
   nzvu sloupce nebo tabulky mezi uvozovky pri zakldn tabulky. Pokud
   se nzev zapse mezi uvozovky, pak je case sensitive, a v dusledku
   toho je nutn nzvy techto sloupcu nebo tabulek v SQL prkazech tak
   vkldat mezi uvozovky (pokud obsahuj velk psmena). Nekter
   programy, jako je naprklad pgAdmin, automaticky pouzvaj uvozovky.
   Takze pokud chcete, aby systm identifikoval identifiktor, muste:
     * nepouzvat uvozovky v prkazu CREATE TABLE
     * v identifiktoru pouzt pouze mal psmena
     * v dotazech vkldat identifiktory do uvozovek