head	1.9;
access;
symbols
	REL7_4_29:1.1.2.1
	REL8_0_25:1.2.4.1
	REL8_1_21:1.3.2.1
	REL8_2_17:1.4.2.1
	REL8_3_11:1.7
	REL7_4_28:1.1.2.1
	REL8_0_24:1.2.4.1
	REL8_1_20:1.3.2.1
	REL8_2_16:1.4.2.1
	REL8_3_10:1.7
	REL7_4_27:1.1.2.1
	REL8_0_23:1.2.4.1
	REL8_1_19:1.3.2.1
	REL8_2_15:1.4.2.1
	REL8_3_9:1.7
	REL7_4_26:1.1.2.1
	REL8_0_22:1.2.4.1
	REL8_1_18:1.3.2.1
	REL8_2_14:1.4.2.1
	REL8_3_8:1.7
	REL8_4_STABLE:1.8.0.2
	REL8_4_0:1.8
	REL8_4_RC2:1.8
	REL8_4_RC1:1.8
	REL8_4_BETA2:1.8
	REL8_4_BETA1:1.8
	REL7_4_25:1.1.2.1
	REL8_0_21:1.2.4.1
	REL8_1_17:1.3.2.1
	REL8_2_13:1.4.2.1
	REL8_3_7:1.7
	REL7_4_24:1.1.2.1
	REL8_0_20:1.2.4.1
	REL8_1_16:1.3.2.1
	REL8_2_12:1.4.2.1
	REL8_3_6:1.7
	REL7_4_23:1.1.2.1
	REL8_0_19:1.2.4.1
	REL8_1_15:1.3.2.1
	REL8_2_11:1.4.2.1
	REL8_3_5:1.7
	REL7_4_22:1.1.2.1
	REL8_0_18:1.2.4.1
	REL8_1_14:1.3.2.1
	REL8_2_10:1.4.2.1
	REL8_3_4:1.7
	REL7_4_21:1.1.2.1
	REL8_0_17:1.2.4.1
	REL8_1_13:1.3.2.1
	REL8_2_9:1.4.2.1
	REL8_3_3:1.7
	REL7_4_20:1.1.2.1
	REL8_0_16:1.2.4.1
	REL8_1_12:1.3.2.1
	REL8_2_8:1.4.2.1
	REL8_3_2:1.7
	REL8_2_7:1.4.2.1
	REL8_3_1:1.7
	REL8_3_STABLE:1.7.0.2
	REL8_3_0:1.7
	REL8_3_RC2:1.7
	REL7_4_19:1.1.2.1
	REL8_0_15:1.2.4.1
	REL8_1_11:1.3.2.1
	REL8_2_6:1.4.2.1
	REL8_3_RC1:1.7
	REL8_3_BETA4:1.6
	REL8_3_BETA3:1.6
	REL8_3_BETA2:1.5
	REL8_3_BETA1:1.5
	REL7_4_18:1.1.2.1
	REL8_0_14:1.2.4.1
	REL8_1_10:1.3.2.1
	REL8_2_5:1.4.2.1
	REL7_4_17:1.1.2.1
	REL8_0_13:1.2.4.1
	REL8_1_9:1.3.2.1
	REL8_2_4:1.4.2.1
	REL8_0_12:1.2.4.1
	REL8_1_8:1.3.2.1
	REL8_2_3:1.4.2.1
	REL7_4_16:1.1.2.1
	REL8_0_11:1.2.4.1
	REL8_1_7:1.3.2.1
	REL8_2_2:1.4.2.1
	REL8_0_10:1.2.4.1
	REL8_1_6:1.3.2.1
	REL8_2_1:1.4
	REL7_4_15:1.1.2.1
	REL8_2_STABLE:1.4.0.2
	REL8_2_0:1.4
	REL8_2_RC1:1.4
	REL8_2_BETA3:1.4
	REL8_2_BETA2:1.4
	REL8_1_5:1.3.2.1
	REL8_0_9:1.2.4.1
	REL7_4_14:1.1.2.1
	REL8_2_BETA1:1.4
	REL7_4_13:1.1.2.1
	REL8_0_8:1.2.4.1
	REL8_1_4:1.3.2.1
	REL7_4_12:1.1.2.1
	REL8_0_7:1.2.4.1
	REL8_1_3:1.3
	REL7_4_11:1.1.2.1
	REL8_0_6:1.2.4.1
	REL8_1_2:1.3
	REL7_4_10:1.1.2.1
	REL8_0_5:1.2.4.1
	REL8_1_1:1.3
	REL8_1_STABLE:1.3.0.2
	REL8_1_0:1.3
	REL8_1_0RC1:1.3
	REL8_1_0BETA4:1.3
	REL8_1_0BETA3:1.3
	REL7_4_9:1.1.2.1
	REL8_0_4:1.2.4.1
	REL8_1_0BETA2:1.3
	REL8_1_0BETA1:1.3
	REL7_4_8:1.1.2.1
	REL8_0_3:1.2.4.1
	REL8_0_2:1.2.4.1
	REL7_4_7:1.1.2.1
	REL8_0_1:1.2
	REL8_0_STABLE:1.2.0.4
	REL8_0_0:1.2.0.2
	REL8_0_0RC5:1.2
	REL8_0_0RC4:1.2
	REL8_0_0RC3:1.2
	REL8_0_0RC2:1.2
	REL8_0_0RC1:1.2
	REL8_0_0BETA5:1.2
	REL8_0_0BETA4:1.2
	REL7_4_6:1.1.2.1
	REL8_0_0BETA3:1.2
	REL8_0_0BETA2:1.2
	REL7_4_5:1.1.2.1
	REL7_4_4:1.1.2.1
	REL8_0_0BETA1:1.2
	REL7_4_3:1.1.2.1
	REL7_4_2:1.1.2.1
	REL7_4_1:1.1.2.1
	REL7_4_STABLE:1.1.0.2;
locks; strict;
comment	@# @;


1.9
date	2009.07.21.19.20.32;	author petere;	state dead;
branches;
next	1.8;

1.8
date	2009.01.01.17.23.32;	author momjian;	state Exp;
branches
	1.8.2.1;
next	1.7;

1.7
date	2008.01.01.19.45.45;	author momjian;	state Exp;
branches;
next	1.6;

1.6
date	2007.11.01.17.28.03;	author momjian;	state Exp;
branches;
next	1.5;

1.5
date	2007.01.05.22.19.19;	author momjian;	state Exp;
branches;
next	1.4;

1.4
date	2006.03.05.15.58.19;	author momjian;	state Exp;
branches
	1.4.2.1;
next	1.3;

1.3
date	2005.03.11.21.46.52;	author momjian;	state Exp;
branches
	1.3.2.1;
next	1.2;

1.2
date	2003.12.16.09.47.55;	author petere;	state Exp;
branches
	1.2.4.1;
next	1.1;

1.1
date	2003.12.16.09.46.12;	author petere;	state dead;
branches
	1.1.2.1;
next	;

1.1.2.1
date	2003.12.16.09.46.12;	author petere;	state Exp;
branches;
next	;

1.2.4.1
date	2005.03.11.21.47.35;	author momjian;	state Exp;
branches;
next	;

1.3.2.1
date	2006.04.05.22.56.11;	author momjian;	state Exp;
branches;
next	;

1.4.2.1
date	2007.02.01.04.56.41;	author momjian;	state Exp;
branches;
next	;

1.8.2.1
date	2009.07.21.19.21.02;	author petere;	state dead;
branches;
next	;


desc
@@


1.9
log
@Remove translated FAQs

The English FAQ has been moved to the wiki, so the translated versions should
have been removed at that point as well.

The FAQ_MINGW.html should have been removed when the platform FAQs were
integrated into the documentation (or earlier).

applied to both 8.4 and 8.5
@
text
@
                          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
@


1.8
log
@Update copyright for 2009.
@
text
@@


1.8.2.1
log
@Remove translated FAQs

The English FAQ has been moved to the wiki, so the translated versions should
have been removed at that point as well.

The FAQ_MINGW.html should have been removed when the platform FAQs were
integrated into the documentation (or earlier).

applied to both 8.4 and 8.5
@
text
@@


1.7
log
@Update copyrights in source tree to 2008.
@
text
@d131 1
a131 1
   Dlc Copyright (c) 1996-2008, PostgreSQL Global Development Group
@


1.6
log
@Update Czech FAQ.

Pavel Stehule
@
text
@d131 1
a131 1
   Dlc Copyright (c) 1996-2005, PostgreSQL Global Development Group
@


1.5
log
@Update CVS HEAD for 2007 copyright.  Back branches are typically not
back-stamped for this.
@
text
@d2 1
a2 1
                     asto kladen dotazy (FAQ) PostgreSQL
d4 1
a4 1
   Posledn aktualizace: Steda 23. ervna 21:10:00 EST 2004
d6 2
a7 1
   Souasn sprvce: Bruce Momjian (pgman@@candle.pha.pa.us)
d9 1
a9 1
   Peloil: Pavel Sthule (stehule@@kix.fsv.cvut.cz)
d11 1
a11 3
   Aktuln verzi tohoto dokumentu naleznete na adrese:
   http://www.PostgreSQL.org/docs/faqs/FAQ.html. esk peklad na adrese:
   http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html.
d13 5
a17 2
   Odpovdi na dotazy relevantn ke konkrtnm platformm lze nalzt na
   adrese: http://www.PostgreSQL.org/docs/index.html.
d22 4
a25 4
   1.1) Co je PostgreSQL? Jak se vyslovuje?
   1.2) Jak je licence na PostgreSQL?
   1.3) Na kterch Unixex lze spustit PostgreSQL?
   1.4) Kter ne-unixov platformy jsou podporovan?
d27 11
a37 10
   1.6) Kde mohu zskat podporu?
   1.7) Kde je posledn verze?
   1.8) Jak je dostupn dokumentace?
   1.9) Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
   1.10) Jak se mohu nauit SQL?
   1.11) Nem PostgreSQL problmy s rokem 2000?
   1.12) Jak se pipojit k vvojskmu tmu?
   1.13) Kam podat report o chyb?
   1.14) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
   1.15) Jak lze finann pomoci PostgreSQL?
d39 1
a39 1
                             User client dotazy
d41 2
a42 2
   2.1) Kde naleznu ODBC ovladae pro PostgreSQL?
   2.2) Jak nstroje lze pout pro PostgreSQL a web?
a43 1
   2.4) Kter programovac jazyky maj podporu pro PostgreSQL?
d47 8
a54 14
   3.1) Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
   3.2) Pi startu postmaster, dostanu chybov hlen Bad System Call
   nebo core dump. Pro?
   3.3) Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate.
   Pro?
   3.4) Pi startu postmastera dostanu hlen o chyb
   IpcSemaphoreCreate. Pro?
   3.5) Jak povolit nebo zakzat pstup z jinch stanic?
   3.6) Jak ladit databzov stroj na lep vkon?
   3.7) Jak jsou monosti ladn?
   3.8) Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
   3.9) K emu slou adres pgsql_tmp?
   3.10) Pro je poadovno dump a obnoven (load) databze bhem upgrade
   mezi velkmi verzemi PostgreSQL?
d58 7
a64 6
   4.1) m se li binrn a normln kurzor?
   4.2) Jak zskat pouze prvn dek dotazu? Nhodn dek?
   4.3) Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
   4.4) Jak odstranm sloupec tabulky, jak zmnm jeho typ?
   4.5) Jak je maximln velikost dku, tabulky a databze?
   4.6) Kolik diskovho prostoru je poteba k uloen dat z normlnho
d66 17
a82 18
   4.7) Jak zskm seznam vytvoench tabulek, index, databz?
   4.8) Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
   4.9) Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
   4.10) Co to je R-tree index?
   4.11) Co je Genetic Query Optimizer?
   4.12) Jak provst vyhledvn regulrnho vrazu case sensitiv,
   insensitiv? Jak pout index pro case insensitive vyhledvn?
   4.13) Jak v dotazu detekovat, e poloka je NULL?
   4.14) Jak jsou rozdly mezi rznmi znakovmi typy?
   4.15.1) Jak vytvoit serial/auto-increment pole?
   4.15.2) Jak zskat hodnotu SERIAL po vloen dku?
   4.15.3) Nepovede currval() a nextval() k rozhozen podmnek pi
   soubhu s jinmi uivateli?
   4.15.4) Pro nen vygenerovan slo pouito pi peruen transakce?
   Pro vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?
   4.16) Co to je OID? Co je to TID?
   4.17) Jak je vznam nkterch vraz pouitch v PostgreSQL?
   4.18) Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
d84 11
a94 21
   4.19) Jak se dozvm, kterou verzi PostgreSQL pouvm?
   4.20) Pro operace s velkmi objekty kon "invalid large obj
   descriptor"?
   4.21) Jak vytvoit sloupec obsahujc implicitn aktuln datum?
   4.22) Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
   4.23) Jak provst vnj spojen (outer join)?
   4.24) Jak provst dotaz nap nkolika databzemi?
   4.25) Me funkce vrtit vce dk nebo sloupc?
   4.26) Pro nelze spolehliv vytvet a ruit doasn tabulky v
   PL/pgSQL funkcch?
   4.27) Jak jsou monosti replikace databz?
   4.28) Jak jsou monosti ifrovn databz?
   
                           Roziovn PostgreSQL
                                      
   5.1) Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
   5.2) Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
   PostgreSQL?
   5.3) Jak napsat funkci v C vracejc ntici?
   5.4) Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi
   rekompilaci vzata v potaz. Pro?
d99 248
a346 267
    1.1) Co je PostgreSQL? Jak se vyslovuje?
    
   PostgreSQL se vyslovuje Post-Gres-Q-L. Zvukov zznam je dostupn na
   adrese .
   
   PostgreSQL vychz z databze POSTGRES (a stle je nkdy oznaovn
   zjednoduen jako Postgres) - vzkumnho prototypu DBMS nov generace.
   Z postgresu byl pevzat siln datov model a bohat soubor datovch
   typ a jeho dotazovac jazyk PostQuel byl nahrazen rozenou
   podmnoinou jazyka SQL. PostgreSQL lze pouvat bez omezen a jeho
   zdrojov kdy jsou voln k dispozici.
   
   PostgreSQL vyvj tm vvoj pihlench do vvojsk konference
   PostgreSQL. Souasnm koordintorem je Marc G. Fournier
   (scrappy@@PostgreSQL.org). (viz 1.6 - jak se zapojit). Tento tm je
   zodpovdn za veker vvoj PostgreSQL. Jedn se o veejn projekt,
   kter nen zen dnou firmou. Pokud se chcete zapojit, pette si
   developer's FAQ na adrese
   http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html
   
   Autory prvn verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
   portace, testovn, ladn a roziovn kdu se zapojilo mnoho
   dalch vvoj . Pvodni kd Postgresu, ze kterho PostgreSQL
   vychz, je vsledkem sil mnoha student a programtor pracujcch
   pod vedenm prof. Michaela Stonebrakera na University of California v
   Berkley.
   
   Pvodn nzev software z Berkley byl Postgres. Po pidn jazyka SQL
   se nzev zmnil na Postgres95. Koncem roku 1996 byl RDBMS pejmenovn
   na PostgreSQL.
   
    1.2) Jak je licence na PostgreSQL?
    
   PostgreSQL je pedmtem nsledujcch autorskch prv:
   
   Dl Copyright (c) 1996-2007, PostgreSQL Global Development Group
   Dl Copyright (c) 1994-6, Regents of the University of California
   
   Udluje se oprvnn k uit, rozmnoovn, provdn prav a
   roziovn tohoto softwaru a dokumentace k nmu, pro jakkoli ely,
   bez licennho poplatku a bez psemn licenn smlouvy, za podmnky,
   e na vech jeho kopich je uvedeno oznmen o ve uvedench prvech,
   jako i obsah tohoto a dvou nsledujcch odstavc.
   
   THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V DNM
   PPAD ODPOVDNA DN TET OSOB ZA PMOU, NEPMOU, ZVLTN,
   NAHODILOU NEBO VSLEDNOU KODU, VETN ULHO ZISKU, ZPSOBENOU UITM
   TOHOTO SOFTWARU A DOKUMENTACE K NMU, A TO I V PPAD, E THE
   UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MONOSTI VZNIKU TAKOV
   KODY.
   
   HE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
   NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE
   SPECIFICKM ELM. NͮE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A
   LE" A THE UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO
   DRBU, PODPORU, AKTUALIZACI, VYLEPEN NEBO MODIFIKACI.
   
   Ve uveden je BSD licence, bn licence otevenho zdroje. Nen zde
   dn omezen ohledn uit kdu zdroje. Jsme s tm spokojeni a nemme
   v myslu na tto skutenosti cokoli mnit.
   
    1.3) Na kterch Unixex lze spustit PostgreSQL?
    
   PostgreSQL b na vech modernch unixovch platformch. V
   instalanch instrukcch naleznete aktuln seznam vech platforem na
   kterch byla testovnm ovena funkcionalita PostgreSQL.
   
    1.4) Kter ne-unixov platformy jsou podporovan?
    
   Klient
   
   Knihovna libpq, psql a nkter dal moduly byly peloeny pro MS
   Windows. Klienta lze provozovat na MS Windows, ten prostednictvm
   TCP/IP protokolu komunikuje se serverem bcm na nkter z
   podporovanch Unixovch platforem. K pekladu lze pout win32.mak a
   Win32 knihovny libpq a psql. K databzi PostgerSQL lze pistupovat
   skrze rozhran ODBC.
   
   Server
   
   Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou
   Cygwin, Cygnus Unix/NT porting library. Vce pgsql/doc/FAQ_MSWIN v
   distribuci nebo MS Windows FAQ na adrese
   http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN.
   
   Na nativnm portu pro MS Win NT/2000/XP se pracuje. Dal informace o
   aktulnm stavu PostgreSQL pro Windows naleznet na adrese
   http://techdocs.postgresql.org/guides/Windows a
   http://momjian.postgresql.org/main/writings/pgsql/win32.html.
   
   Existujc port pro Novell Netware 6 naleznete na
   http://forge.novell.com.
   
    1.5) Kde mohu zskat PostgreSQL?
    
   Primrnm anonymnm ftp serverem pro PostgreSQL je
   ftp://ftp.PostgreSQL.org/pub. Seznam zrcadel naleznete na naich
   webovch strnkch.
   
    1.6) Kde mohu zskat podporu?
    
   Hlavn mailov konference je: pgsql-general@@PostgreSQL.org. Slou k
   diskuzm ohledn PostgreSQL. Pihlste se zaslnm mailu obsahujc
   nsledujc dky v tle dopisu (nikoliv v zhlav - subjectu):
    subscribe
    end

   na adresu pgsql-general-request@@PostgreSQL.org.
   
   Mete si vydat denn pehled (diggest), kter m zhruba 30K denn
   zprv.
   
   Konference psql-bugs je urena k zasln zprv o chybch. Pro
   pihlen polete mail se stejnm obsahem jako v pedchozm ppad
   na adresu pgsql-bugs-request@@PostgreSQL.org.
   
   Do vvojsk konference se pihlste odeslnm dopisu s ji
   zmiovanm obsahem na mailto:pgsql-hackers-request@@PostgreSQL.org.
   
   Seznam dalch konferenc naleznete na strnkch PostgreSQL:
   
     http://www.postgresql.org
     
    1.7) Jak je posledn verze?
    
   Posledn verze PostgreSQL je 7.4.3. Plnujeme uvolnit vznamnou verzi
   kadch est a osm msc.
   
    1.8) Jak je dostupn dokumentace?
    
   Rzn manuly, manulov strnky a nkolik malch testovacch pklad
   jsou sousti distribuce. Podvejte se do adrese /doc. Manuly jsou
   pstupn online na http://www.PostgreSQL.org/docs.
   
   Na adresch http://www.PostgreSQL.org/docs/awbook.html a
   http://www.commandprompt.com/ppbook/ naleznezte dv online knihy o
   PostgreSQL. Seznam dostupn literatury je na
   http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor
   technickch lnk s tematikou PostgresQL najdete na
   http://techdocs.PostgreSQL.org/.
   
   psql m uiten metapkaz \d slouc k zobrazen informac o
   typech, opertorech, funkc, agreganch funkc atd.
   
   Vce dokumentace naleznete na naich webovch strnkch.
   
    1.9) Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
    
   PostgreSQL podporuje rozenou podmnoinu SQL-92. V naem TODO
   najdete seznam znmch chyb, chybjcch vlastnost a seznam
   vlastnost, kter budou do systmu implementovny v budoucnu (vetn
   priorit).
   
    1.10) Jak se mohu nauit SQL?
    
   V knize The PostgreSQL book na
   http://www.PostgreSQL.org/docs/awbook.html je vysvtlen jazyk SQL
   (vyla esky). Dal dostupnou knihou je
   http://www.commandprompt.com/ppbook. Kvalitn nvody naleznete na
   http://www.intermedia.net/support/sql/sqltut.shtm, a na
   http://sqlcourse.com.
   
   Dal je Teach Yourself SQL in 21 days, Second Edition na
   http://members.tripod.com/er4ebus/sql/index.htm.
   
   Mnoho uivatel doporuuje The Practical SQL Handbook, Bowman, Judith
   S., et al., Addison-Wesley. Jin preferuj The Complete Reference SQL,
   Groff et al., McGraw-Hill.
   
    1.11) Nem PostgreSQL problmy s rokem 2000?
    
   Nem, meme pracovat s datumy po roce 2000 naeho letopotu i ped
   rokem 2000 p.n.l.
   
    1.12) Jak se pipojit k vvojskmu tmu?
    
   Nejdve si sthnte nejnovj zdroje a pette si vvojskou
   dokumentaci na naem webu nebo v distribuci. Pak se pihlate do
   konferenc pgsql-hackers a pgsql-patches. Kvalitn zplaty poslejte
   do pgsql-patches.
   
   Prvo commit m v CVS archivu asi tincti lid. Kad z nich poslal
   mnoho kvalitnch zplat, take tehdej commiters mli jistotu, e
   budou pedkldat jenom kvalitn zplaty a mohli jim pedlit vt
   prva.
   
    1.13) Kam podat report o chyb?
    
   Navtivte nai PostgreSQL BugTool strnku na
   http://www.PostgreSQL.org/bugs/bugs.php, kter obsahuje nvod a
   smrnice jak podat chybov report.
   
   Ovte si na naem ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li
   mte nejnovj verzi PostgreSQL a zda-li k n neexistuj njak
   zplaty.
   
    1.14) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
    
   Existuje nkolik hledisek jak porovnvat software: vlastnosti, vkon,
   spolehlivost, podpora a cena.
   
   Vlastnosti
          PostgreSQL m hodn spolench vlastnost s velkmi komernmi
          DBMS, nap. transakce, vnoen dotazy, spout, pohledy,
          kontrolu referenn integrity a sofistikovan zamykn.
          Podporuje nkter vlastnosti, kter tyto systmy nemaj,
          uivatelem definovan typy, ddinost, pravidla, MVCC
          redukujc zamykn.
          
   Vkon
          Vkonnostn je na tom PostgreSQL podobn jako dal komern
          ale i open source databze, v nem je rychlej, jindy
          pomalej. V porovnn s MySQL a podobnmi databzovmi systmy
          je PostgreSQL rychlej pi vceuivatelskm pstupu,
          sloitjch dotazech a zaten read/write dotazy. MySQL je
          rychlej v jednoduch dotazech s malm potem uivatel.
          Navc, MySQL nepodporuje mnoh vlatnosti zmnn v sekci
          vlastnosti. Zapracovali jsme na spolehlivosti a podporovanch
          vlastnostech, a vkon zvyujeme v kad verzi. Zajmavou
          strnku porovnvajc PostgreSQL a MySQL naleznete na
          http://openacs.org/philosophy/why-not-mysql.html. Za vvojem
          MySQL nen Open Source komunita, ale komern spolenost,
          pestoe svoje produkty distribuuje jako Open Source.
          
   Spolehlivost
          Jsme si vdomi, e databze mus bt spolehliv, jinak je
          nepouiteln. Sname se zveejovat dobe otestovan, stabiln
          kd s minimem chyb. Kad verze je vce ne msc v beta
          testovn, a nae historie verz ukazuje, e meme nabdnout
          stabiln, solidn verze, kter jsou pipraveny pro reln
          nasazen. V tto oblasti jsme srovnateln s dalmi databzemi.
          
   Podpora
          Na na mailov konferenci mete kontaktovat velkou skupinu
          vvoj a uivatel.problm. Nememe garantovat opravu,
          nicmn komern databze tak ne vdy nabdnou opravu. Podle
          ohlas je nae podpora hodnocena lpe ne u jinch DBMS a to
          dky pmmu kontaktu s vvoji, velkou komunitou uivatel,
          kvalitnmi manuly a pstupnm zdrojovm kdem. Pro uivatele,
          kte vyaduj podporu ke konkrtnm ppadm, existuje placen
          podpora (FAQ sekce 1.6).
          
   Cena
          PosgreSQL lze voln pouvat pro nekomern i komern pouit.
          Mete do svch produkt pidat n kd bez omezen, respektive
          v souladu s podmnkami na licenn smlouvy (v duchu BSD
          licence).
          
    1.15) Jak lze finann pomoci PostgreSQL?
    
   PosgreSQL m prvotdn infrastrukturu od naeho zatku v roce 1996.
   Vdme za to Marku Fournierovi, kter zaloil a spravoval tuto
   infrastrukturu nkolik let.
   
   Kvalitn infrastruktura je velice dleit pro kad open source
   projekt. Pedchz nedorozumnm, kter velice zdruj pokrok v
   projektu.
   
   Tato infrastruktura nen lacin. K jejmu zajitn je teba stle
   hradit urit msn a jednorzov stky. Pokud mte Vy nebo Vae
   spolenost penze, kter nm mete darovat, obrae se na
   http://store.pgsql.com/shopping/ a darujte je.
   
   Akoliv webov strnka zmiuje PostgreSQL, Inc. vklady jsou ureny
   pouze k podpoe projektu PostgreSQL a nepodporuj dnou existujc
   spolenost. Pokud to vyadujete, mete poslat kontrolu na nai
   kontaktn adresu.
d349 1
a349 4
   Pokud mte pklad spnho nasazen PostgreSQL, pihlat se na n
   advocacy site na http://advocacy.postgresql.org.
   
                             User client dotazy
d351 12
a362 19
    2.1) Kde naleznu ODBC ovladae pro PostgreSQL?
    
   Pro PostgreSQL existuj dva ODBC ovladae - PsqlODBC a OpenLink ODBC.
   
   PsqlODBC je ke staen na
   http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
   
   OpenLink mete zskat na http://www.openlinksw.com. Spolupracuje s
   jejich klientskm programovm vybavenm a je dostupn pro vechny jimi
   podporovan platformy (Win, Mac, Unix, VMS).
   
   Tento ovlada je uren pro ty, kte vyaduj podporu komern
   kvality, nicmn freeware verze je dostupn a funkn. Dotazy
   zaslejte na postgres95@@openlink.co.uk.
   
    2.2) Jak nstroje lze pout pro PostgreSQL a web?
    
   Pkn vod do databzovch technologi zabezpeujcch chod webovch
   strnek najdete na http://www.webreview.com.
d364 15
a378 31
   Pro tvorbu webu existuje excelentn rozhran PHP, kter naleznete na
   http://www.php.net.
   
   Pro sloitj ppady se asto pouv Perl a CGI.pm nebo mod_perl.
   
    2.3) Existuje grafick rozhran pro PostgreSQL?
    
   Pro PostgreSQL existuje nkolik grafickch rozhran: PgAccess
   (http://www.php.net), PgAdmin III (http://www.php.net), RHDB Admin
   (http://sources.redhat.com/rhdb/) a Rekall (
   http://www.thekompany.com/products/rekall/). Dle jet PhpPgAdmin
   (http://phppgadmin.sourceforge.net/) co je rozhran PostgreSQL
   zaloen na web technologii.
   
   plnj seznam najdete na
   http://techdocs.postgresql.org/guides/GUITools.
   
    2.4) Kter programovac jazyky maj podporu pro PostgreSQL?
    
   Vtina programovacch jazyk obsahuje rozhran pro PostgreSQL.
   Podvejte se do roziujcch modul Vaeho programovacho jazyka.
   
   Distribuce PostgreSQL obsahuje tato rozhran:
     * C (libpq)
     * Embbedded C (ecpg)
     * Java (jdbc)
     * Python (PyGreSQL)
     * TCL (libpgtcl)
       
   Dal rozhran jsou dostupn na http://gborg.postgresql.org v sekci
   Drivers/Interfaces.
d383 32
a414 152
    3.1) Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
    
   Pouijte volbu --prefix pi sputn configure.
   
    3.2) Pi startu postmaster, dostanu chybov hlen Bad System Call nebo
    core dump. Pro?
    
   Dvody mohou bt rzn, ale nejprve zkontrolujte, zda V systm
   podporuje System V extensions. PostgreSQL vyaduje v jde podporu
   sdlen pamti a semafor.
   
    3.3) Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate. Pro?
    
   Buto nemte sprvn nakonfigurovanou sdlenou pam v jde nebo
   musite zvtit jej velikost. Potebn velikost je zvisl na
   architektue a na tom, kolik pamovch buffer a backend mte
   povoleno pro postmastera. Pro vtinu systm s peddefinovanm potem
   backend a pamovch buffer je minimum zhruba 1MB. V PostgreSQL
   Administrator's Guide naleznete podrobnj informace o sdlen pamti
   a semaforech.
   
    3.4) Pi startu postmastera dostanu hlen o chyb IpcSemaphoreCreate.
    Pro?
    
   Pokud dostane chybovou zprvu IpcSemaphoreCreate: semget failed (No
   space left on device), pak vae jdro nem dost volnch semafor.
   PostgreSQL vyaduje jeden semafor pro kad backend v pozad. Doasnm
   eenm je start postmaster s limitem backend. Pouijte pepna -N s
   hodnotou men ne 32. plnm eenm je zven hodnot SEMMNS a
   SEMMNI jadra.
   
   Nefunkn semafory mohou zpsobit pd bhem intenzivnch databzovch
   operac.
   
   Pokud se tato chyba vyskytuje jet nkde jinde, mon nemte vbec
   nakonfigurovny semafory ve vaem jde. V PostgreSQL Administrator's
   Guide najdete podrobnj popis poadavk na sdlenou pamt a
   semafory.
   
    3.5) Jak povolit nebo zakzat pstup z jinch stanic?
    
   Pi vchozm nastaven PostgreSQL odepe pstup z jinch stanic ne
   lokln s pouitm UDP. Pstup z jinch stroj nen mon dokud jej
   nepovolte nastavenm tcpip_socket v postgresql.conf a urenm zpsobu
   autentifikace v $PGDATA/pg_hba.conf.
   
    3.6) Jak ladit databzov stroj na lep vkon?
    
   Urit pomohou indexy. Pkaz EXPLAIN ANALYZE Vm umon sledovat jak
   PostgreSQL interpretuje V dotaz a kter indexy pouv.
   
   Pi vt dvce INSERT uvaujte o nhrad pkazem COPY. Ten je
   mnohem rychlej neli samotn INSERT. Kad pkaz mimo blok BEGIN
   WORK/COMMIT se provd ve vlastn transakci. Zvate, zda-li by se
   nedalo nkolik pkaz spojit do jedn transakce. Tm se sn reie
   na transakce. Ped provedenm rozshlch zmn zrute indexy, kter po
   dokonen zmn opt vytvote.
   
   Mte nkolik dalch monost, jak zlepit vkon. Mete zakzat
   fsyn() pi startu postmastera pepnai -o -F. Tyto pepnae zabrn
   fsync(), tj. zpisu na disk po kad transakci.
   
   Mete zvit velikost pamovch buffer pouitch backendy tj.
   parametr -B postmasteru. Pokud ale tato hodnota bude pli velk, tak
   mon nespustte postmastera jeliko doshnete limitu sdlen pamti.
   Kad buffer m 8K a implicitn je 64 buffer.
   
   Dle mete pout pepna -S k zven limitu pamti pro backendy na
   doasn tdn. Hodnota je mnna v kilobytech a vchoz nastaven je
   512, tj. 512K.
   
   Mete pout pkaz CLUSTER, kter uspod fyzicky data v tabulkch
   podle indexu. Vce na manulovch strnkch pkazu CLUSTER.
   
    3.7) Jak jsou monosti ladn?
    
   Mte nkolik monost jak se dostat k uitenm stavovm informacm.
   
   Zaprv, pi pekladu pouijte pepna --enable-cassert, tm se zapne
   monitorovn a nsledn zastaven aplikace, kdy se proces v backendu
   dostane do neoekvanho stavu.
   
   Jak postmaster tak postgres m nkolik pepna umoujcch ladn.
   Postmaster nastartujte tak, abyste si byli jisti, e je standartn
   vstup a standartn chybov vstup pesmrovn do souboru logu,
   napklad:
    cd /usr/local/pgsql
    ./bin/postmaster > server.log 2>&1 &

   Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje
   uiten informace o problmech a chybch vyskytlch se na serveru.
   Postmaster m pepna -d urujc, jak podrobn maj bt reportovan
   informace, tj. debug level. Pozor, pi velk hodnot debug levelu
   rychle roste velikost souboru logu.
   
   Pokud neb postmaster, mete spustit backend PostgreSQL z pkazov
   dky a napsat svj SQL dotaz pmo v backendu (doporueno pouze pro
   ladn). Dotaz je v tomto ppad ukonen novou dkou, nikoliv
   stednkem. Pokud mte aplikaci peloenou s ladcmi symboly, mete
   pout debbuger k monitorovn procesu. Pokud nen backend sputn
   postmasterem, pak neb ve svm obvyklm prosted a tud nkter
   problmy dan interakc mezi backendy nemohou bt nasimulovny.
   
   Pokud b postmaster, spuse psql v jednom okn a pak si zjistte PID
   procesu postgres pouitho psql. V debuggeru sepipojte k postgresql
   PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql.
   Pokud ladte startup postgresu, pak nastavte PGOPTIONS="-W n" a spuse
   psql. Tento pepna zpsob pauzu n sekund, take budete mt as se
   pipojit k procesu, a nastavit breakpointy a pokraovat v startup
   posloupnosti.
   
   Pro ladn a men vkonu mohou bt uiten pepnae -s, -A a -t
   programu postgres (backend).
   
   Mete provst peklad s profilac, tak abyste vidli kolik asu
   zabraj jednotliv funkce. Soubory s profily backend jsou uloeny v
   adresi pgsql/data/base/dbname. Profil klienta pak v jeho aktulnm
   adresi. Korektn profilace v prosted Linux poaduje konfiguraci
   systmu s parametrem -DLINUX_PROFILE.
   
    3.8) Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
    
   Zvyte limit postmastera na maximln poet souasn sputnch
   backend.
   
   Vchoz hodnota je 32 backend. Tuto hodnotu zvte zastavenm a
   optovnm sputnm postmastera s parametrem -N nebo pravou
   postgresql.conf.
   
   Pi zven hodnoty -N nad 32 muste zvit hodnotu -B nad vchoz 64,
   -B mus bt minimln dvakrt vt, nebo jet lpe vce.
   Pravdpodobn zjistte, e pro velk poet proces backendu je nutn
   zvit nkter parametry jdra. Jsou to pedevm maximln velikost
   sdlen pamti SHMMAX, maximln poet semafr SEMMNS a SEMMNI,
   maximln poet proces NPROC, maximln poet proces uivatele
   MAXUPRC a maximln poet otevench soubor NFILE a NINODE. Dvod pro
   omezen maximlnho potu backend je fakt, e by mohlo dojt k
   vyerpn zdroj Vaeho systmu.
   
    3.9) K emu slou adres pgsql_tmp?
    
   Tento adres obsahuje doasn soubory vytvoen exekutorem dotaz.
   Napklad, kdy je nutn tdn k zajitn ORDER BY a tdn m
   vt nroky na prostor ne povoluje parametr -S backendu, pak je
   vytvoen doasn soubor k uloen extra daj.
   
   Doasn soubory jsou obvykle mazny automaticky, ale me se stt, e
   bhem tdn server spadne. Zastaven a dal start postmastera
   zajist odstrann soubor s tchto adres.
   
    3.10) Pro je poadovno dump a obnoven (load) databze bhem upgrade mezi
    velkmi verzemi PostgreSQL?
d416 41
a456 6
   PostgreSQL se minimln mn bhem malch verz, take nap. pi
   upgrade z 7.2 na 7.2.1 nen nutn dump a load databze. Ale vynamn
   verze asto mn intern formt systmovch tabulek a datovch
   soubor. Tyto zmny jsou natolik rozshl, e nelze zajistit zptnou
   kompatibilitu pro datov soubory. Dump ulo data v obecnm formtu,
   take mohou bt natena a pouvna v novm internm formtu.
d461 47
a507 48
    4.1) m se li binrn a normln kurzor?
    
   Popis najdete v manulov strnce DECLARE
   
    4.2) Jak zskat pouze prvn dek dotazu? Nhodn dek?
    
   Podvejte se do man. strnky pkazu FETCH, nebo pouijte SELECT ...
   LIMIT ...
   
   I kdy potebujete zskat pouze prvnch nkolik dk, je teba
   zpracovat vechna data, nap. pokud dotaz m ORDER BY. Pokud vak
   existuje index, kter odpovd ORDER BY, PostgreSQL me zskat pouze
   prvnch n dk a ukonit zpracovn dotazu.
   
   K zskn nhodnho dku pouijte:
    SELECT col
    FROM tab
    ORDER BY random()
    LIMIT 1;

    4.3) Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
    
   Pkaz \dt v psql zobraz seznam tabulek. pln seznam pkaz psql
   dostanete pkazem \?. Tak se mete podvat do zdrojovch kd psql
   do souboru pgsql/src/bin/psql/describe.c. Ten obsahuje SQL pkazy,
   kter se pouvaj v psql metapkazech. Dle mete spustit psql s
   pepnaem -E, kter zpsob zobrazen kadho dotazu, kter
   zpracovn metapkazu vyvol. PostgreSQL nabz SQLi INFORMATION
   SCHEMA s tabulkami obsahujc informace o databzi.
   
    4.4) Jak odstranm sloupec tabulky, jak zmnm jeho typ?
    
   Ponaje verz 7.3 mete pout pkaz ALTER TABLE DROP COLUMN. Ve
   starch verzch mete pout nsledujc postup:
    BEGIN;
    LOCK TABLE old_table;
    SELECT ... -- mimo sloupec, kter chceme odstranit
    INTO TABLE new_table;
    DROP TABLE old_table;
    ALTER TABLE new_table RENAME TO old_table;
    COMMIT;

   Pro zmnu typu sloupce je teba provst:
    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;
d509 2
a510 2
   Pot provete VACUUM FULL tab - uvolnte tm diskov prostor zabran
   nyn ji neplatnmi dky.
d512 2
a513 2
    4.5) Jak je maximln velikost dku, tabulky a databze?
    
a514 18
    Maximln velikost databze:           neomezena (existuj 32TB db)
    Maximln velikost tabulky:            32 TB
    Maximln velikost dky:              1.6 TB
    Maximln velikost poloky             1 GB
    Maximln poet dk v tabulce:       neomezeno
    Maximln poet sloupc v tabulce:     250-1600 podle typ
    Maximln poet index na tabulce:     neomezeno

   Ve skutenosti nic nen neomezeno, limitem bv vdy dostupn diskov
   pam nebo velikost operan pamti. Pokud mte nkterou z tchto
   hodnot neobvykle velkou, me dojt ke snen vkonu.
   
   Maximln velikost tabulky je 32 TB a nevyaduje podporu velkch
   soubor operanm systmem. Velk tabulky se ukldaj do nkolika 1 GB
   soubor take limity souborovho systmu nejsou podstatn.
   
   Maximln velikost tabulky a maximln poet sloupc meme
   zetynsobit nastavenm velikosti bloku na 32K.
d516 28
a543 5
    4.6) Kolik diskovho prostoru je poteba k uloen dat z
    
   normlnho textovho souboru?
   
   PostgreSQL vyaduje a ptinsobek diskovho prostoru k uloen dat z
d546 2
a547 2
   Napklad, uvaujme soubor se 100 tisci dky obsahujc na kad
   dce cel slo a textov popis. Text je v prmru dvacet byt
d549 4
a552 4
   obsahujc odpovdajc data bude zhruba 6.4 MB.
    36 byt: hlavika dku (piblin)
    24 byt: jedna celoseln poloka a jedna textov
   + 4 byty: ukazatel na strnku k ntici
d554 1
a554 3
    64 byt na dek

   Velikost datov strnky PostgreSQL je 8KB
d556 4
a559 3
    8192 byt na strnce
    ---------------------- = 128 dek na strnku
      64 byt za dek
d561 3
a563 3
    100000 dek
    -------------------- = 782 strnek (zaokrouhleno nahoru)
       128 dek na strnce
d565 1
a565 1
    782 * 8192 = 6, 406, 144 byt (6.4 MB)
d567 1
a567 1
   Indexy nemaj tak velkou reii, ale mohou bt tak velk, protoe
d570 1
a570 1
   Hodnoty NULL jsou uloeny v bitmapch, take spotebuj jen velmi mlo
d573 32
a604 47
    4.7) Jak zskm seznam vytvoench tabulek, index, databz?
    
   psql m sadu metapkaz k zobrazen tchto informac. Jejich seznam
   zskte pkazem \?. Dle se mete podvat na obsah systmovch
   tabulek zanajcch pg_. Sputn psql s parametrem -l provede vpis
   nzv vech databz.
   
   Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy pistupujc
   k systmovm tabulkmm.
   
    4.8) Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
    
   Kad dotaz nemus nutn pout existujc indexy. Index se pouije
   tehdy, kdy je tabulka vt ne urit minimln velikost, a dotaz
   vybr pouze procentuln malou st dk tabulky. To proto, e
   nhodn pstup k disku dan tenm indexu me bt pomalej ne
   linern ten tabulky nebo sekvenn ten.
   
   PostgreSQL rozhoduje o pouit index na zklad statistiky pstup k
   tabulce. Tyto statistiky se shromauj pkazy VACUUM ANALYZE nebo
   ANALYZE. Dky statistikm m optimizer informaci o potu dek v
   tabulce a me lpe rozhodnout o pouit index. Statistiky se uplatn
   pi uren optimlnho poad a metody spojen tabulek. Statistiky by
   se mli aktualizovat opakovan, tak jak se mn obsah tabulek.
   
   Indexy nejsou obyejn pouity pro setdn nebo spojen tabulek.
   Sekvenn zpracovn nsledovan explicitnm tdnm je obyejn
   rychlej ne indexn ten na velk tabulce.
   
   Jinak je tomu v ppad pouit LIMIT a ORDER BY, pi kterm se
   vtinou index pouije, vsledkem je pouze mal st tabulky. Funkce
   MAX() a MIN() nepouvaj indexy, ale je mon tut hodnotu zskat:
    SELECT col
    FROM tab
    ORDER BY col [ DESC ]
    LIMIT 1;

   Pokud si myslte, e optimizer myln zvolil sekvenn prohledvn
   tabulky, pouijte pkaz SET enable_seqscan TO 'off' a zkuste zda je
   indexn prohledvn rychlej.
   
   Pi vyhledvn na zklad vzoru jako je nap. opertor LIKE nebo ~ se
   indexy pouj pouze za uritch skutenost:
     * zatek hledanho vzoru mus bt ukotven k zatku, tj.
          + vzor LIKE nesm zanat %
          + ~ regulrn vraz mus zanat ^
     * vzor nesm zanat intervalem, nap. [a-e]
d606 6
a611 5
       nepouv indexy. Mete ale pout funkcionln indexy, kter
       jsou posny v sekci 4.12
     * pi inicializaci databze (initdb) mus bt pouito C locale
       (pozn. pekladatele - tud v naich podmnkch nepouiteln,
       nepracovalo by esk tdn).
d613 34
a646 42
    4.9) Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
    
   Podvejte se do manulov strnky pkazu EXPLAIN.
   
    4.10) Co to je R-tree index?
    
   R-tree index se pouv pro indexovn prostorovch dat. Hash index
   neme obslouit prohledvn oblast. B-tree index me dit
   vyhledn oblast v jedn dimenzi. R-tree index me podporovat
   hledn v multidimenzionlnch datech. Pouijeme-li napklad R-tree
   index na atributy typu point, pak systm me efektivn odpovdt na
   dotaz - vyber vechny body uvnit obdlnk.
   
   Pvodn nvrh R-tree je Guttman, A. "R-trees: A Dynamic Index
   Structure for Spatial Searching." Proceedings of the 1984 ACM SIGMOD
   Int'l Conf on Mgmt of Data, 45-57
   
   Tyto materily naleznete v Stonebraker's "Readings in Database
   Systems".
   
   Vestavn R-tree me slouit k indexaci polygon a oblast.
   Teoreticky meme R-tree pout i pro vce dimenz (jin ne 3D). Ve
   skutenosti ale takov rozen R-tree vyaduje trochu prce a ve
   souastnosti chyb dokumentace jak na to.
   
    4.11) Co je Genetic Query Optimizer?
    
   GEQO modul urychluje optimalizaci dotaz pi spojovn mnostv
   tabulek metodou Genetickch algoritm (GA). To umouje zskat velkho
   mnostv variant spojen pi neplnm prohledvnm.
   
    4.12) Jak provst vyhledvn regulrnho vrazu case sensitiv, insensitiv?
    Jak pout index pro case insensitive vyhledvn?
    
   Opertor ~ slou k porovn s regulrnm vrazem, jeho modifikace *~
   pedstavuje case insensitive vyhledvn. Jedn se o obdobu LIKE a
   ILIKE.
   
   Pro vyhledvn bez ohledu na velk mal psmena pouijeme:
    SELECT *
    FROM tab
    WHERE lower(col) = 'abc';
d648 4
a651 152
   V tomto ppad se nepouije standardn index. Nicmn, pouije se
   funkcionln index, pokud jej vytvote:
    CREATE INDEX tabindex ON tab (lower(col));

    4.13) Jak v dotazu detekovat, e poloka je NULL?
    
   Urte pomoc IS NULL nebo IS NOT NULL
   
    4.14) Jak jsou rozdly mezi rznmi znakovmi typy?
    
Typ         Intern nzev       Poznmka
--------------------------------------------------------------------------
VARCHAR(n)  varchar             omezeno maximln dlkou, bez doplnn mezerami
CHAR(n)     bpchar              etzec je doplnn mezerami do dan dlky
TEXT        text                bez hornho limitu na dlku
BYTEA       bytea               pole byt (bezpen lze uloit i znak NULL)
"char"      char                jeden znak

   S internmi nzvy se setkte v systmovm katalogu a v nkterch
   chybovch hlench.
   
   Prvn tyi uveden typy jsou tzv. varlena typy (tj. prvn tyi byty
   na disku nesou daj o dlce, nsleduj samotn data). Proto skuten
   pouit prostor je vdy o nco mlo vt ne deklarovan dlka.
   Naopak, tyto datov typy jsou komprimovnty TOASTem, take prostor na
   disku me bt ni ne je oekvno.
   
   VARCHAR(n) je vhodn pro ukldn text prommn dlky s pevn
   stanovenou maximln dlkou. TEXT je pro etzce bez omezen dlky s
   maximem jeden gigabajt.
   
   CHAR(n) slou k ukldn etzc stejn dlky. CHAR(n) dopln przdn
   znaky do specifikovan dlky, zatmco VARCHAR(n) ulo pouze pedan
   znaky. BYTEA je ureno pro ukldn binrnch dat, vetn NULL byte.
   Vechny zde popsan typy maj podobn vkonnostn charakteristiky.
   
    4.15.1) Jak vytvoit serial/auto-increment pole?
    
   PostgreSQL podporuje typ SERIAL. Pi jeho pouit se automaticky
   vytvo SEQUENCE. Napklad:
    CREATE TABLE person (
        id   SERIAL,
        name TEXT
    );

   je automaticky pevedeno do
    CREATE SEQUENCE person_id_seq;
    CREATE TABLE person (
        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
        name TEXT
    );
    CREATE UNIQUE INDEX person_id_key ON person(id);

   Viz dokumentace create_sequence v manulovch strnkch. Dle mete
   pout uniktn hodnotu OID kadho dku. Potom ale muste spoutt
   pg_dump s pepnaem -o, tak aby zstaly zachovny hodnoty OID (u
   pkazu copy COPY WITH OIDS).
   
    4.15.2) Jak zskat hodnotu SERIAL po vloen dku?
    
   Jednou z monost je zskat budouc hodnotu SERIAL funkc nextval()
   ped samotnm vloenm a pak ji vloit explicitn. Napklad v jakmsi
   pseudojazyku:
    newid = execute("SELECT nextval('person_id_seq')");
    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");

   Mete pak jet pout hodnotu newid v dalch dotazech, nap. jako
   hodnotu cizho kle. Nzev automaticky vytvoen sekvence je
   tabulka_sloupec_seq.
   
   Alternativn mete zskat hodnotu posledn generovou sekvenc funkc
   currval() po vloen:
    execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
    new_id = execute("SELECT currval('person_id_seq')");

   Konen mete pout OID hodnotu vrcenou pkazem INSERT, ale to je
   pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI
   modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme
   $sth->{pg_oid_status} po kadm $sth->execute().
   
    4.15.3) Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s
    jinmi uivateli?
    
   Nikoliv, currval() vrac hodnotu naposledy generovanou ve vaem
   backendu, a ta tud nen spolen vem uivatelm.
   
    4.15.4) Pro nen vygenerovan slo pouito pi peruen transakce? Pro
    vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?
    
   K zajitn efektivnosti soubhu, jsou hodnoty posloupnosti, kdy se o
   n pod, a sekvence nen zamena do ukonen transakce. To zpsobuje
   dry v slovn ze zruench transakc.
   
    4.16) Co to je OID? Co je to TID?
    
   Kad dek vytvoen v PostgreSQL zsk jedinen OID. Vechna OID
   generovan bhem inicializace databze jsou men ne 16384
   (include/access/transam.h). Vechna OID generovan na poadavek
   uivatele jsou rovna nebo vy tto hodnot. Normln, vechna OID
   jsou jedinen nejen uvnit tabulky nebo databze, ale v rmci cel
   instalace PostgreSQL
   
   PostgreSQL pouv OID ve svm internm systmu tabulek k vytvoen
   relac. Tato OID mohou bt pouita k identifikaci konkrtnho
   uivatele a pouita v spojen. Pro OID hodnoty je doporuen typ OID.
   Nad tmto sloupcem mete vytvoit index pro urychlen pstupu.
   
   OID jsou dna vem dkm z centrln oblasti a jsou pouita v kad
   databzi. Pokud potebujete zmnit OID, nebo chcete zkoprovat tabulku
   s pvodnmi OID, lze pout:
        CREATE TABLE new_table(old_oid oid, mycol int);
        SELECT old_oid, mycol INTO new FROM old;
        COPY new TO '/tmp/pgtable';
        DELETE FROM new;
        COPY new WITH OIDS FROM '/tmp/pgtable';

   OID jsou uloena jako 4bajtov integer a peteou po tyech
   miliardch. Nebylo hleno, e by se tak nkdy stalo, pesto ale
   plnujeme odstranit tento limit dv ne se tak stane.
   
   TID se pouvaj i identifikaci fyzickch dk s hodnotou bloku a
   offsetu. TIDs se mn modifikac dk (pouv se jako ukazatel
   indexu fyzickho dku).
   
    4.17) Jak je vznam nkterch vraz pouitch v PostgreSQL?
    
   V nkterch zdrojovch kdech nebo star dokumentaci se mete setkat
   s nsledujcmi vrazy, kter maj ir vznam. Zde je pklad
   nekterch:
     * tabulka, relace, tda (table, relation, class)
     * dek, zznam, ntice (row, record, tuple)
     * sloupec, poloka, atribut (column, field, attribute)
     * vyhledn, vbr (retrieve, select)
     * nhrada, prava (replace, update)
     * pidn, vkldn (append, insert)
     * OID, serial value (OID, serial value)
     * portal, kurzor (portal, cursor)
     * range variable, jmno tabulky, alias tabulky (range variable,
       table name, table alias)
       
   seznam tchto vraz mete nalzt na
   http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
   /glossary.html.
   
    4.18) Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
    AllocSetAlloc()"?
    
   Pravdpodobn dolo k vyerpn virtuln pami na Vaem systmu,
   nebo jdro m nzk limit pro urit zdroje. Vyzkouejte ped startem
   posmatera
    ulimit -d 262144
    limit datasize 256m
d653 3
a655 39
   Zle na Vaem shellu, zda budou tyto pkazy spn, mly by zvit
   limit datovho segmentu pro Vae procesy a umonit tak dokonen
   dotazu. Tyto pkazy se aplikuj na aktuln proces a vechny synovsk
   procesy vytvoen po proveden pkazu. Pokud mte problmy s SQL
   klientem protoe backend vrac pli mnoho dat, zkuste zvit limity
   ped startem klienta.
   
    4.19) Jak se dozvm, kterou verzi PostgreSQL pouvm?
    
   V psql spuste SELECT version();
   
    4.20) Pro operace s velkmi objekty kon "invalid large obj descriptor"?
    
   Vechny operace s velkmi objekty - lo_open, lo_close, ... muste
   spoutt v transakci, tj. mezi pkazy BEGIN WORK a COMMIT.
   
   PostgreSQL uvoluje handle velkch objekt pi skonen transakce.
   Pokud budete pracovat s velkmi objekty mimo transakci, pravdpodobn
   dostanete toto chybov hlen, protoe handle ji budou neplatn.
   Pokud pouvte interface podobn ODBC muste nastavit set auto_commit
   off.
   
    4.21) Jak vytvoit sloupec obsahujc implicitn aktuln datum?
    
   Pouijte CURRENT_TIMESTAMP:

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

    4.22) Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
    
   Dvj verze (ped 7.4) spojovali vnoen dotazy k vnjm
   sekvennm tenm vsledku poddotazu pro kad dek vnjho dotazu.
   Pokud poddotaz vrtil nkolik mlo dk IN bylo rychl. Pro ostatn
   ppady je vhodn nahradit IN EXISTS:
    SELECT *
    FROM tab
    WHERE col IN (SELECT subcol FROM subtab);

   na:
d658 1
a658 1
   WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
d660 1
a660 4
   Pro urychlen vytvoete index pro subcol.
   
   Ve verzi 7.4 a pozdjch, IN pouv stejn sofistikovanou techniku
   spojovn tabulek jako ostatn dotazy a je preferovan ped EXISTS.
d662 117
a778 6
    4.23) Jak provst vnj spojen (outer join)?
    
   PostgreSQL podporuje vnj spojen tabulek standardnmi SQL pkazy.
   Zde jsou dva pklady:
    SELECT *
    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
d781 2
a782 21
    SELECT *
    FROM t1 LEFT OUTER JOIN USING (col);

   Tyto identick dotazy napoj t1.col na t2.col a jet pid
   nepipojen dky z t1 (kter nemaj obdoby v t2). Prav spojen
   (RIGHT JOIN) pid nepipojen dky z t2. FULL JOIN vrt vechny
   dky, vetn nepipojench z tbulek t1 a t2. Klov slovo OUTER je
   nepovinn a ve se na LEFT, RIGHT a FULL join. Bn spojen se
   nazv INNER JOIN.
   
   V dvjch verzch se vnj spojen tabulek mohlo simulovat pomoc
   UNION a NOT IN. Napklad pro spojen tabulek tab1 a tab2, je
   nsledujc dotaz ekvivalentn k vnjmu spojen dvou tabulek:
    SELECT tab1.col2, tab2.col2
    FROM tab1, tab2
    WHERE tab1.col1 = tab2.col1
    UNION ALL
    SELECT tab1.col2, NULL
    FROM tab1
    WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
    ORDER BY col1;
d784 66
a849 76
    4.24) Jak provst dotaz z vce databz?
    
   PostgreSQL nepodporuje dotazy do jin ne aktuln databze.
   
   contrib/dblink nabz funkce umoujc proveden dotazu v jin
   databzi. Klient si me otevt simultln pipojen do rznch db
   bez omezen.
   
    4.25) Me funkce vrtit vce dk nebo sloupc?
    
   V PostgreSQL 7.3 mete jednodue vracet vce dk nebo sloupc z
   funkce, viz:
   http://techdocs.postgresql.org/guides/SetReturningFunctions.
   
    4.26) Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL
    funkcch?
    
   Peloen kd PL/pgSQL funkce je uloen ve vyrovnvac pamti, tj.
   funkce je pekldna pouze pi zmn kdu, nikoliv ped kadm volnm
   funkce. Nechtnm vedlejm efektem je, e voln funkce sele, kdy
   se funkce odkazuje na doasnou tabulku, pokud tato tabulka byla od
   pekladu funkce zruena (akoliv ji byla znovu vytvoena a existuje).
   Jedinm eenm problmu je pstup k doasn tabulce pomoc EXECUTE,
   tj. dynamick provdn dotazu. Tento pkaz zajist opakovan peklad
   dotazu pi kadm voln funkce.
   
    4.27) Jak jsou monosti replikace databz?
    
   Existuje nkolik dostupnch een master/slave replikac, tj umouj
   modifikace master databze a slave databzm umouj pouze ten. Na
   konci http://gborg.PostgreSQL.org/genpage?replication_research najdete
   jejich seznam. Na een multi-master replikaci se pracuje na
   http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
   
    4.28) Jak jsou monosti ifrovn databz?
    
     * contrib/pgcrypto obsahuje ifrovac funkce pouiteln v SQL
       dotazech.
     * K ifrovn penosu dat z klienta na server, mus bt server
       peloen s podporou ssl a pepna ssl v postgresql.conf mus bt
       nastaven na hodnotu true. Klient mus mt vytvoen zznam hostssl
       v pg_hba.conf a tak mt povolen reim ssl. Lze pout i jin
       prostedky, nejen nativn podporu ssl v PostgreSQL, nap. stunel a
       ssh.
     * Hesla uivatel databze jsou zaifrovna ponaje verz 7.3. Ve
       starch verzch toto chovn muselo bt vynuceno volbou
       PASSWORD_ENCRYPTION v postgresql.conf
     * Server me bet na ifrovanm souborovm systmu.
     _________________________________________________________________
   
                           Roziovn PostgreSQL
                                      
    5.1) Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
    
   Problm me bt zpsoben mnoha okolnostmi. Vyzkouejte si svoji
   funkci nejdve v njak jednoduch aplikaci.
   
    5.2) Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
    PostgreSQL?
    
   Polete sv rozen do konference pgsql-hackers, a ono pak mon
   skon v podadresi contrib.
   
    5.3) Jak napsat funkci v C vracejc ntici?
    
   Funkce vracejc tabulky jsou podporovan PostgreSQL 7.3 a vy pro
   jazyky C, PL/PgSQL a SQL. Vce naleznete v The Programmer's Guide.
   Pklady tchto funkc pro C naleznete v contrib/tablefunc.
   
    5.4) Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci
    vzata v potaz. Pro?
    
   Makefile nem informace o zvislostech mezi hlavikovmi soubory.
   Muste provst make clean a pak make. Pokud pouvte gcc, mete
   pout pepna --enable-depend pkazu configure k automatickmu
   een zvislost pekladaem.
@


1.4
log
@Update copyright for 2006.  Update scripts.
@
text
@d148 1
a148 1
   Dl Copyright (c) 1996-2006, PostgreSQL Global Development Group
@


1.4.2.1
log
@Backpatch FAQs to stable branch.
@
text
@d148 1
a148 1
   Dl Copyright (c) 1996-2007, PostgreSQL Global Development Group
@


1.3
log
@Here's the patch to fix a lot of markup errors in the HTML FAQs. Doesn't
change content (at least not supposed to).

Magnus Hagander
@
text
@d148 1
a148 1
   Dl Copyright (c) 1996-2005, PostgreSQL Global Development Group
@


1.3.2.1
log
@Update AIX FAQ to show readline options more clearly.

Backpatch FAQ's to 8.1.X.
@
text
@d148 1
a148 1
   Dl Copyright (c) 1996-2006, PostgreSQL Global Development Group
@


1.2
log
@Repair name.
@
text
@a0 851
asto kladen dotazy (FAQ) PostgreSQL
=====================================

Obecn otzky
=============
1.1 Co je PostgreSQL? Jak se vyslovuje?
1.2 Jak je licence na PostgreSQL?
1.3 Na kterch Unixex lze spustit PostgreSQL?
1.4 Kter ne-unixov platformy jsou podporovan?
1.5 Kde mohu zskat PostgreSQL?
1.6 Kde mohu zskat podporu?
1.7 Kde je posledn verze?
1.8 Jak je dostupn dokumentace?
1.9 Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
1.10 Jak se mohu nauit SQL?

1.11 Nem PostgreSQL problmy s rokem 2000?
1.12 Jak se pipojit k vvojskmu tmu?
1.13 Kam podat report o chyb?
1.14 Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
1.15 Jak lze finann pomoci PostgreSQL?

User client dotazy
==================
2.1 Kde naleznu ODBC ovladae pro PostgreSQL?
2.2 Jak nstroje lze pout pro PostgreSQL a web?
2.3 Existuje grafick rozhran pro PostgreSQL?
2.4 Kter programovac jazyky maj podporu pro PostgreSQL?

Administrativn dotazy
======================
3.1 Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
3.2 Pi startu postmaster, dostanu chybov hlen Bad System Call nebo
core dump. Pro? 3.3 Pi startu postmastera dostanu hlen o chyb
IpcMemoryCreate. Pro? 3.4 Pi startu postmastera dostanu hlen o
chyb IpcSemaphoreCreate. Pro? 3.5 Jak povolit nebo zakzat pstup z
jinch stanic? 3.6 Jak ladit databzov stroj na lep vkon?

3.7 Jak jsou monosti ladn?
3.8 Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
3.9 K emu slou adres pgsql_tmp?

3.10 Pro je poadovno dump a obnoven (load) databze bhem upgrade
mezi velkmi verzemi PostgreSQL?

Provozn dotazy
===============
4.1 m se li binrn a normln kurzor?
4.2 Jak zskat pouze prvn dek dotazu? Nhodn dek?
4.3 Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
4.4 Jak odstranm sloupec tabulky, jak zmnm jeho typ?
4.5 Jak je maximln velikost dku, tabulky a databze?
4.6 Kolik diskovho prostoru je poteba k uloen dat z normlnho
textovho souboru? 4.7 Jak zskm seznam vytvoench tabulek, index,
databz? 4.8 Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
4.9 Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?

4.10 Co to je R-tree index?
4.11 Co je Genetic Query Optimizer?
4.12 Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn? 4.13 Jak
v dotazu detekovat, e poloka je NULL? 4.14 Jak jsou rozdly mezi
rznmi znakovmi typy? 4.15.1 Jak vytvoit serial/auto-increment pole?
4.15.2 Jak zskat hodnotu SERIAL po vloen dku?

4.15.3 Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s
jinmi uivateli? 4.15.4 Pro nen vygenerovan slo pouito pi
peruen transakce? Pro vznikaj dry v slovn vlastn
sekvenc/SERIAL sloupce? 4.16 Co to je OID? Co je to TID?

4.17 Jak je vznam nkterch vraz pouitch v PostgreSQL?
4.18 Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
AllocSetAlloc()"? 4.19 Jak se dozvm, kterou verzi PostgreSQL pouvm?
4.20 Pro operace s velkmi objekty kon "invalid large obj
descriptor"? 4.21 Jak vytvoit sloupec obsahujc implicitn aktuln
datum? 4.22 Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
4.23 Jak provst vnj spojen (outer join)?

4.24 Jak provst dotaz nap nkolika databzemi?
4.25 Me funkce vrtit vce dk nebo sloupc?
4.26 Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL
funkcch? 4.27 Jak jsou monosti replikace databz?

4.28 Jak jsou monosti ifrovn databz?

Roziovn PostgreSQL
======================
5.1 Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
5.2 Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
PostgreSQL? 5.3 Jak napsat funkci v C vracejc ntici?

5.4 Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci
vzata v potaz. Pro?
------------------------------------------------------------------------

Obecn otzky
=============

1.1 Co je PostgreSQL? Jak se vyslovuje?
---------------------------------------

PostgreSQL se vyslovuje Post-Gres-Q-L.

PostgreSQL vychz z databze POSTGRES - vzkumnho prototypu DBMS nov
generace. Z postgresu byl pevzat siln datov model a bohat soubor
datovch typ a jeho dotazovac jazyk PostQuel byl nahrazen rozenou
podmnoinou jazyka SQL. PostgreSQL lze pouvat bez omezen a jeho
zdrojov kdy jsou voln k dispozici.

PostgreSQL vyvj tm vvoj pihlench do vvojsk konference
PostgreSQL. Souasnm koordintorem je Marc G. Fournier. (Odpov 1.6. -
jak se zapojit). Tento tm je zodpovdn za veker vvoj PostgreSQL.

Autory prvn verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
portace, testovn, ladn a roziovn kdu se zapojilo mnoho dalch
vvoj . Pvodni kd Postgresu, ze kterho PostgreSQL vychz, je
vsledkem sil mnoha student a programtor pracujcch pod vedenm
prof. Michaela Stonebrakera na University of California v Berkley.

Pvodn nzev software z Berkley byl Postgres. Po pidn jazyka SQL se
nzev zmnil na Postgres95. Koncem roku 1996 byl RDBMS pejmenovn na
PostgreSQL.

1.2 Jak je licence na PostgreSQL?
----------------------------------

PostgreSQL je pedmtem nsledujcch autorskch prv:

Dl copyright (c) 1996-2002, PostgreSQL Global Development Group

Dl copyright (c) 1994-6, Regents of the University of California

Udluje se oprvnn k uit, rozmnoovn, provdn prav a
roziovn tohoto softwaru a dokumentace k nmu, pro jakkoli ely,
bez licennho poplatku a bez psemn licenn smlouvy, za podmnky, e
na vech jeho kopich je uvedeno oznmen o ve uvedench prvech,
jako i obsah tohoto a dvou nsledujcch odstavc.

THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V DNM
PPAD ODPOVDNA DN TET OSOB ZA PMOU, NEPMOU, ZVLTN,
NAHODILOU NEBO VSLEDNOU KODU, VETN ULHO ZISKU, ZPSOBENOU UITM
TOHOTO SOFTWARU A DOKUMENTACE K NMU, A TO I V PPAD, E THE
UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MONOSTI VZNIKU TAKOV
KODY.

THE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE SPECIFICKM
ELM. NͮE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A LE" A THE
UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO DRBU, PODPORU,
AKTUALIZACI, VYLEPEN NEBO MODIFIKACI.

Ve uveden je BSD licence, bn licence otevenho zdroje. Nen zde
dn omezen ohledn uit kdu zdroje. Jsme s tm spokojeni a nemme v
myslu na tto skutenosti cokoli mnit.

1.3 Na kterch Unixex lze spustit PostgreSQL?
---------------------------------------------

PostgreSQL b na vech modernch unixovch platformch. V instalanch
instrukcch naleznete aktuln seznam vech platforem na kterch byla
testovnm ovena funkcionalita PostgreSQL.

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

Klient
------

Knihovna libpq, psql a nkter dal moduly byly peloeny pro MS
Windows. Klienta lze provozovat na MS Windows, ten prostednictvm
TCP/IP protokolu komunikuje se serverem bcm na nkter z
podporovanch Unixovch platforem. K pekladu lze pout win32.mak a
Win32 knihovny libpq a psql. K databzi PostgerSQL lze pistupovat skrze
rozhran ODBC.

Server
------

Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou
Cygwin, Cygnus Unix/NT porting library. Na nativnm portu pro MS Win
NT/2000/XP se pracuje. Existujc port pro Novell Netware 6 naleznete na
http://forge.novell.com.

1.5 Kde mohu zskat PostgreSQL?
-------------------------------

Primrnm anonymnm ftp serverem pro PostgreSQL je
ftp://ftp.PostgreSQL.org/pub . Seznam zrcadel naleznete na naich
webovch strnkch.

1.6 Kde mohu zskat podporu?
----------------------------

Hlavnm mailov konference je pgsql-general@@PostgreSQL.org. Slou k
diskuzm ohledn PostgreSQL. Pihlste se zaslnm mailu obsahujc
nsledujc dky v tle dopisu (nikoliv v zhlav - subjectu)

subscribe
end

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

Mete si vydat denn pehled (diggest), kter m zhruba 30K denn
zprv.

Konference psql-bugs je urena k zasln zprv o chybch. Pro
pihlen polete mail se stejnm obsahem jako v pedchozm ppad na
adresu mailto:pgsql-bugs-request@@PostgreSQL.org.

Do vvojsk konference se pihlste odeslnm dopisu s ji zmiovanm
obsahem na mailto:pgsql-hackers-request@@PostgreSQL.org.

Seznam dalch konferenc naleznete na strnkch PostgreSQL
http://www.postgresql.org

1.7 Kde je posledn verze?
--------------------------

Posledn verz je PostgreSQL 7.4.. Plnujeme uvolnit velkou verzi
kadch est a osm msc.

1.8 Jak je dostupn dokumentace?
---------------------------------

Rzn manuly, manulov strnky a nkolik malch testovacch pklad
jsou sousti distribuce. Podvejte se do adrese /doc. Manuly jsou
pstupn online na http://www.PostgreSQL.org/docs.

Na adresch http://www.PostgreSQL.org/docs/awbook.html a
http://www.commandprompt.com/ppbook/ naleznezte dv online knihy o
PostgreSQL. Seznam dostupn literatury je na
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor
technickch lnk s tematikou PostgresQL najdete na
http://techdocs.PostgreSQL.org/.

psql m uiten metapkaz \d slouc k zobrazen informac o typech,
opertorech, funkc, agreganch funkc atd.

Vce dokumentace naleznete na naich webovch strnkch.

1.9 Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
------------------------------------------------------------------

PostgreSQL podporuje rozenou podmnoinu SQL-92. V naem TODO [1]
najdete seznam znmch chyb, chybjcch vlastnost a seznam vlastnost,
kter budou do systmu implementovny v budoucnu (vetn priorit).

1.10 Jak se mohu nauit SQL?
----------------------------

V knize The PostgreSQL book na
http://www.PostgreSQL.org/docs/awbook.html je vysvtlen jazyk SQL (vyla
esky). Dal dostupnou knihou je http://www.commandprompt.com/ppbook.
Kvalitn nvody naleznete na
http://www.intermedia.net/support/sql/sqltut.shtm, na
http://www.intermedia.net/support/sql/sqltut.shtm [2] , a na
http://sqlcourse.com.

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

Mnoho uivatel doporuuje The Practical SQL Handbook, Bowman, Judith
S., et al., Addison-Wesley. Jin preferuj The Complete Reference SQL,
Groff et al., McGraw-Hill.

1.11 Nem PostgreSQL problmy s rokem 2000?
-------------------------------------------

Nem, meme pracovat s datumy po roce 2000 naeho letopotu i ped
rokem 2000 p.n.l.

1.12 Jak se pipojit k vvojskmu tmu?
-----------------------------------------

Nejdve si sthnte nejnovj zdroje a pette si vvojskou
dokumentaci na naem webu nebo v distribuci. Pak se pihlate do
konferenc pgsql-hackers a pgsql-patches. Kvalitn zplaty poslejte do
pgsql-patches.

Prvo commit m v cvs archivu asi tincti lid. Kad z nich poslal
mnoho kvalitnch zplat, take tehdej commiters mli jistotu, e budou
pedkldat jenom kvalitn zplaty a mohli jim pedlit vt prva.

1.13 Kam podat report o chyb?
------------------------------

Navtivte nai PostgreSQL BugTool strnku na
http://www.PostgreSQL.org/bugs/bugs.php, kter obsahuje nvod a smrnice
jak podat chybov report.

Ovte si na naem ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li mte
nejnovj verzi PostgreSQL a zda-li k n neexistuj njak zplaty.

1.14 Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
--------------------------------------------------------------

Existuje nkolik hledisek jak porovnvat software: vlastnosti, vkon,
spolehlivost, podpora a cena.

Vlastnosti
----------

PostgreSQL m hodn spolench vlastnost s velkmi komernmi DBMS,
nap. transakce, vnoen dotazy, spout, pohledy, kontrolu referenn
integrity a sofistikovan zamykn. Podporuje nkter vlastnosti, kter
tyto systmy nemaj, uivatelem definovan typy, ddinost, pravidla,
MVCC redukujc zamykn.

Vkon
-----

Vkonnostn je na tom PostgreSQL podobn jako dal komern ale i open
source databze, v nem je rychlej, jindy pomalej. V porovnn s
MySQL a podobnmi databzovmi systmy je PostgreSQL rychlej pi
vceuivatelskm pstupu, sloitjch dotazech a zaten read/write
dotazy. MySQL je rychlej v jednoduch dotazech s malm potem
uivatel. Navc, MySQL nepodporuje mnoh vlatnosti zmnn v sekci
vlastnosti. Zapracovali jsme na spolehlivosti a podporovanch
vlastnostech, a vkon zvyujeme v kad verzi. Zajmavou strnku
porovnvajc PostgreSQL a MySQL naleznete na
http://openacs.org/philosophy/why-not-mysql.html. Za vvojem MySQL nen
Open Source komunita, ale komern spolenost, pestoe svoje produkty
distribuuje jako Open Source.

Spolehlivost
------------

Jsme si vdomi, e databze mus bt spolehliv, jinak je nepouiteln.
Sname se zveejovat dobe otestovan, stabiln kd s minimem chyb.
Kad verze je vce ne msc v beta testovn, a nae historie verz
ukazuje, e meme nabdnout stabiln, solidn verze, kter jsou
pipraveny pro reln nasazen. V tto oblasti jsme srovnateln s
dalmi databzemi.

Podpora
-------

Na na mailov konferenci mete kontaktovat velkou skupinu vvoj a
uivatel.problm. Nememe garantovat opravu, nicmn komern
databze tak ne vdy nabdnou opravu. Podle ohlas je nae podpora
hodnocena lpe ne u jinch DBMS a to dky pmmu kontaktu s vvoji,
velkou komunitou uivatel, kvalitnmi manuly a pstupnm zdrojovm
kdem. Pro uivatele, kte vyaduj podporu ke konkrtnm ppadm,
existuje placen podpora (FAQ sekce 1.6).

Cena
----

PosgreSQL lze voln pouvat pro nekomern i komern pouit. Mete
do svch produkt pidat n kd bez omezen, respektive v souladu s
podmnkami na licenn smlouvy (v duchu BSD licence).

1.15 Jak lze finann pomoci PostgreSQL?
----------------------------------------

PosgreSQL m prvotdn infrastrukturu od naeho zatku v roce 1996.
Vdme za to Marku Fournierovi, kter zaloil a spravoval tuto
infrastrukturu nkolik let.

Kvalitn infrastruktura je velice dleit pro kad open source
projekt. Pedchz nedorozumnm, kter velice zdruj pokrok v
projektu.

Tato infrastruktura nen lacin. K jejmu zajitn je teba stle
hradit urit msn a jednorzov stky. Pokud mte Vy nebo Vae
spolenost penze, kter nm mete darovat, obrae se na
http://store.pgsql.com/shopping/ a darujte je.

Akoliv webov strnka zmiuje PostgreSQL, Inc. vklady jsou ureny pouze
k podpoe projektu PostgreSQL a nepodporuj dnou existujc
spolenost. Pokud to vyadujete, mete poslat kontrolu na nai
kontaktn adresu.

Pokud mte pklad spnho nasazen PostgreSQL, pihlat se na n
advocacy site na http://advocacy.postgresql.org.

------------------------------------------------------------------------

User client dotazy
==================

2.1 Kde naleznu ODBC ovladae pro PostgreSQL?
---------------------------------------------

Pro PostgreSQL existuj dva ODBC ovladae - PsqlODBC a OpenLink ODBC.

PsqlODBC je ke staen na
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.

OpenLink mete zskat na http://www.openlinksw.com. Spolupracuje s
jejich klientskm programovm vybavenm a je dostupn pro vechny jimi
podporovan platformy (Win, Mac, Unix, VMS).

Tento ovlada je uren pro ty, kte vyaduj podporu komern kvality,
nicmn freeware verze je dostupn a funkn. Dotazy zaslejte na
postgres95@@openlink.co.uk.

2.2 Jak nstroje lze pout pro PostgreSQL a web?
--------------------------------------------------

Pkn vod do databzovch technologi zabezpeujcch chod webovch
strnek najdete na http://www.webreview.com.

Pro tvorbu webu existuje excelentn rozhran PHP, kter naleznete na
http://www.php.net.

Pro sloitj ppady se asto pouv Perl a CGI.pm nebo mod_perl.

2.3 Existuje grafick rozhran pro PostgreSQL?
----------------------------------------------

Pro PostgreSQL existuje nkolik grafickch rozhran: PgAccess
(http://www.php.net), PgAdmin (http://www.php.net), RHDB Admin
(http://sources.redhat.com/rhdb/) a Rekall (
http://www.thekompany.com/products/rekall/). Dle existuje PHPPgAdmin
(http://phppgadmin.sourceforge.net/) rozhran PostgreSQL zaloen na web
technologii.

plnj seznam najdete na
http://techdocs.postgresql.org/guides/GUITools.

2.4 Kter programovac jazyky maj podporu pro PostgreSQL?
----------------------------------------------------------

Vtina programovacch jazyk obsahuje rozhran pro PostgreSQL.
Podvejte se do roziujcch modul Vaeho programovacho jazyka.

Distribuce PostgreSQL obsahuje tato rozhran:

    - C (libpq)
    - Embbedded C (ecpg)
    - Java (jdbc)
    - Python (PyGreSQL)
    - TCL (libpgtcl)

Dal rozhran jsou dostupn na http://gborg.postgresql.org v sekci
Drivers/Interfaces.

------------------------------------------------------------------------

Administrativn dotazy
======================

3.1 Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
--------------------------------------------------------------

Pouijte volbu --prefix pi sputn configure

3.2 Pi startu postmaster, dostanu chybov hlen Bad System Call nebo core dump. Pro?
----------------------------------------------------------------------------------------

Dvody mohou bt rzn, ale nejprve zkontrolujte, zda V systm
podporuje System V extensions. PostgreSQL vyaduje v jde podporu
sdlen pamti a semafor.

3.3 Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate. Pro?
-------------------------------------------------------------------------

Buto nemte sprvn nakonfigurovanou sdlenou pam v jde nebo musite
zvtit jej velikost. Potebn velikost je zvisl na architektue a na
tom, kolik pamovch buffer a backend mte povoleno pro postmastera.
Pro vtinu systm s peddefinovanm potem backend a pamovch
buffer je minimum zhruba 1MB. V
http://www.postgresql.org/docs/view.php?version=current&idoc=1&file=kern
el-resources.html [3] naleznete podrobnj informace o sdlen pamti a
semaforech.

3.4 Pi startu postmastera dostanu hlen o chyb IpcSemaphoreCreate. Pro?
----------------------------------------------------------------------------

Pokud dostane chybovou zprvu IpcSemaphoreCreate: semget failed (No
space left on device), pak vae jdro nem dost volnch semafor.
PostgreSQL vyaduje jeden semafor pro kad backend v pozad. Doasnm
eenm je start postmastera s limitem backend. Pouijte pepna -N s
hodnotou men ne 32. plnm eenm je zven hodnot SEMMNS a SEMMNI
jadra.

Nefunkn semafory mohou zpsobit pd bhem intenzivnch databzovch
operac.

Pokud se tato chyba vyskytuje jet nkde jinde, mon nemte vbec
nakonfigurovny semafory ve vaem jde. V PostgreSQL Administrator's
Guide najdete podrobnj popis poadavk na sdlenou pamt a semafory.

3.5 Jak povolit nebo zakzat pstup z jinch stanic?
-----------------------------------------------------

Pi vchozm nastaven PostgreSQL odepe pstup z jinch stanic ne
lokln s pouitm UDP. Databze se zpstupn jinm stanicm nastavenm
pepnae -i postmastera a povolenm stanice a urenm reimu
autentifikace v $PGDATA/pg_hba.conf. Tm se povol TCP/IP spojen.
ZASTARAL

3.6 Jak ladit databzov stroj na lep vkon?
----------------------------------------------

Urit pomohou indexy. Pkaz EXPLAIN zobraz zpsob interpretace Vaeho
dotazu a pouit index.

Pi vt dvce INSERT uvaujte o nhrad pkazem COPY. Ten je mnohem
rychlej neli samotn INSERT. Kad pkaz mimo blok BEGIN WORK/COMMIT
se provd ve vlastn transakci. Zvate, zda-li by se nedalo nkolik
pkaz spojit do jedn transakce. Tm se sn reie na transakce. Ped
provedenm rozshlch zmn zrute indexy, kter po dokonen zmn opt
vytvote.

Mte nkolik dalch monost, jak zlepit vkon. Mete zakzat fsyn()
pi startu postmastera pepnai -o -F. Tyto pepnae zabrn fsync(),
tj. zpisu na disk po kad transakci.

Mete zvit velikost pamovch buffer pouitch backendy tj.
parametr -B postmasteru. Pokud ale tato hodnota bude pli velk, tak
mon nespustte postmastera jeliko doshnete limitu sdlen pamti.
Kad buffer m 8K a implicitn je 64 buffer.

Dle mete pout pepna -S k zven limitu pamti pro backendy na
doasn tdn. Hodnota je mnna v kilobytech a vchoz nastaven je
512, tj. 512K.

Mete pout pkaz CLUSTER, kter uspod fyzicky data v tabulkch
podle indexu. Vce na manulovch strnkch pkazu CLUSTER.

3.7 Jak jsou monosti ladn?
------------------------------

Mte nkolik monost jak se dostat k uitenm stavovm informacm.

Zaprv, pi pekladu pouijte pepna --enable-cassert, tm se zapne
monitorovn a nsledn zastaven aplikace, kdy se proces v backendu
dostane do neoekvanho stavu.

Jak postmaster tak postgres m nkolik pepna umoujcch ladn.
Postmaster nastartujte tak, abyste si byli jisti, e je standartn
vstup a standartn chybov vstup pesmrovn do souboru logu,
napklad:

cd /usr/local/pgsql
./bin/postmaster > server.log 2>&1 &

Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje uiten
informace o problmech a chybch vyskytlch se na serveru. Postmaster m
pepna -d urujc, jak podrobn maj bt reportovan informace, tj.
debug level. Pozor, pi velk hodnot debug levelu rychle roste velikost
souboru logu.

Pokud neb postmaster, mete spustit backend PostgreSQL z pkazov
dky a napsat svj SQL dotaz pmo v backendu (doporueno pouze pro
ladn). Dotaz je v tomto ppad ukonen novou dkou, nikoliv
stednkem. Pokud mte aplikaci peloenou s ladcmi symboly, mete
pout debbuger k monitorovn procesu. Pokud nen backend sputn
postmasterem, pak neb ve svm obvyklm prosted a tud nkter
problmy dan interakc mezi backendy nemohou bt nasimulovny.

Pokud b postmaster, spuse psql v jednom okn a pak si zjistte PID
procesu postgres pouitho psql. V debuggeru sepipojte k postgresql
PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql. Pokud
ladte startup postgresu, pak nastavte PGOPTIONS="-W n" a spuse psql.
Tento pepna zpsob pauzu n sekund, take budete mt as se pipojit
k procesu, a nastavit breakpointy a pokraovat v startup posloupnosti.

Pro ladn a men vkonu mohou bt uiten pepnae -s, -A a -t
programu postgres (backend).

Mete provst peklad s profilac, tak abyste vidli kolik asu
zabraj jednotliv funkce. Soubory s profily backend jsou uloeny v
adresi pgsql/data/base/dbname. Profil klienta pak v jeho aktulnm
adresi. Korektn profilace v prosted Linux poaduje konfiguraci
systmu s parametrem -DLINUX_PROFILE.

3.8 Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
---------------------------------------------------------------------

Zvyte limit postmastera na maximln poet souasn sputnch
backend.

Vchoz hodnota je 32 backend. Tuto hodnotu zvte zastavenm a
optovnm sputnm postmastera s parametrem -N nebo pravou
postgresql.conf.

Pi zven hodnoty -N nad 32 muste zvit hodnotu -B nad vchoz 64,
-B mus bt minimln dvakrt vt, nebo jet lpe vce. Pravdpodobn
zjistte, e pro velk poet proces backendu je nutn zvit nkter
parametry jdra. Jsou to pedevm maximln velikost sdlen pamti
SHMMAX, maximln poet semafr SEMMNS a SEMMNI, maximln poet
proces NPROC, maximln poet proces uivatele MAXUPRC a maximln
poet otevench soubor NFILE a NINODE. Dvod pro omezen maximlnho
potu backend je fakt, e by mohlo dojt k vyerpn zdroj Vaeho
systmu.

3.9 K emu slou adres pgsql_tmp?
------------------------------------

Tento adres obsahuje doasn soubory vytvoen exekutorem dotaz.
Napklad, kdy je nutn tdn k zajitn ORDER BY a tdn m vt
nroky na prostor ne povoluje parametr -S backendu, pak je vytvoen
doasn soubor k uloen extra daj.

Doasn soubory jsou obvykle mazny automaticky, ale me se stt, e
bhem tdn server spadne. Zastaven a dal start postmastera zajist
odstrann soubor s tchto adres.

3.10 Pro je poadovno dump a obnoven (load) databze bhem upgrade mezi velkmi verzemi PostgreSQL?
------------------------------------------------------------------------------------------------------

PostgreSQL se minimln mn bhem malch verz, take nap. pi upgrade
z 7.2 na 7.2.1 nen nutn dump a load databze. Ale velk verze asto
mn intern formt systmovch tabulek a datovch soubor. Tyto zmny
jsou natolik rozshl, e nelze zajistit zptnou kompatibilitu pro
datov soubory. Dump ulo data v obecnm formtu, take mohou bt
natena a pouvna v novm internm formtu.

------------------------------------------------------------------------

Provozn dotazy
===============

4.1 m se li binrn a normln kurzor?
------------------------------------------

Popis najdete v manulov strnce DECLARE

4.2 Jak zskat pouze prvn dek dotazu? Nhodn dek?
-------------------------------------------------------

Podvejte se do man. strnky pkazu FETCH, nebo pouijte SELECT ...
LIMIT ...

Nen nutn zpracovvat cel dotaz, kdy potebujete pouze nkolik
prvnch dk. Pokud existuje index ORDER BY, PostgreSQL je schopen
peruit zpracovn dotazu po zskn poadovanho potu dk.

K zskn nhodnho dku pouijte:

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

4.3 Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
------------------------------------------------------------

Podvejte se do zdrojovch kd psql do souboru
pgsql/src/bin/psql/describe.c. Ten obsahuje SQL pkazy, kter se
pouvaj v psql metapkazech. Dle mete spustit psql s pepnaem
-E, kter zpsob zobrazen kadho dotazu, kter zpracovn metapkazu
vyvol.

4.4 Jak odstranm sloupec tabulky, jak zmnm jeho typ?
-------------------------------------------------------

Ponaje verz 7.3 mete pout pkaz ALTER TABLE DROP COLUMN. Ve
starch verzch mete pout nsledujc postup:

BEGIN;
LOCK TABLE old_table;
SELECT ... -- mimo sloupec, kter chceme odstranit
  INTO TABLE new_table;
DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table;
COMMIT;

Pro zmnu typu sloupce je teba provst:

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

Pot provete VACUUM FULL tab - uvolnte tm diskov prostor zabran
nyn ji neplatnmi dky.

4.5 Jak je maximln velikost dku, tabulky a databze?
---------------------------------------------------------

PostgreSQL m tato omezen:

 Maximln velikost databze:           neomezena (existuj 32TB db)

 Maximln velikost tabulky:            32 TB

 Maximln velikost dky:              1.6 TB

 Maximln velikost poloky             1 GB

 Maximln poet dk v tabulce:       neomezeno

 Maximln poet sloupc v tabulce:     250-1600 podle typ

 Maximln poet index na tabulce:     neomezeno

Ve skutenosti nic nen neomezeno, limitem bv vdy dostupn diskov
pam nebo velikost operan pamti. Pokud mte nkterou z tchto hodnot
neobvykle velkou, me dojt ke snen vkonu.

Maximln velikost tabulky je 32 TB a nevyaduje podporu velkch soubor
operanm systmem. Velk tabulky se ukldaj do nkolika 1 GB soubor
take limity souborovho systmu nejsou podstatn.

Maximln velikost tabulky a maximln poet sloupc meme
zetynsobit nastavenm velikosti bloku na 32K.

4.6 Kolik diskovho prostoru je poteba k uloen dat z normlnho textovho souboru?
-------------------------------------------------------------------------------------

PostgreSQL vyaduje a ptinsobek diskovho prostoru k uloen dat z
textovho souboru.

Napklad, uvaujme soubor se 100 tisci dky obsahujc na kad dce
cel slo a textov popis. Text je v prmru dvacet byt dlouh.
Textov soubor bude 2.8 MB dlouh. Velikost databze obsahujc
odpovdajc data bude zhruba 6.4 MB.

 36 byt: hlavika dku (piblin)
 24 byt: jedna celoseln poloka a jedna textov
  4 byty: ukazatel na strnku k ntici
------------------------------------------------------
 64 byt na dek

Velikost datov strnky PostgreSQL je 8KB

 8192 byt na strnce
---------------------- = 128 dek na strnku
  64 byt za dek

100000 dek
-------------------- = 782 strnek (zaokrouhleno nahoru)
128 dek na strnce

782 * 8192 = 6, 406, 144 byt (6.4 MB)

Indexy nemaj tak velkou reii, ale mohou bt tak velk, protoe
obsahuj indexovan data.

Hodnoty NULL jsou uloeny v bitmapch, take spotebuj jen velmi mlo
diskovho prostoru.

4.7 Jak zskm seznam vytvoench tabulek, index, databz?
------------------------------------------------------------

psql m sadu metapkaz k zobrazen tchto informac. Jejich seznam
zskte pkazem \?. Dle se mete podvat na obsah systmovch tabulek
zanajcch pg_. Sputn psql s parametrem -l provede vpis nzv
vech databz.

Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy pistupujc k
systmovm tabulkmm.

4.8 Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
-----------------------------------------------------------

Kad dotaz nemus nutn pout existujc indexy. Index se pouije
tehdy, kdy je tabulka vt ne urit minimln velikost, a dotaz
vybr pouze procentuln malou st dk tabulky. To proto, e nhodn
pstup k disku dan tenm indexu me bt pomalej ne linern ten
tabulky nebo sekvenn ten,

PostgreSQL rozhoduje o pouit index na zklad statistiky pstup k
tabulce. Tyto statistiky se shromauj pkazy VACUUM ANALYZE nebo
ANALYZE. Dky statistikm m optimizer informaci o potu dek v tabulce
a me lpe rozhodnout o pouit index. Statistiky se uplatn pi
uren optimlnho poad a metody spojen tabulek. Statistiky by se
mli aktualizovat opakovan, tak jak se mn obsah tabulek.

Indexy nejsou obyejn pouity pro setdn nebo spojen tabulek.
Sekvenn zpracovn nsledovan explicitnm tdnm je obyejn
rychlej ne indexn ten na velk tabulce.

Jinak je tomu v ppad pouit LIMIT a ORDER BY, pi kterm se vtinou
index pouije, vsledkem je pouze mal st tabulky. Funkce MAX() a
MIN() nepouvaj indexy, ale je mon tut hodnotu zskat

SELECT col FROM tab
  ORDER BY col [ DESC ] LIMIT 1;

Pokud si myslte, e optimizer myln zvolil sekvenn prohledvn
tabulky, pouijte pkaz SET enable_seqscan TO 'off' a zkuste zda je
indexn prohledvn rychlej.

Pi vyhledvn na zklad vzoru jako je nap. opertor LIKE nebo ~ se
indexy pouj pouze za uritch skutenost:

    - zatek hledanho vzoru mus bt ukotven k zatku, tj.

        * vzor LIKE nesm zanat %
        * regulrn vraz mus zanat ^

    - vzor nesm zanat intervalem, nap. [a-e]

    - vyhledvan, kter nen Case sensitiv nepouv indexy.
    Mete ale pout funkcionln indexy, kter jsou posny v sekci
    4.12
    - pi inicializaci databze (initdb) mus bt pouito C locale
    (pozn. pekladatele - tud v naich podmnkch nepouiteln,
    nepracovalo by esk tdn).

4.9 Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
------------------------------------------------------------

Podvejte se do manulov strnky pkazu EXPLAIN.

4.10 Co to je R-tree index?
---------------------------

R-tree index se pouv pro indexovn prostorovch dat. Hash index
neme obslouit prohledvn oblast. B-tree index me dit vyhledn
oblast v jedn dimenzi. R-tree index me podporovat hledn v
multidimenzionlnch datech. Pouijeme-li napklad R-tree index na
atributy typu point, pak systm me efektivn odpovdt na dotaz -
vyber vechny body uvnit obdlnk.

Pvodn nvrh R-tree je Guttman, A. "R-trees: A Dynamic Index Structure
for Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on
Mgmt of Data, 45-57

Tyto materily naleznete v Stonebraker's "Readings in Database Systems".

Vestavn R-tree me slouit k indexaci polygon a oblast. Teoreticky
meme R-tree pout i pro vce dimenz (jin ne 3D). Ve skutenosti
ale takov rozen R-tree vyaduje trochu prce a ve souastnosti
chyb dokumentace jak na to.

4.11 Co je Genetic Query Optimizer?
-----------------------------------

GEQO modul urychluje optimalizaci dotaz pi spojovn mnostv tabulek
metodou Genetickch algoritm (GA). To umouje zskat velkho mnostv
variant spojen pi neplnm prohledvnm.

4.12 Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn?

Opertor ~ slou k porovn s regulrnm vrazem, jeho modifikace *~
pedstavuje case insensitive vyhledvn. Jedn se o obdobu LIKE a
ILIKE.

Pro vyhledvn bez ohledu na velk mal psmena pouijeme

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

V tomto ppad se nepouije standardn index. Nicmn, pouije se
funkcionln index, pokud jej vytvote

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

4.13 Jak v dotazu detekovat, e poloka je NULL?
------------------------------------------------

Urte pomoc IS NULL nebo IS NOT NULL

4.14 Jak jsou rozdly mezi rznmi znakovmi typy?
---------------------------------------------------
d2 819
d829 160
a988 178
S internmi nzvy se setkte v systmovm katalogu a v nkterch
chybovch hlench.

Prvn tyi uveden typy jsou tzv. varlena typy (tj. prvn tyi byty na
disku nesou daj o dlce, nsleduj samotn data). Proto skuten
pouit prostor je vdy o nco mlo vt ne deklarovan dlka. Naopak,
tyto datov typy jsou komprimovnty TOASTem, take prostor na disku me
bt ni ne je oekvno.

VARCHAR(n) je vhodn pro ukldn text prommn dlky s pevn
stanovenou maximln dlkou. TEXT je pro etzce bez omezen dlky s
maximem jeden gigabajt.

CHAR(n) slou k ukldn etzc stejn dlky. CHAR(n) dopln przdn
znaky do specifikovan dlky, zatmco VARCHAR(n) ulo pouze pedan
znaky. BYTEA je ureno pro ukldn binrnch dat, vetn NULL byte.
Vechny zde popsan typy maj podobn vkonnostn charakteristiky.

4.15.1 Jak vytvoit serial/auto-increment pole?
-----------------------------------------------

PostgreSQL podporuje typ SERIAL. Pi jeho pouit se automaticky vytvo
SEQUENCE a index na sloupci (Pro vy verze to neplat OVIT).
Napklad:

CREATE TABLE person (
  id SERIAL,
  name TEXT
);

je automaticky pevedeno do

CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
  id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
  name TEXT
);
CREATE UNIQUE INDEX person_id_key ON person(id);

Viz dokumentace create_sequence v manulovch strnkch. Dle mete
pout uniktn hodnotu OID kadho dku. Potom ale muste spoutt
pg_dump s pepnaem -o, tak aby zstaly zachovny hodnoty OID (u
pkazu copy COPY WITH OIDS).

4.15.2 Jak zskat hodnotu SERIAL po vloen dku?
--------------------------------------------------

Jednou z monost je zskat budouc hodnotu SERIAL funkc nextval ped
samotnm vloenm a pak ji vloit explicitn. Napklad v jakmsi
pseudojazyku

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

Mete pak jet pout hodnotu newid v dalch dotazech, nap. jako
hodnotu cizho kle. Nzev automaticky vytvoen sekvence je
tabulka_sloupec_seq.

Alternativn mete zskat hodnotu posledn generovou sekvenc funkc
currval() po vloen

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

Konen mete pout OID hodnotu vrcenou pkazem INSERT, ale to je
pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI
modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme $sth->{pg_oid_status}
po kadm $sth->execute().

4.15.3 Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s jinmi uivateli?
------------------------------------------------------------------------------------------

Nikoliv, currval() vrac hodnotu naposledy generovanou ve vaem
backendu, a ta tud nen spolen vem uivatelm.

4.15.4 Pro nen vygenerovan slo pouito pi peruen transakce?
Pro vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?

K zajitn efektivnosti soubhu, jsou hodnoty posloupnosti, kdy se o
n pod, a sekvence nen zamena do ukonen transakce. To zpsobuje
dry v slovn ze zruench transakc.

4.16 Co to je OID? Co je to TID?
--------------------------------

Kad dek vytvoen v PostgreSQL zsk jedinen OID. Vechna OID
generovan bhem inicializace databze jsou men ne 16384
(include/access/transam.h). Vechna OID generovan na poadavek
uivatele jsou rovna nebo vy tto hodnot. Normln, vechna OID jsou
jedinen nejen uvnit tabulky nebo databze, ale v rmci cel instalace
PostgreSQL

PostgreSQL pouv OID ve svm internm systmu tabulek k vytvoen
relac. Tato OID mohou bt pouita k identifikaci konkrtnho uivatele
a pouita v spojen. Pro OID hodnoty je doporuen typ OID. Nad tmto
sloupcem mete vytvoit index pro urychlen pstupu.

OID jsou dna vem dkm z centrln oblasti a jsou pouita v kad
databzi. Pokud potebujete zmnit OID, nebo chcete zkoprovat tabulku s
pvodnmi OID, lze pout

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

OID jsou uloena jako 4bajtov integer a peteou po tyech miliardch.
Nebylo hleno, e by se tak nkdy stalo, pesto ale plnujeme odstranit
tento limit dv ne se tak stane.

TID se pouvaj i identifikaci fyzickch dk s hodnotou bloku a
offsetu. TIDs se mn modifikac dk (pouv se jako ukazatel indexu
fyzickho dku).

4.17 Jak je vznam nkterch vraz pouitch v PostgreSQL?
------------------------------------------------------------

V nkterch zdrojovch kdech nebo star dokumentaci se mete setkat s
nsledujcmi vrazy, kter maj ir vznam. Zde je pklad nekterch:

    - tabulka, relace, tda (table, relation, class)
    - dek, zznam, ntice (row, record, tuple)
    - sloupec, poloka, atribut (column, field, attribute)
    - vyhledn, vbr (retrieve, select)

    - nhrada, prava (replace, update)
    - pidn, vkldn (append, insert)
    - OID, serial value (OID, serial value)
    - portal, kurzor (portal, cursor)
    - range variable, jmno tabulky, alias tabulky (range
    variable, table name, table alias)

seznam tchto vraz mete nalzt na
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/g
lossary.html.

4.18 Pro jsem zskal chybov hlen "ERROR: Memory exhausted in AllocSetAlloc()"?
-----------------------------------------------------------------------------------

Pravdpodobn dolo k vyerpn virtuln pami na Vaem systmu, nebo
jdro m nzk limit pro urit zdroje. Vyzkouejte ped startem
posmatera

ulimit -d 262144
limit datasize 256m

Zle na Vaem shellu, zda budou tyto pkazy spn, mly by zvit
limit datovho segmentu pro Vae procesy a umonit tak dokonen dotazu.
Tyto pkazy se aplikuj na aktuln proces a vechny synovsk procesy
vytvoen po proveden pkazu. Pokud mte problmy s SQL klientem
protoe backend vrac pli mnoho dat, zkuste zvit limity ped
startem klienta.

4.19 Jak se dozvm, kterou verzi PostgreSQL pouvm?
-----------------------------------------------------

V psql spuste

SELECT version();

4.20 Pro operace s velkmi objekty kon "invalid large obj descriptor"?
-------------------------------------------------------------------------

Vechny operace s velkmi objekty - lo_open, lo_close, ... muste
spoutt v transakci, tj. mezi pkazy BEGIN WORK a COMMIT.

PostgreSQL uvoluje handle velkch objekt pi skonen transakce. Pokud
budete pracovat s velkmi objekty mimo transakci, pravdpodobn
dostanete toto chybov hlen, protoe handle ji budou neplatn.

Pokud pouvte interface podobn ODBC muste nastavit set auto_commit
off

4.21 Jak vytvoit sloupec obsahujc implicitn aktuln datum?
---------------------------------------------------------------

Pouijte CURRENT_TIMESTAMP
d992 126
a1117 148
4.22 Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
-------------------------------------------------------------

Aktuln spojujeme tabulky se sekvennm skenovnm vsledku pro kad
dek vnjho dotazu. Pokud vnoen dotaz m pouze nkolik dk a
vnj dotaz vrac hodn dek, IN je rychl. V jinch ppadech
nahrate IN EXISTS:

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

takto

SELECT * FROM tab
  WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);

Pro urychlen vytvoete index pro subcol. Tento vkonnostn problm byl
odstrann ve verzi 7.4.

4.23 Jak provst vnj spojen (outer join)?
---------------------------------------------

PostgreSQL podporuje vnj spojen tabulek standardnmi SQL pkazy.
Zde jsou dva pklady:

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

nebo

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

Tyto identick dotazy napoj t1.col na t2.col a jet pid nepipojen
dky z t1 (kter nemaj obdoby v t2). Prav spojen (RIGHT JOIN) pid
nepipojen dky z t2. FULL JOIN vrt vechny dky, vetn
nepipojench z tbulek t1 a t2. Klov slovo OUTER je nepovinn a ve
se na LEFT, RIGHT a FULL join. Bn spojen se nazv INNER JOIN.

V dvjch verzch se vnj spojen tabulek mohlo simulovat pomoc
UNION a NOT IN. Napklad pro spojen tabulek tab1 a tab2, je
nsledujc dotaz ekvivalentn k vnjmu spojen dvou tabulek:

SELECT tab1.col2, tab2.col2 FROM tab1, tab2
  WHERE tab1.col1 = tab2.col1
UNION ALL
SELECT tab1.col2, NULL FROM tab1
  WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1;

4.24 Jak provst dotaz nap nkolika databzemi?
--------------------------------------------------

PostgreSQL nenabz dn zpsob, jak se dotzat do jin databze ne do
aktuln. Doplnk contrib/dblink umouje dotaz do ciz databze
prostednictvm funkce. Na stran klienta nen problm si otevt vce
simultlnch pstup do rznch databz a spojovat vsledek na stran
klienta.

4.25 Me funkce vrtit vce dk nebo sloupc?
------------------------------------------------

V PostgreSQL 7.3 mete jednodue vracet vce dk nebo sloupc z
funkce, viz:
http://techdocs.postgresql.org/guides/SetReturningFunctions.

4.26 Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL funkcch?
--------------------------------------------------------------------------------

Peloen kd PL/pgSQL funkce je uloen ve vyrovnvac pamti, tj.
funkce je pekldna pouze pi zmn kdu, nikoliv ped kadm volnm
funkce. Nechtnm vedlejm efektem je, e voln funkce sele, kdy se
funkce odkazuje na doasnou tabulku, pokud tato tabulka byla od pekladu
funkce zruena (akoliv ji byla znovu vytvoena a existuje). Jedinm
eenm problmu je pstup k doasn tabulce pomoc EXECUTE, tj.
dynamick provdn dotazu. Tento pkaz zajist opakovan peklad
dotazu pi kadm voln funkce.

4.27 Jak jsou monosti replikace databz?
-------------------------------------------

Existuje nkolik dostupnch een master/slave replikac. Ty povoluj
modifikace master databze a slave databzm umouj pouze ten. Na
konci http://gborg.PostgreSQL.org/genpage?replication_research najdete
jejich seznam. Na een multi-master replikaci se pracuje na
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.

4.28 Jak jsou monosti ifrovn databz?
-------------------------------------------
    -

    contrib/pgcrypto obsahuje ifrovac funkce pouiteln v SQL
    dotazech.

    -

    K ifrovn penosu dat z klienta na server, mus bt server
    peloen s podporou ssl a pepna sslv postgresql.conf mus bt
    nastaven na hodnotu true. Klient mus mt vytvoen zznam hostssl v
    pg_hba.conf a tak mt povolen reim ssl. Lze pout i jin
    prostedky, nejen nativn podporu ssl v PostgreSQL, nap. stunel a
    ssh.

    -

    Hesla uivatel databze jsou zaifrovna ponaje verz 7.3. Ve
    starch verzch toto chovn muselo bt vynuceno volbou
    PASSWORD_ENCRYPTION v postgresql.conf

    -

    Server me bet na ifrovanm souborovm systmu.

------------------------------------------------------------------------

Roziovn PostgreSQL
======================

5.1 Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
------------------------------------------------------------

Problm me bt zpsoben mnoha okolnostmi. Vyzkouejte si svoji funkci
nejdve v njak jednoduch aplikaci.

5.2 Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do PostgreSQL?
-------------------------------------------------------------------------------

Polete sv rozen do konference pgsql-hackers, a ono pak mon
skon v podadresi contrib.

5.3 Jak napsat funkci v C vracejc ntici?
------------------------------------------

Funkce vracejc tabulky jsou podporovan PostgreSQL 7.3 a vy pro
jazyky C, PL/PgSQL a SQL. Vce naleznete v The Programmer's Guide.
Pklady tchto funkc pro C naleznete v contrib/tablefunc.

5.4 Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci vzata v potaz. Pro?
---------------------------------------------------------------------------------------------

Makefile nem informace o zvislostech mezi hlavikovmi soubory. Muste
provst make clean a pak make. Pokud pouvte gcc, mete pout
pepna --enable-depend pkazu configure k automatickmu een
zvislost pekladaem.


[1] http://developer.postgresql.org/todo.php
[2] http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
[3] http://postgresql.ok.cz/PostgreSQL%20Administrator%27sGuide

@


1.2.4.1
log
@Here's the patch to fix a lot of markup errors in the HTML FAQs. Doesn't
change content (at least not supposed to).

Magnus Hagander
@
text
@d1 851
a852 819
                     asto kladen dotazy (FAQ) PostgreSQL
                                       
   Posledn aktualizace: Steda 23. ervna 21:10:00 EST 2004
   
   Souasn sprvce: Bruce Momjian (pgman@@candle.pha.pa.us)
   
   Peloil: Pavel Sthule (stehule@@kix.fsv.cvut.cz)
   
   Aktuln verzi tohoto dokumentu naleznete na adrese:
   http://www.PostgreSQL.org/docs/faqs/FAQ.html. esk peklad na adrese:
   http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html.
   
   Odpovdi na dotazy relevantn ke konkrtnm platformm lze nalzt na
   adrese: http://www.PostgreSQL.org/docs/index.html.
     _________________________________________________________________
   
                               Obecn otzky
                                      
   1.1) Co je PostgreSQL? Jak se vyslovuje?
   1.2) Jak je licence na PostgreSQL?
   1.3) Na kterch Unixex lze spustit PostgreSQL?
   1.4) Kter ne-unixov platformy jsou podporovan?
   1.5) Kde mohu zskat PostgreSQL?
   1.6) Kde mohu zskat podporu?
   1.7) Kde je posledn verze?
   1.8) Jak je dostupn dokumentace?
   1.9) Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
   1.10) Jak se mohu nauit SQL?
   1.11) Nem PostgreSQL problmy s rokem 2000?
   1.12) Jak se pipojit k vvojskmu tmu?
   1.13) Kam podat report o chyb?
   1.14) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
   1.15) Jak lze finann pomoci PostgreSQL?
   
                             User client dotazy
                                      
   2.1) Kde naleznu ODBC ovladae pro PostgreSQL?
   2.2) Jak nstroje lze pout pro PostgreSQL a web?
   2.3) Existuje grafick rozhran pro PostgreSQL?
   2.4) Kter programovac jazyky maj podporu pro PostgreSQL?
   
                           Administrativn dotazy
                                      
   3.1) Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
   3.2) Pi startu postmaster, dostanu chybov hlen Bad System Call
   nebo core dump. Pro?
   3.3) Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate.
   Pro?
   3.4) Pi startu postmastera dostanu hlen o chyb
   IpcSemaphoreCreate. Pro?
   3.5) Jak povolit nebo zakzat pstup z jinch stanic?
   3.6) Jak ladit databzov stroj na lep vkon?
   3.7) Jak jsou monosti ladn?
   3.8) Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
   3.9) K emu slou adres pgsql_tmp?
   3.10) Pro je poadovno dump a obnoven (load) databze bhem upgrade
   mezi velkmi verzemi PostgreSQL?
   
                              Provozn dotazy
                                      
   4.1) m se li binrn a normln kurzor?
   4.2) Jak zskat pouze prvn dek dotazu? Nhodn dek?
   4.3) Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
   4.4) Jak odstranm sloupec tabulky, jak zmnm jeho typ?
   4.5) Jak je maximln velikost dku, tabulky a databze?
   4.6) Kolik diskovho prostoru je poteba k uloen dat z normlnho
   textovho souboru?
   4.7) Jak zskm seznam vytvoench tabulek, index, databz?
   4.8) Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
   4.9) Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
   4.10) Co to je R-tree index?
   4.11) Co je Genetic Query Optimizer?
   4.12) Jak provst vyhledvn regulrnho vrazu case sensitiv,
   insensitiv? Jak pout index pro case insensitive vyhledvn?
   4.13) Jak v dotazu detekovat, e poloka je NULL?
   4.14) Jak jsou rozdly mezi rznmi znakovmi typy?
   4.15.1) Jak vytvoit serial/auto-increment pole?
   4.15.2) Jak zskat hodnotu SERIAL po vloen dku?
   4.15.3) Nepovede currval() a nextval() k rozhozen podmnek pi
   soubhu s jinmi uivateli?
   4.15.4) Pro nen vygenerovan slo pouito pi peruen transakce?
   Pro vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?
   4.16) Co to je OID? Co je to TID?
   4.17) Jak je vznam nkterch vraz pouitch v PostgreSQL?
   4.18) Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
   AllocSetAlloc()"?
   4.19) Jak se dozvm, kterou verzi PostgreSQL pouvm?
   4.20) Pro operace s velkmi objekty kon "invalid large obj
   descriptor"?
   4.21) Jak vytvoit sloupec obsahujc implicitn aktuln datum?
   4.22) Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
   4.23) Jak provst vnj spojen (outer join)?
   4.24) Jak provst dotaz nap nkolika databzemi?
   4.25) Me funkce vrtit vce dk nebo sloupc?
   4.26) Pro nelze spolehliv vytvet a ruit doasn tabulky v
   PL/pgSQL funkcch?
   4.27) Jak jsou monosti replikace databz?
   4.28) Jak jsou monosti ifrovn databz?
   
                           Roziovn PostgreSQL
                                      
   5.1) Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
   5.2) Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
   PostgreSQL?
   5.3) Jak napsat funkci v C vracejc ntici?
   5.4) Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi
   rekompilaci vzata v potaz. Pro?
     _________________________________________________________________
   
                               Obecn otzky
                                      
    1.1) Co je PostgreSQL? Jak se vyslovuje?
    
   PostgreSQL se vyslovuje Post-Gres-Q-L. Zvukov zznam je dostupn na
   adrese .
   
   PostgreSQL vychz z databze POSTGRES (a stle je nkdy oznaovn
   zjednoduen jako Postgres) - vzkumnho prototypu DBMS nov generace.
   Z postgresu byl pevzat siln datov model a bohat soubor datovch
   typ a jeho dotazovac jazyk PostQuel byl nahrazen rozenou
   podmnoinou jazyka SQL. PostgreSQL lze pouvat bez omezen a jeho
   zdrojov kdy jsou voln k dispozici.
   
   PostgreSQL vyvj tm vvoj pihlench do vvojsk konference
   PostgreSQL. Souasnm koordintorem je Marc G. Fournier
   (scrappy@@PostgreSQL.org). (viz 1.6 - jak se zapojit). Tento tm je
   zodpovdn za veker vvoj PostgreSQL. Jedn se o veejn projekt,
   kter nen zen dnou firmou. Pokud se chcete zapojit, pette si
   developer's FAQ na adrese
   http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html
   
   Autory prvn verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
   portace, testovn, ladn a roziovn kdu se zapojilo mnoho
   dalch vvoj . Pvodni kd Postgresu, ze kterho PostgreSQL
   vychz, je vsledkem sil mnoha student a programtor pracujcch
   pod vedenm prof. Michaela Stonebrakera na University of California v
   Berkley.
   
   Pvodn nzev software z Berkley byl Postgres. Po pidn jazyka SQL
   se nzev zmnil na Postgres95. Koncem roku 1996 byl RDBMS pejmenovn
   na PostgreSQL.
   
    1.2) Jak je licence na PostgreSQL?
    
   PostgreSQL je pedmtem nsledujcch autorskch prv:
   
   Dl Copyright (c) 1996-2005, PostgreSQL Global Development Group
   Dl Copyright (c) 1994-6, Regents of the University of California
   
   Udluje se oprvnn k uit, rozmnoovn, provdn prav a
   roziovn tohoto softwaru a dokumentace k nmu, pro jakkoli ely,
   bez licennho poplatku a bez psemn licenn smlouvy, za podmnky,
   e na vech jeho kopich je uvedeno oznmen o ve uvedench prvech,
   jako i obsah tohoto a dvou nsledujcch odstavc.
   
   THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V DNM
   PPAD ODPOVDNA DN TET OSOB ZA PMOU, NEPMOU, ZVLTN,
   NAHODILOU NEBO VSLEDNOU KODU, VETN ULHO ZISKU, ZPSOBENOU UITM
   TOHOTO SOFTWARU A DOKUMENTACE K NMU, A TO I V PPAD, E THE
   UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MONOSTI VZNIKU TAKOV
   KODY.
   
   HE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
   NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE
   SPECIFICKM ELM. NͮE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A
   LE" A THE UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO
   DRBU, PODPORU, AKTUALIZACI, VYLEPEN NEBO MODIFIKACI.
   
   Ve uveden je BSD licence, bn licence otevenho zdroje. Nen zde
   dn omezen ohledn uit kdu zdroje. Jsme s tm spokojeni a nemme
   v myslu na tto skutenosti cokoli mnit.
   
    1.3) Na kterch Unixex lze spustit PostgreSQL?
    
   PostgreSQL b na vech modernch unixovch platformch. V
   instalanch instrukcch naleznete aktuln seznam vech platforem na
   kterch byla testovnm ovena funkcionalita PostgreSQL.
   
    1.4) Kter ne-unixov platformy jsou podporovan?
    
   Klient
   
   Knihovna libpq, psql a nkter dal moduly byly peloeny pro MS
   Windows. Klienta lze provozovat na MS Windows, ten prostednictvm
   TCP/IP protokolu komunikuje se serverem bcm na nkter z
   podporovanch Unixovch platforem. K pekladu lze pout win32.mak a
   Win32 knihovny libpq a psql. K databzi PostgerSQL lze pistupovat
   skrze rozhran ODBC.
   
   Server
   
   Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou
   Cygwin, Cygnus Unix/NT porting library. Vce pgsql/doc/FAQ_MSWIN v
   distribuci nebo MS Windows FAQ na adrese
   http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN.
   
   Na nativnm portu pro MS Win NT/2000/XP se pracuje. Dal informace o
   aktulnm stavu PostgreSQL pro Windows naleznet na adrese
   http://techdocs.postgresql.org/guides/Windows a
   http://momjian.postgresql.org/main/writings/pgsql/win32.html.
   
   Existujc port pro Novell Netware 6 naleznete na
   http://forge.novell.com.
   
    1.5) Kde mohu zskat PostgreSQL?
    
   Primrnm anonymnm ftp serverem pro PostgreSQL je
   ftp://ftp.PostgreSQL.org/pub. Seznam zrcadel naleznete na naich
   webovch strnkch.
   
    1.6) Kde mohu zskat podporu?
    
   Hlavn mailov konference je: pgsql-general@@PostgreSQL.org. Slou k
   diskuzm ohledn PostgreSQL. Pihlste se zaslnm mailu obsahujc
   nsledujc dky v tle dopisu (nikoliv v zhlav - subjectu):
    subscribe
    end

   na adresu pgsql-general-request@@PostgreSQL.org.
   
   Mete si vydat denn pehled (diggest), kter m zhruba 30K denn
   zprv.
   
   Konference psql-bugs je urena k zasln zprv o chybch. Pro
   pihlen polete mail se stejnm obsahem jako v pedchozm ppad
   na adresu pgsql-bugs-request@@PostgreSQL.org.
   
   Do vvojsk konference se pihlste odeslnm dopisu s ji
   zmiovanm obsahem na mailto:pgsql-hackers-request@@PostgreSQL.org.
   
   Seznam dalch konferenc naleznete na strnkch PostgreSQL:
   
     http://www.postgresql.org
     
    1.7) Jak je posledn verze?
    
   Posledn verze PostgreSQL je 7.4.3. Plnujeme uvolnit vznamnou verzi
   kadch est a osm msc.
   
    1.8) Jak je dostupn dokumentace?
    
   Rzn manuly, manulov strnky a nkolik malch testovacch pklad
   jsou sousti distribuce. Podvejte se do adrese /doc. Manuly jsou
   pstupn online na http://www.PostgreSQL.org/docs.
   
   Na adresch http://www.PostgreSQL.org/docs/awbook.html a
   http://www.commandprompt.com/ppbook/ naleznezte dv online knihy o
   PostgreSQL. Seznam dostupn literatury je na
   http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor
   technickch lnk s tematikou PostgresQL najdete na
   http://techdocs.PostgreSQL.org/.
   
   psql m uiten metapkaz \d slouc k zobrazen informac o
   typech, opertorech, funkc, agreganch funkc atd.
   
   Vce dokumentace naleznete na naich webovch strnkch.
   
    1.9) Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
    
   PostgreSQL podporuje rozenou podmnoinu SQL-92. V naem TODO
   najdete seznam znmch chyb, chybjcch vlastnost a seznam
   vlastnost, kter budou do systmu implementovny v budoucnu (vetn
   priorit).
   
    1.10) Jak se mohu nauit SQL?
    
   V knize The PostgreSQL book na
   http://www.PostgreSQL.org/docs/awbook.html je vysvtlen jazyk SQL
   (vyla esky). Dal dostupnou knihou je
   http://www.commandprompt.com/ppbook. Kvalitn nvody naleznete na
   http://www.intermedia.net/support/sql/sqltut.shtm, a na
   http://sqlcourse.com.
   
   Dal je Teach Yourself SQL in 21 days, Second Edition na
   http://members.tripod.com/er4ebus/sql/index.htm.
   
   Mnoho uivatel doporuuje The Practical SQL Handbook, Bowman, Judith
   S., et al., Addison-Wesley. Jin preferuj The Complete Reference SQL,
   Groff et al., McGraw-Hill.
   
    1.11) Nem PostgreSQL problmy s rokem 2000?
    
   Nem, meme pracovat s datumy po roce 2000 naeho letopotu i ped
   rokem 2000 p.n.l.
   
    1.12) Jak se pipojit k vvojskmu tmu?
    
   Nejdve si sthnte nejnovj zdroje a pette si vvojskou
   dokumentaci na naem webu nebo v distribuci. Pak se pihlate do
   konferenc pgsql-hackers a pgsql-patches. Kvalitn zplaty poslejte
   do pgsql-patches.
   
   Prvo commit m v CVS archivu asi tincti lid. Kad z nich poslal
   mnoho kvalitnch zplat, take tehdej commiters mli jistotu, e
   budou pedkldat jenom kvalitn zplaty a mohli jim pedlit vt
   prva.
   
    1.13) Kam podat report o chyb?
    
   Navtivte nai PostgreSQL BugTool strnku na
   http://www.PostgreSQL.org/bugs/bugs.php, kter obsahuje nvod a
   smrnice jak podat chybov report.
   
   Ovte si na naem ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li
   mte nejnovj verzi PostgreSQL a zda-li k n neexistuj njak
   zplaty.
   
    1.14) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
    
   Existuje nkolik hledisek jak porovnvat software: vlastnosti, vkon,
   spolehlivost, podpora a cena.
   
   Vlastnosti
          PostgreSQL m hodn spolench vlastnost s velkmi komernmi
          DBMS, nap. transakce, vnoen dotazy, spout, pohledy,
          kontrolu referenn integrity a sofistikovan zamykn.
          Podporuje nkter vlastnosti, kter tyto systmy nemaj,
          uivatelem definovan typy, ddinost, pravidla, MVCC
          redukujc zamykn.
          
   Vkon
          Vkonnostn je na tom PostgreSQL podobn jako dal komern
          ale i open source databze, v nem je rychlej, jindy
          pomalej. V porovnn s MySQL a podobnmi databzovmi systmy
          je PostgreSQL rychlej pi vceuivatelskm pstupu,
          sloitjch dotazech a zaten read/write dotazy. MySQL je
          rychlej v jednoduch dotazech s malm potem uivatel.
          Navc, MySQL nepodporuje mnoh vlatnosti zmnn v sekci
          vlastnosti. Zapracovali jsme na spolehlivosti a podporovanch
          vlastnostech, a vkon zvyujeme v kad verzi. Zajmavou
          strnku porovnvajc PostgreSQL a MySQL naleznete na
          http://openacs.org/philosophy/why-not-mysql.html. Za vvojem
          MySQL nen Open Source komunita, ale komern spolenost,
          pestoe svoje produkty distribuuje jako Open Source.
          
   Spolehlivost
          Jsme si vdomi, e databze mus bt spolehliv, jinak je
          nepouiteln. Sname se zveejovat dobe otestovan, stabiln
          kd s minimem chyb. Kad verze je vce ne msc v beta
          testovn, a nae historie verz ukazuje, e meme nabdnout
          stabiln, solidn verze, kter jsou pipraveny pro reln
          nasazen. V tto oblasti jsme srovnateln s dalmi databzemi.
          
   Podpora
          Na na mailov konferenci mete kontaktovat velkou skupinu
          vvoj a uivatel.problm. Nememe garantovat opravu,
          nicmn komern databze tak ne vdy nabdnou opravu. Podle
          ohlas je nae podpora hodnocena lpe ne u jinch DBMS a to
          dky pmmu kontaktu s vvoji, velkou komunitou uivatel,
          kvalitnmi manuly a pstupnm zdrojovm kdem. Pro uivatele,
          kte vyaduj podporu ke konkrtnm ppadm, existuje placen
          podpora (FAQ sekce 1.6).
          
   Cena
          PosgreSQL lze voln pouvat pro nekomern i komern pouit.
          Mete do svch produkt pidat n kd bez omezen, respektive
          v souladu s podmnkami na licenn smlouvy (v duchu BSD
          licence).
          
    1.15) Jak lze finann pomoci PostgreSQL?
    
   PosgreSQL m prvotdn infrastrukturu od naeho zatku v roce 1996.
   Vdme za to Marku Fournierovi, kter zaloil a spravoval tuto
   infrastrukturu nkolik let.
   
   Kvalitn infrastruktura je velice dleit pro kad open source
   projekt. Pedchz nedorozumnm, kter velice zdruj pokrok v
   projektu.
   
   Tato infrastruktura nen lacin. K jejmu zajitn je teba stle
   hradit urit msn a jednorzov stky. Pokud mte Vy nebo Vae
   spolenost penze, kter nm mete darovat, obrae se na
   http://store.pgsql.com/shopping/ a darujte je.
   
   Akoliv webov strnka zmiuje PostgreSQL, Inc. vklady jsou ureny
   pouze k podpoe projektu PostgreSQL a nepodporuj dnou existujc
   spolenost. Pokud to vyadujete, mete poslat kontrolu na nai
   kontaktn adresu.
     _________________________________________________________________
   
   Pokud mte pklad spnho nasazen PostgreSQL, pihlat se na n
   advocacy site na http://advocacy.postgresql.org.
   
                             User client dotazy
                                      
    2.1) Kde naleznu ODBC ovladae pro PostgreSQL?
    
   Pro PostgreSQL existuj dva ODBC ovladae - PsqlODBC a OpenLink ODBC.
   
   PsqlODBC je ke staen na
   http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
   
   OpenLink mete zskat na http://www.openlinksw.com. Spolupracuje s
   jejich klientskm programovm vybavenm a je dostupn pro vechny jimi
   podporovan platformy (Win, Mac, Unix, VMS).
   
   Tento ovlada je uren pro ty, kte vyaduj podporu komern
   kvality, nicmn freeware verze je dostupn a funkn. Dotazy
   zaslejte na postgres95@@openlink.co.uk.
   
    2.2) Jak nstroje lze pout pro PostgreSQL a web?
    
   Pkn vod do databzovch technologi zabezpeujcch chod webovch
   strnek najdete na http://www.webreview.com.
   
   Pro tvorbu webu existuje excelentn rozhran PHP, kter naleznete na
   http://www.php.net.
   
   Pro sloitj ppady se asto pouv Perl a CGI.pm nebo mod_perl.
   
    2.3) Existuje grafick rozhran pro PostgreSQL?
    
   Pro PostgreSQL existuje nkolik grafickch rozhran: PgAccess
   (http://www.php.net), PgAdmin III (http://www.php.net), RHDB Admin
   (http://sources.redhat.com/rhdb/) a Rekall (
   http://www.thekompany.com/products/rekall/). Dle jet PhpPgAdmin
   (http://phppgadmin.sourceforge.net/) co je rozhran PostgreSQL
   zaloen na web technologii.
   
   plnj seznam najdete na
   http://techdocs.postgresql.org/guides/GUITools.
   
    2.4) Kter programovac jazyky maj podporu pro PostgreSQL?
    
   Vtina programovacch jazyk obsahuje rozhran pro PostgreSQL.
   Podvejte se do roziujcch modul Vaeho programovacho jazyka.
   
   Distribuce PostgreSQL obsahuje tato rozhran:
     * C (libpq)
     * Embbedded C (ecpg)
     * Java (jdbc)
     * Python (PyGreSQL)
     * TCL (libpgtcl)
       
   Dal rozhran jsou dostupn na http://gborg.postgresql.org v sekci
   Drivers/Interfaces.
     _________________________________________________________________
   
                           Administrativn dotazy
                                      
    3.1) Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
    
   Pouijte volbu --prefix pi sputn configure.
   
    3.2) Pi startu postmaster, dostanu chybov hlen Bad System Call nebo
    core dump. Pro?
    
   Dvody mohou bt rzn, ale nejprve zkontrolujte, zda V systm
   podporuje System V extensions. PostgreSQL vyaduje v jde podporu
   sdlen pamti a semafor.
   
    3.3) Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate. Pro?
    
   Buto nemte sprvn nakonfigurovanou sdlenou pam v jde nebo
   musite zvtit jej velikost. Potebn velikost je zvisl na
   architektue a na tom, kolik pamovch buffer a backend mte
   povoleno pro postmastera. Pro vtinu systm s peddefinovanm potem
   backend a pamovch buffer je minimum zhruba 1MB. V PostgreSQL
   Administrator's Guide naleznete podrobnj informace o sdlen pamti
   a semaforech.
   
    3.4) Pi startu postmastera dostanu hlen o chyb IpcSemaphoreCreate.
    Pro?
    
   Pokud dostane chybovou zprvu IpcSemaphoreCreate: semget failed (No
   space left on device), pak vae jdro nem dost volnch semafor.
   PostgreSQL vyaduje jeden semafor pro kad backend v pozad. Doasnm
   eenm je start postmaster s limitem backend. Pouijte pepna -N s
   hodnotou men ne 32. plnm eenm je zven hodnot SEMMNS a
   SEMMNI jadra.
   
   Nefunkn semafory mohou zpsobit pd bhem intenzivnch databzovch
   operac.
   
   Pokud se tato chyba vyskytuje jet nkde jinde, mon nemte vbec
   nakonfigurovny semafory ve vaem jde. V PostgreSQL Administrator's
   Guide najdete podrobnj popis poadavk na sdlenou pamt a
   semafory.
   
    3.5) Jak povolit nebo zakzat pstup z jinch stanic?
    
   Pi vchozm nastaven PostgreSQL odepe pstup z jinch stanic ne
   lokln s pouitm UDP. Pstup z jinch stroj nen mon dokud jej
   nepovolte nastavenm tcpip_socket v postgresql.conf a urenm zpsobu
   autentifikace v $PGDATA/pg_hba.conf.
   
    3.6) Jak ladit databzov stroj na lep vkon?
    
   Urit pomohou indexy. Pkaz EXPLAIN ANALYZE Vm umon sledovat jak
   PostgreSQL interpretuje V dotaz a kter indexy pouv.
   
   Pi vt dvce INSERT uvaujte o nhrad pkazem COPY. Ten je
   mnohem rychlej neli samotn INSERT. Kad pkaz mimo blok BEGIN
   WORK/COMMIT se provd ve vlastn transakci. Zvate, zda-li by se
   nedalo nkolik pkaz spojit do jedn transakce. Tm se sn reie
   na transakce. Ped provedenm rozshlch zmn zrute indexy, kter po
   dokonen zmn opt vytvote.
   
   Mte nkolik dalch monost, jak zlepit vkon. Mete zakzat
   fsyn() pi startu postmastera pepnai -o -F. Tyto pepnae zabrn
   fsync(), tj. zpisu na disk po kad transakci.
   
   Mete zvit velikost pamovch buffer pouitch backendy tj.
   parametr -B postmasteru. Pokud ale tato hodnota bude pli velk, tak
   mon nespustte postmastera jeliko doshnete limitu sdlen pamti.
   Kad buffer m 8K a implicitn je 64 buffer.
   
   Dle mete pout pepna -S k zven limitu pamti pro backendy na
   doasn tdn. Hodnota je mnna v kilobytech a vchoz nastaven je
   512, tj. 512K.
   
   Mete pout pkaz CLUSTER, kter uspod fyzicky data v tabulkch
   podle indexu. Vce na manulovch strnkch pkazu CLUSTER.
   
    3.7) Jak jsou monosti ladn?
    
   Mte nkolik monost jak se dostat k uitenm stavovm informacm.
   
   Zaprv, pi pekladu pouijte pepna --enable-cassert, tm se zapne
   monitorovn a nsledn zastaven aplikace, kdy se proces v backendu
   dostane do neoekvanho stavu.
   
   Jak postmaster tak postgres m nkolik pepna umoujcch ladn.
   Postmaster nastartujte tak, abyste si byli jisti, e je standartn
   vstup a standartn chybov vstup pesmrovn do souboru logu,
   napklad:
    cd /usr/local/pgsql
    ./bin/postmaster > server.log 2>&1 &

   Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje
   uiten informace o problmech a chybch vyskytlch se na serveru.
   Postmaster m pepna -d urujc, jak podrobn maj bt reportovan
   informace, tj. debug level. Pozor, pi velk hodnot debug levelu
   rychle roste velikost souboru logu.
   
   Pokud neb postmaster, mete spustit backend PostgreSQL z pkazov
   dky a napsat svj SQL dotaz pmo v backendu (doporueno pouze pro
   ladn). Dotaz je v tomto ppad ukonen novou dkou, nikoliv
   stednkem. Pokud mte aplikaci peloenou s ladcmi symboly, mete
   pout debbuger k monitorovn procesu. Pokud nen backend sputn
   postmasterem, pak neb ve svm obvyklm prosted a tud nkter
   problmy dan interakc mezi backendy nemohou bt nasimulovny.
   
   Pokud b postmaster, spuse psql v jednom okn a pak si zjistte PID
   procesu postgres pouitho psql. V debuggeru sepipojte k postgresql
   PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql.
   Pokud ladte startup postgresu, pak nastavte PGOPTIONS="-W n" a spuse
   psql. Tento pepna zpsob pauzu n sekund, take budete mt as se
   pipojit k procesu, a nastavit breakpointy a pokraovat v startup
   posloupnosti.
   
   Pro ladn a men vkonu mohou bt uiten pepnae -s, -A a -t
   programu postgres (backend).
   
   Mete provst peklad s profilac, tak abyste vidli kolik asu
   zabraj jednotliv funkce. Soubory s profily backend jsou uloeny v
   adresi pgsql/data/base/dbname. Profil klienta pak v jeho aktulnm
   adresi. Korektn profilace v prosted Linux poaduje konfiguraci
   systmu s parametrem -DLINUX_PROFILE.
   
    3.8) Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
    
   Zvyte limit postmastera na maximln poet souasn sputnch
   backend.
   
   Vchoz hodnota je 32 backend. Tuto hodnotu zvte zastavenm a
   optovnm sputnm postmastera s parametrem -N nebo pravou
   postgresql.conf.
   
   Pi zven hodnoty -N nad 32 muste zvit hodnotu -B nad vchoz 64,
   -B mus bt minimln dvakrt vt, nebo jet lpe vce.
   Pravdpodobn zjistte, e pro velk poet proces backendu je nutn
   zvit nkter parametry jdra. Jsou to pedevm maximln velikost
   sdlen pamti SHMMAX, maximln poet semafr SEMMNS a SEMMNI,
   maximln poet proces NPROC, maximln poet proces uivatele
   MAXUPRC a maximln poet otevench soubor NFILE a NINODE. Dvod pro
   omezen maximlnho potu backend je fakt, e by mohlo dojt k
   vyerpn zdroj Vaeho systmu.
   
    3.9) K emu slou adres pgsql_tmp?
    
   Tento adres obsahuje doasn soubory vytvoen exekutorem dotaz.
   Napklad, kdy je nutn tdn k zajitn ORDER BY a tdn m
   vt nroky na prostor ne povoluje parametr -S backendu, pak je
   vytvoen doasn soubor k uloen extra daj.
   
   Doasn soubory jsou obvykle mazny automaticky, ale me se stt, e
   bhem tdn server spadne. Zastaven a dal start postmastera
   zajist odstrann soubor s tchto adres.
   
    3.10) Pro je poadovno dump a obnoven (load) databze bhem upgrade mezi
    velkmi verzemi PostgreSQL?
    
   PostgreSQL se minimln mn bhem malch verz, take nap. pi
   upgrade z 7.2 na 7.2.1 nen nutn dump a load databze. Ale vynamn
   verze asto mn intern formt systmovch tabulek a datovch
   soubor. Tyto zmny jsou natolik rozshl, e nelze zajistit zptnou
   kompatibilitu pro datov soubory. Dump ulo data v obecnm formtu,
   take mohou bt natena a pouvna v novm internm formtu.
     _________________________________________________________________
   
                              Provozn dotazy
                                      
    4.1) m se li binrn a normln kurzor?
    
   Popis najdete v manulov strnce DECLARE
   
    4.2) Jak zskat pouze prvn dek dotazu? Nhodn dek?
    
   Podvejte se do man. strnky pkazu FETCH, nebo pouijte SELECT ...
   LIMIT ...
   
   I kdy potebujete zskat pouze prvnch nkolik dk, je teba
   zpracovat vechna data, nap. pokud dotaz m ORDER BY. Pokud vak
   existuje index, kter odpovd ORDER BY, PostgreSQL me zskat pouze
   prvnch n dk a ukonit zpracovn dotazu.
   
   K zskn nhodnho dku pouijte:
    SELECT col
    FROM tab
    ORDER BY random()
    LIMIT 1;

    4.3) Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
    
   Pkaz \dt v psql zobraz seznam tabulek. pln seznam pkaz psql
   dostanete pkazem \?. Tak se mete podvat do zdrojovch kd psql
   do souboru pgsql/src/bin/psql/describe.c. Ten obsahuje SQL pkazy,
   kter se pouvaj v psql metapkazech. Dle mete spustit psql s
   pepnaem -E, kter zpsob zobrazen kadho dotazu, kter
   zpracovn metapkazu vyvol. PostgreSQL nabz SQLi INFORMATION
   SCHEMA s tabulkami obsahujc informace o databzi.
   
    4.4) Jak odstranm sloupec tabulky, jak zmnm jeho typ?
    
   Ponaje verz 7.3 mete pout pkaz ALTER TABLE DROP COLUMN. Ve
   starch verzch mete pout nsledujc postup:
    BEGIN;
    LOCK TABLE old_table;
    SELECT ... -- mimo sloupec, kter chceme odstranit
    INTO TABLE new_table;
    DROP TABLE old_table;
    ALTER TABLE new_table RENAME TO old_table;
    COMMIT;

   Pro zmnu typu sloupce je teba provst:
    BEGIN;
    ALTER TABLE tab ADD COLUMN new_col new_data_type;
    UPDATE tab SET new_col = CAST(old_col AS new_data_type;
    ALTER TABLE tab DROP COLUMN old_col;
    COMMIT;

   Pot provete VACUUM FULL tab - uvolnte tm diskov prostor zabran
   nyn ji neplatnmi dky.
   
    4.5) Jak je maximln velikost dku, tabulky a databze?
    
   PostgreSQL m tato omezen:
    Maximln velikost databze:           neomezena (existuj 32TB db)
    Maximln velikost tabulky:            32 TB
    Maximln velikost dky:              1.6 TB
    Maximln velikost poloky             1 GB
    Maximln poet dk v tabulce:       neomezeno
    Maximln poet sloupc v tabulce:     250-1600 podle typ
    Maximln poet index na tabulce:     neomezeno

   Ve skutenosti nic nen neomezeno, limitem bv vdy dostupn diskov
   pam nebo velikost operan pamti. Pokud mte nkterou z tchto
   hodnot neobvykle velkou, me dojt ke snen vkonu.
   
   Maximln velikost tabulky je 32 TB a nevyaduje podporu velkch
   soubor operanm systmem. Velk tabulky se ukldaj do nkolika 1 GB
   soubor take limity souborovho systmu nejsou podstatn.
   
   Maximln velikost tabulky a maximln poet sloupc meme
   zetynsobit nastavenm velikosti bloku na 32K.
   
    4.6) Kolik diskovho prostoru je poteba k uloen dat z
    
   normlnho textovho souboru?
   
   PostgreSQL vyaduje a ptinsobek diskovho prostoru k uloen dat z
   textovho souboru.
   
   Napklad, uvaujme soubor se 100 tisci dky obsahujc na kad
   dce cel slo a textov popis. Text je v prmru dvacet byt
   dlouh. Textov soubor bude 2.8 MB dlouh. Velikost databze
   obsahujc odpovdajc data bude zhruba 6.4 MB.
    36 byt: hlavika dku (piblin)
    24 byt: jedna celoseln poloka a jedna textov
   + 4 byty: ukazatel na strnku k ntici
   ------------------------------------------------------
    64 byt na dek

   Velikost datov strnky PostgreSQL je 8KB

    8192 byt na strnce
    ---------------------- = 128 dek na strnku
      64 byt za dek

    100000 dek
    -------------------- = 782 strnek (zaokrouhleno nahoru)
       128 dek na strnce

    782 * 8192 = 6, 406, 144 byt (6.4 MB)

   Indexy nemaj tak velkou reii, ale mohou bt tak velk, protoe
   obsahuj indexovan data.
   
   Hodnoty NULL jsou uloeny v bitmapch, take spotebuj jen velmi mlo
   diskovho prostoru.
   
    4.7) Jak zskm seznam vytvoench tabulek, index, databz?
    
   psql m sadu metapkaz k zobrazen tchto informac. Jejich seznam
   zskte pkazem \?. Dle se mete podvat na obsah systmovch
   tabulek zanajcch pg_. Sputn psql s parametrem -l provede vpis
   nzv vech databz.
   
   Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy pistupujc
   k systmovm tabulkmm.
   
    4.8) Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
    
   Kad dotaz nemus nutn pout existujc indexy. Index se pouije
   tehdy, kdy je tabulka vt ne urit minimln velikost, a dotaz
   vybr pouze procentuln malou st dk tabulky. To proto, e
   nhodn pstup k disku dan tenm indexu me bt pomalej ne
   linern ten tabulky nebo sekvenn ten.
   
   PostgreSQL rozhoduje o pouit index na zklad statistiky pstup k
   tabulce. Tyto statistiky se shromauj pkazy VACUUM ANALYZE nebo
   ANALYZE. Dky statistikm m optimizer informaci o potu dek v
   tabulce a me lpe rozhodnout o pouit index. Statistiky se uplatn
   pi uren optimlnho poad a metody spojen tabulek. Statistiky by
   se mli aktualizovat opakovan, tak jak se mn obsah tabulek.
   
   Indexy nejsou obyejn pouity pro setdn nebo spojen tabulek.
   Sekvenn zpracovn nsledovan explicitnm tdnm je obyejn
   rychlej ne indexn ten na velk tabulce.
   
   Jinak je tomu v ppad pouit LIMIT a ORDER BY, pi kterm se
   vtinou index pouije, vsledkem je pouze mal st tabulky. Funkce
   MAX() a MIN() nepouvaj indexy, ale je mon tut hodnotu zskat:
    SELECT col
    FROM tab
    ORDER BY col [ DESC ]
    LIMIT 1;

   Pokud si myslte, e optimizer myln zvolil sekvenn prohledvn
   tabulky, pouijte pkaz SET enable_seqscan TO 'off' a zkuste zda je
   indexn prohledvn rychlej.
   
   Pi vyhledvn na zklad vzoru jako je nap. opertor LIKE nebo ~ se
   indexy pouj pouze za uritch skutenost:
     * zatek hledanho vzoru mus bt ukotven k zatku, tj.
          + vzor LIKE nesm zanat %
          + ~ regulrn vraz mus zanat ^
     * vzor nesm zanat intervalem, nap. [a-e]
     * vyhledvan, kter nen Case sensitiv jako je ILIKE nebo ~*
       nepouv indexy. Mete ale pout funkcionln indexy, kter
       jsou posny v sekci 4.12
     * pi inicializaci databze (initdb) mus bt pouito C locale
       (pozn. pekladatele - tud v naich podmnkch nepouiteln,
       nepracovalo by esk tdn).
       
    4.9) Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
    
   Podvejte se do manulov strnky pkazu EXPLAIN.
   
    4.10) Co to je R-tree index?
    
   R-tree index se pouv pro indexovn prostorovch dat. Hash index
   neme obslouit prohledvn oblast. B-tree index me dit
   vyhledn oblast v jedn dimenzi. R-tree index me podporovat
   hledn v multidimenzionlnch datech. Pouijeme-li napklad R-tree
   index na atributy typu point, pak systm me efektivn odpovdt na
   dotaz - vyber vechny body uvnit obdlnk.
   
   Pvodn nvrh R-tree je Guttman, A. "R-trees: A Dynamic Index
   Structure for Spatial Searching." Proceedings of the 1984 ACM SIGMOD
   Int'l Conf on Mgmt of Data, 45-57
   
   Tyto materily naleznete v Stonebraker's "Readings in Database
   Systems".
   
   Vestavn R-tree me slouit k indexaci polygon a oblast.
   Teoreticky meme R-tree pout i pro vce dimenz (jin ne 3D). Ve
   skutenosti ale takov rozen R-tree vyaduje trochu prce a ve
   souastnosti chyb dokumentace jak na to.
   
    4.11) Co je Genetic Query Optimizer?
    
   GEQO modul urychluje optimalizaci dotaz pi spojovn mnostv
   tabulek metodou Genetickch algoritm (GA). To umouje zskat velkho
   mnostv variant spojen pi neplnm prohledvnm.
   
    4.12) Jak provst vyhledvn regulrnho vrazu case sensitiv, insensitiv?
    Jak pout index pro case insensitive vyhledvn?
    
   Opertor ~ slou k porovn s regulrnm vrazem, jeho modifikace *~
   pedstavuje case insensitive vyhledvn. Jedn se o obdobu LIKE a
   ILIKE.
   
   Pro vyhledvn bez ohledu na velk mal psmena pouijeme:
    SELECT *
    FROM tab
    WHERE lower(col) = 'abc';

   V tomto ppad se nepouije standardn index. Nicmn, pouije se
   funkcionln index, pokud jej vytvote:
    CREATE INDEX tabindex ON tab (lower(col));

    4.13) Jak v dotazu detekovat, e poloka je NULL?
    
   Urte pomoc IS NULL nebo IS NOT NULL
   
    4.14) Jak jsou rozdly mezi rznmi znakovmi typy?
    
d861 178
a1038 160
   S internmi nzvy se setkte v systmovm katalogu a v nkterch
   chybovch hlench.
   
   Prvn tyi uveden typy jsou tzv. varlena typy (tj. prvn tyi byty
   na disku nesou daj o dlce, nsleduj samotn data). Proto skuten
   pouit prostor je vdy o nco mlo vt ne deklarovan dlka.
   Naopak, tyto datov typy jsou komprimovnty TOASTem, take prostor na
   disku me bt ni ne je oekvno.
   
   VARCHAR(n) je vhodn pro ukldn text prommn dlky s pevn
   stanovenou maximln dlkou. TEXT je pro etzce bez omezen dlky s
   maximem jeden gigabajt.
   
   CHAR(n) slou k ukldn etzc stejn dlky. CHAR(n) dopln przdn
   znaky do specifikovan dlky, zatmco VARCHAR(n) ulo pouze pedan
   znaky. BYTEA je ureno pro ukldn binrnch dat, vetn NULL byte.
   Vechny zde popsan typy maj podobn vkonnostn charakteristiky.
   
    4.15.1) Jak vytvoit serial/auto-increment pole?
    
   PostgreSQL podporuje typ SERIAL. Pi jeho pouit se automaticky
   vytvo SEQUENCE. Napklad:
    CREATE TABLE person (
        id   SERIAL,
        name TEXT
    );

   je automaticky pevedeno do
    CREATE SEQUENCE person_id_seq;
    CREATE TABLE person (
        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
        name TEXT
    );
    CREATE UNIQUE INDEX person_id_key ON person(id);

   Viz dokumentace create_sequence v manulovch strnkch. Dle mete
   pout uniktn hodnotu OID kadho dku. Potom ale muste spoutt
   pg_dump s pepnaem -o, tak aby zstaly zachovny hodnoty OID (u
   pkazu copy COPY WITH OIDS).
   
    4.15.2) Jak zskat hodnotu SERIAL po vloen dku?
    
   Jednou z monost je zskat budouc hodnotu SERIAL funkc nextval()
   ped samotnm vloenm a pak ji vloit explicitn. Napklad v jakmsi
   pseudojazyku:
    newid = execute("SELECT nextval('person_id_seq')");
    execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");

   Mete pak jet pout hodnotu newid v dalch dotazech, nap. jako
   hodnotu cizho kle. Nzev automaticky vytvoen sekvence je
   tabulka_sloupec_seq.
   
   Alternativn mete zskat hodnotu posledn generovou sekvenc funkc
   currval() po vloen:
    execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
    new_id = execute("SELECT currval('person_id_seq')");

   Konen mete pout OID hodnotu vrcenou pkazem INSERT, ale to je
   pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI
   modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme
   $sth->{pg_oid_status} po kadm $sth->execute().
   
    4.15.3) Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s
    jinmi uivateli?
    
   Nikoliv, currval() vrac hodnotu naposledy generovanou ve vaem
   backendu, a ta tud nen spolen vem uivatelm.
   
    4.15.4) Pro nen vygenerovan slo pouito pi peruen transakce? Pro
    vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?
    
   K zajitn efektivnosti soubhu, jsou hodnoty posloupnosti, kdy se o
   n pod, a sekvence nen zamena do ukonen transakce. To zpsobuje
   dry v slovn ze zruench transakc.
   
    4.16) Co to je OID? Co je to TID?
    
   Kad dek vytvoen v PostgreSQL zsk jedinen OID. Vechna OID
   generovan bhem inicializace databze jsou men ne 16384
   (include/access/transam.h). Vechna OID generovan na poadavek
   uivatele jsou rovna nebo vy tto hodnot. Normln, vechna OID
   jsou jedinen nejen uvnit tabulky nebo databze, ale v rmci cel
   instalace PostgreSQL
   
   PostgreSQL pouv OID ve svm internm systmu tabulek k vytvoen
   relac. Tato OID mohou bt pouita k identifikaci konkrtnho
   uivatele a pouita v spojen. Pro OID hodnoty je doporuen typ OID.
   Nad tmto sloupcem mete vytvoit index pro urychlen pstupu.
   
   OID jsou dna vem dkm z centrln oblasti a jsou pouita v kad
   databzi. Pokud potebujete zmnit OID, nebo chcete zkoprovat tabulku
   s pvodnmi OID, lze pout:
        CREATE TABLE new_table(old_oid oid, mycol int);
        SELECT old_oid, mycol INTO new FROM old;
        COPY new TO '/tmp/pgtable';
        DELETE FROM new;
        COPY new WITH OIDS FROM '/tmp/pgtable';

   OID jsou uloena jako 4bajtov integer a peteou po tyech
   miliardch. Nebylo hleno, e by se tak nkdy stalo, pesto ale
   plnujeme odstranit tento limit dv ne se tak stane.
   
   TID se pouvaj i identifikaci fyzickch dk s hodnotou bloku a
   offsetu. TIDs se mn modifikac dk (pouv se jako ukazatel
   indexu fyzickho dku).
   
    4.17) Jak je vznam nkterch vraz pouitch v PostgreSQL?
    
   V nkterch zdrojovch kdech nebo star dokumentaci se mete setkat
   s nsledujcmi vrazy, kter maj ir vznam. Zde je pklad
   nekterch:
     * tabulka, relace, tda (table, relation, class)
     * dek, zznam, ntice (row, record, tuple)
     * sloupec, poloka, atribut (column, field, attribute)
     * vyhledn, vbr (retrieve, select)
     * nhrada, prava (replace, update)
     * pidn, vkldn (append, insert)
     * OID, serial value (OID, serial value)
     * portal, kurzor (portal, cursor)
     * range variable, jmno tabulky, alias tabulky (range variable,
       table name, table alias)
       
   seznam tchto vraz mete nalzt na
   http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
   /glossary.html.
   
    4.18) Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
    AllocSetAlloc()"?
    
   Pravdpodobn dolo k vyerpn virtuln pami na Vaem systmu,
   nebo jdro m nzk limit pro urit zdroje. Vyzkouejte ped startem
   posmatera
    ulimit -d 262144
    limit datasize 256m

   Zle na Vaem shellu, zda budou tyto pkazy spn, mly by zvit
   limit datovho segmentu pro Vae procesy a umonit tak dokonen
   dotazu. Tyto pkazy se aplikuj na aktuln proces a vechny synovsk
   procesy vytvoen po proveden pkazu. Pokud mte problmy s SQL
   klientem protoe backend vrac pli mnoho dat, zkuste zvit limity
   ped startem klienta.
   
    4.19) Jak se dozvm, kterou verzi PostgreSQL pouvm?
    
   V psql spuste SELECT version();
   
    4.20) Pro operace s velkmi objekty kon "invalid large obj descriptor"?
    
   Vechny operace s velkmi objekty - lo_open, lo_close, ... muste
   spoutt v transakci, tj. mezi pkazy BEGIN WORK a COMMIT.
   
   PostgreSQL uvoluje handle velkch objekt pi skonen transakce.
   Pokud budete pracovat s velkmi objekty mimo transakci, pravdpodobn
   dostanete toto chybov hlen, protoe handle ji budou neplatn.
   Pokud pouvte interface podobn ODBC muste nastavit set auto_commit
   off.
   
    4.21) Jak vytvoit sloupec obsahujc implicitn aktuln datum?
    
   Pouijte CURRENT_TIMESTAMP:
d1042 148
a1189 126
    4.22) Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
    
   Dvj verze (ped 7.4) spojovali vnoen dotazy k vnjm
   sekvennm tenm vsledku poddotazu pro kad dek vnjho dotazu.
   Pokud poddotaz vrtil nkolik mlo dk IN bylo rychl. Pro ostatn
   ppady je vhodn nahradit IN EXISTS:
    SELECT *
    FROM tab
    WHERE col IN (SELECT subcol FROM subtab);

   na:
   SELECT *
   FROM tab
   WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);

   Pro urychlen vytvoete index pro subcol.
   
   Ve verzi 7.4 a pozdjch, IN pouv stejn sofistikovanou techniku
   spojovn tabulek jako ostatn dotazy a je preferovan ped EXISTS.
   
    4.23) Jak provst vnj spojen (outer join)?
    
   PostgreSQL podporuje vnj spojen tabulek standardnmi SQL pkazy.
   Zde jsou dva pklady:
    SELECT *
    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);

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

   Tyto identick dotazy napoj t1.col na t2.col a jet pid
   nepipojen dky z t1 (kter nemaj obdoby v t2). Prav spojen
   (RIGHT JOIN) pid nepipojen dky z t2. FULL JOIN vrt vechny
   dky, vetn nepipojench z tbulek t1 a t2. Klov slovo OUTER je
   nepovinn a ve se na LEFT, RIGHT a FULL join. Bn spojen se
   nazv INNER JOIN.
   
   V dvjch verzch se vnj spojen tabulek mohlo simulovat pomoc
   UNION a NOT IN. Napklad pro spojen tabulek tab1 a tab2, je
   nsledujc dotaz ekvivalentn k vnjmu spojen dvou tabulek:
    SELECT tab1.col2, tab2.col2
    FROM tab1, tab2
    WHERE tab1.col1 = tab2.col1
    UNION ALL
    SELECT tab1.col2, NULL
    FROM tab1
    WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
    ORDER BY col1;

    4.24) Jak provst dotaz z vce databz?
    
   PostgreSQL nepodporuje dotazy do jin ne aktuln databze.
   
   contrib/dblink nabz funkce umoujc proveden dotazu v jin
   databzi. Klient si me otevt simultln pipojen do rznch db
   bez omezen.
   
    4.25) Me funkce vrtit vce dk nebo sloupc?
    
   V PostgreSQL 7.3 mete jednodue vracet vce dk nebo sloupc z
   funkce, viz:
   http://techdocs.postgresql.org/guides/SetReturningFunctions.
   
    4.26) Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL
    funkcch?
    
   Peloen kd PL/pgSQL funkce je uloen ve vyrovnvac pamti, tj.
   funkce je pekldna pouze pi zmn kdu, nikoliv ped kadm volnm
   funkce. Nechtnm vedlejm efektem je, e voln funkce sele, kdy
   se funkce odkazuje na doasnou tabulku, pokud tato tabulka byla od
   pekladu funkce zruena (akoliv ji byla znovu vytvoena a existuje).
   Jedinm eenm problmu je pstup k doasn tabulce pomoc EXECUTE,
   tj. dynamick provdn dotazu. Tento pkaz zajist opakovan peklad
   dotazu pi kadm voln funkce.
   
    4.27) Jak jsou monosti replikace databz?
    
   Existuje nkolik dostupnch een master/slave replikac, tj umouj
   modifikace master databze a slave databzm umouj pouze ten. Na
   konci http://gborg.PostgreSQL.org/genpage?replication_research najdete
   jejich seznam. Na een multi-master replikaci se pracuje na
   http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
   
    4.28) Jak jsou monosti ifrovn databz?
    
     * contrib/pgcrypto obsahuje ifrovac funkce pouiteln v SQL
       dotazech.
     * K ifrovn penosu dat z klienta na server, mus bt server
       peloen s podporou ssl a pepna ssl v postgresql.conf mus bt
       nastaven na hodnotu true. Klient mus mt vytvoen zznam hostssl
       v pg_hba.conf a tak mt povolen reim ssl. Lze pout i jin
       prostedky, nejen nativn podporu ssl v PostgreSQL, nap. stunel a
       ssh.
     * Hesla uivatel databze jsou zaifrovna ponaje verz 7.3. Ve
       starch verzch toto chovn muselo bt vynuceno volbou
       PASSWORD_ENCRYPTION v postgresql.conf
     * Server me bet na ifrovanm souborovm systmu.
     _________________________________________________________________
   
                           Roziovn PostgreSQL
                                      
    5.1) Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
    
   Problm me bt zpsoben mnoha okolnostmi. Vyzkouejte si svoji
   funkci nejdve v njak jednoduch aplikaci.
   
    5.2) Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
    PostgreSQL?
    
   Polete sv rozen do konference pgsql-hackers, a ono pak mon
   skon v podadresi contrib.
   
    5.3) Jak napsat funkci v C vracejc ntici?
    
   Funkce vracejc tabulky jsou podporovan PostgreSQL 7.3 a vy pro
   jazyky C, PL/PgSQL a SQL. Vce naleznete v The Programmer's Guide.
   Pklady tchto funkc pro C naleznete v contrib/tablefunc.
   
    5.4) Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci
    vzata v potaz. Pro?
    
   Makefile nem informace o zvislostech mezi hlavikovmi soubory.
   Muste provst make clean a pak make. Pokud pouvte gcc, mete
   pout pepna --enable-depend pkazu configure k automatickmu
   een zvislost pekladaem.
@


1.1
log
@file FAQ_czech was initially added on branch REL7_4_STABLE.
@
text
@d1 1189
@


1.1.2.1
log
@Repair name.
@
text
@a0 1189
asto kladen dotazy (FAQ) PostgreSQL
=====================================

Obecn otzky
=============
1.1 Co je PostgreSQL? Jak se vyslovuje?
1.2 Jak je licence na PostgreSQL?
1.3 Na kterch Unixex lze spustit PostgreSQL?
1.4 Kter ne-unixov platformy jsou podporovan?
1.5 Kde mohu zskat PostgreSQL?
1.6 Kde mohu zskat podporu?
1.7 Kde je posledn verze?
1.8 Jak je dostupn dokumentace?
1.9 Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
1.10 Jak se mohu nauit SQL?

1.11 Nem PostgreSQL problmy s rokem 2000?
1.12 Jak se pipojit k vvojskmu tmu?
1.13 Kam podat report o chyb?
1.14 Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
1.15 Jak lze finann pomoci PostgreSQL?

User client dotazy
==================
2.1 Kde naleznu ODBC ovladae pro PostgreSQL?
2.2 Jak nstroje lze pout pro PostgreSQL a web?
2.3 Existuje grafick rozhran pro PostgreSQL?
2.4 Kter programovac jazyky maj podporu pro PostgreSQL?

Administrativn dotazy
======================
3.1 Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
3.2 Pi startu postmaster, dostanu chybov hlen Bad System Call nebo
core dump. Pro? 3.3 Pi startu postmastera dostanu hlen o chyb
IpcMemoryCreate. Pro? 3.4 Pi startu postmastera dostanu hlen o
chyb IpcSemaphoreCreate. Pro? 3.5 Jak povolit nebo zakzat pstup z
jinch stanic? 3.6 Jak ladit databzov stroj na lep vkon?

3.7 Jak jsou monosti ladn?
3.8 Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
3.9 K emu slou adres pgsql_tmp?

3.10 Pro je poadovno dump a obnoven (load) databze bhem upgrade
mezi velkmi verzemi PostgreSQL?

Provozn dotazy
===============
4.1 m se li binrn a normln kurzor?
4.2 Jak zskat pouze prvn dek dotazu? Nhodn dek?
4.3 Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
4.4 Jak odstranm sloupec tabulky, jak zmnm jeho typ?
4.5 Jak je maximln velikost dku, tabulky a databze?
4.6 Kolik diskovho prostoru je poteba k uloen dat z normlnho
textovho souboru? 4.7 Jak zskm seznam vytvoench tabulek, index,
databz? 4.8 Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
4.9 Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?

4.10 Co to je R-tree index?
4.11 Co je Genetic Query Optimizer?
4.12 Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn? 4.13 Jak
v dotazu detekovat, e poloka je NULL? 4.14 Jak jsou rozdly mezi
rznmi znakovmi typy? 4.15.1 Jak vytvoit serial/auto-increment pole?
4.15.2 Jak zskat hodnotu SERIAL po vloen dku?

4.15.3 Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s
jinmi uivateli? 4.15.4 Pro nen vygenerovan slo pouito pi
peruen transakce? Pro vznikaj dry v slovn vlastn
sekvenc/SERIAL sloupce? 4.16 Co to je OID? Co je to TID?

4.17 Jak je vznam nkterch vraz pouitch v PostgreSQL?
4.18 Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
AllocSetAlloc()"? 4.19 Jak se dozvm, kterou verzi PostgreSQL pouvm?
4.20 Pro operace s velkmi objekty kon "invalid large obj
descriptor"? 4.21 Jak vytvoit sloupec obsahujc implicitn aktuln
datum? 4.22 Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
4.23 Jak provst vnj spojen (outer join)?

4.24 Jak provst dotaz nap nkolika databzemi?
4.25 Me funkce vrtit vce dk nebo sloupc?
4.26 Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL
funkcch? 4.27 Jak jsou monosti replikace databz?

4.28 Jak jsou monosti ifrovn databz?

Roziovn PostgreSQL
======================
5.1 Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
5.2 Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
PostgreSQL? 5.3 Jak napsat funkci v C vracejc ntici?

5.4 Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci
vzata v potaz. Pro?
------------------------------------------------------------------------

Obecn otzky
=============

1.1 Co je PostgreSQL? Jak se vyslovuje?
---------------------------------------

PostgreSQL se vyslovuje Post-Gres-Q-L.

PostgreSQL vychz z databze POSTGRES - vzkumnho prototypu DBMS nov
generace. Z postgresu byl pevzat siln datov model a bohat soubor
datovch typ a jeho dotazovac jazyk PostQuel byl nahrazen rozenou
podmnoinou jazyka SQL. PostgreSQL lze pouvat bez omezen a jeho
zdrojov kdy jsou voln k dispozici.

PostgreSQL vyvj tm vvoj pihlench do vvojsk konference
PostgreSQL. Souasnm koordintorem je Marc G. Fournier. (Odpov 1.6. -
jak se zapojit). Tento tm je zodpovdn za veker vvoj PostgreSQL.

Autory prvn verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
portace, testovn, ladn a roziovn kdu se zapojilo mnoho dalch
vvoj . Pvodni kd Postgresu, ze kterho PostgreSQL vychz, je
vsledkem sil mnoha student a programtor pracujcch pod vedenm
prof. Michaela Stonebrakera na University of California v Berkley.

Pvodn nzev software z Berkley byl Postgres. Po pidn jazyka SQL se
nzev zmnil na Postgres95. Koncem roku 1996 byl RDBMS pejmenovn na
PostgreSQL.

1.2 Jak je licence na PostgreSQL?
----------------------------------

PostgreSQL je pedmtem nsledujcch autorskch prv:

Dl copyright (c) 1996-2002, PostgreSQL Global Development Group

Dl copyright (c) 1994-6, Regents of the University of California

Udluje se oprvnn k uit, rozmnoovn, provdn prav a
roziovn tohoto softwaru a dokumentace k nmu, pro jakkoli ely,
bez licennho poplatku a bez psemn licenn smlouvy, za podmnky, e
na vech jeho kopich je uvedeno oznmen o ve uvedench prvech,
jako i obsah tohoto a dvou nsledujcch odstavc.

THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V DNM
PPAD ODPOVDNA DN TET OSOB ZA PMOU, NEPMOU, ZVLTN,
NAHODILOU NEBO VSLEDNOU KODU, VETN ULHO ZISKU, ZPSOBENOU UITM
TOHOTO SOFTWARU A DOKUMENTACE K NMU, A TO I V PPAD, E THE
UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MONOSTI VZNIKU TAKOV
KODY.

THE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE SPECIFICKM
ELM. NͮE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A LE" A THE
UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO DRBU, PODPORU,
AKTUALIZACI, VYLEPEN NEBO MODIFIKACI.

Ve uveden je BSD licence, bn licence otevenho zdroje. Nen zde
dn omezen ohledn uit kdu zdroje. Jsme s tm spokojeni a nemme v
myslu na tto skutenosti cokoli mnit.

1.3 Na kterch Unixex lze spustit PostgreSQL?
---------------------------------------------

PostgreSQL b na vech modernch unixovch platformch. V instalanch
instrukcch naleznete aktuln seznam vech platforem na kterch byla
testovnm ovena funkcionalita PostgreSQL.

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

Klient
------

Knihovna libpq, psql a nkter dal moduly byly peloeny pro MS
Windows. Klienta lze provozovat na MS Windows, ten prostednictvm
TCP/IP protokolu komunikuje se serverem bcm na nkter z
podporovanch Unixovch platforem. K pekladu lze pout win32.mak a
Win32 knihovny libpq a psql. K databzi PostgerSQL lze pistupovat skrze
rozhran ODBC.

Server
------

Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou
Cygwin, Cygnus Unix/NT porting library. Na nativnm portu pro MS Win
NT/2000/XP se pracuje. Existujc port pro Novell Netware 6 naleznete na
http://forge.novell.com.

1.5 Kde mohu zskat PostgreSQL?
-------------------------------

Primrnm anonymnm ftp serverem pro PostgreSQL je
ftp://ftp.PostgreSQL.org/pub . Seznam zrcadel naleznete na naich
webovch strnkch.

1.6 Kde mohu zskat podporu?
----------------------------

Hlavnm mailov konference je pgsql-general@@PostgreSQL.org. Slou k
diskuzm ohledn PostgreSQL. Pihlste se zaslnm mailu obsahujc
nsledujc dky v tle dopisu (nikoliv v zhlav - subjectu)

subscribe
end

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

Mete si vydat denn pehled (diggest), kter m zhruba 30K denn
zprv.

Konference psql-bugs je urena k zasln zprv o chybch. Pro
pihlen polete mail se stejnm obsahem jako v pedchozm ppad na
adresu mailto:pgsql-bugs-request@@PostgreSQL.org.

Do vvojsk konference se pihlste odeslnm dopisu s ji zmiovanm
obsahem na mailto:pgsql-hackers-request@@PostgreSQL.org.

Seznam dalch konferenc naleznete na strnkch PostgreSQL
http://www.postgresql.org

1.7 Kde je posledn verze?
--------------------------

Posledn verz je PostgreSQL 7.4.. Plnujeme uvolnit velkou verzi
kadch est a osm msc.

1.8 Jak je dostupn dokumentace?
---------------------------------

Rzn manuly, manulov strnky a nkolik malch testovacch pklad
jsou sousti distribuce. Podvejte se do adrese /doc. Manuly jsou
pstupn online na http://www.PostgreSQL.org/docs.

Na adresch http://www.PostgreSQL.org/docs/awbook.html a
http://www.commandprompt.com/ppbook/ naleznezte dv online knihy o
PostgreSQL. Seznam dostupn literatury je na
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor
technickch lnk s tematikou PostgresQL najdete na
http://techdocs.PostgreSQL.org/.

psql m uiten metapkaz \d slouc k zobrazen informac o typech,
opertorech, funkc, agreganch funkc atd.

Vce dokumentace naleznete na naich webovch strnkch.

1.9 Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
------------------------------------------------------------------

PostgreSQL podporuje rozenou podmnoinu SQL-92. V naem TODO [1]
najdete seznam znmch chyb, chybjcch vlastnost a seznam vlastnost,
kter budou do systmu implementovny v budoucnu (vetn priorit).

1.10 Jak se mohu nauit SQL?
----------------------------

V knize The PostgreSQL book na
http://www.PostgreSQL.org/docs/awbook.html je vysvtlen jazyk SQL (vyla
esky). Dal dostupnou knihou je http://www.commandprompt.com/ppbook.
Kvalitn nvody naleznete na
http://www.intermedia.net/support/sql/sqltut.shtm, na
http://www.intermedia.net/support/sql/sqltut.shtm [2] , a na
http://sqlcourse.com.

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

Mnoho uivatel doporuuje The Practical SQL Handbook, Bowman, Judith
S., et al., Addison-Wesley. Jin preferuj The Complete Reference SQL,
Groff et al., McGraw-Hill.

1.11 Nem PostgreSQL problmy s rokem 2000?
-------------------------------------------

Nem, meme pracovat s datumy po roce 2000 naeho letopotu i ped
rokem 2000 p.n.l.

1.12 Jak se pipojit k vvojskmu tmu?
-----------------------------------------

Nejdve si sthnte nejnovj zdroje a pette si vvojskou
dokumentaci na naem webu nebo v distribuci. Pak se pihlate do
konferenc pgsql-hackers a pgsql-patches. Kvalitn zplaty poslejte do
pgsql-patches.

Prvo commit m v cvs archivu asi tincti lid. Kad z nich poslal
mnoho kvalitnch zplat, take tehdej commiters mli jistotu, e budou
pedkldat jenom kvalitn zplaty a mohli jim pedlit vt prva.

1.13 Kam podat report o chyb?
------------------------------

Navtivte nai PostgreSQL BugTool strnku na
http://www.PostgreSQL.org/bugs/bugs.php, kter obsahuje nvod a smrnice
jak podat chybov report.

Ovte si na naem ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li mte
nejnovj verzi PostgreSQL a zda-li k n neexistuj njak zplaty.

1.14 Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
--------------------------------------------------------------

Existuje nkolik hledisek jak porovnvat software: vlastnosti, vkon,
spolehlivost, podpora a cena.

Vlastnosti
----------

PostgreSQL m hodn spolench vlastnost s velkmi komernmi DBMS,
nap. transakce, vnoen dotazy, spout, pohledy, kontrolu referenn
integrity a sofistikovan zamykn. Podporuje nkter vlastnosti, kter
tyto systmy nemaj, uivatelem definovan typy, ddinost, pravidla,
MVCC redukujc zamykn.

Vkon
-----

Vkonnostn je na tom PostgreSQL podobn jako dal komern ale i open
source databze, v nem je rychlej, jindy pomalej. V porovnn s
MySQL a podobnmi databzovmi systmy je PostgreSQL rychlej pi
vceuivatelskm pstupu, sloitjch dotazech a zaten read/write
dotazy. MySQL je rychlej v jednoduch dotazech s malm potem
uivatel. Navc, MySQL nepodporuje mnoh vlatnosti zmnn v sekci
vlastnosti. Zapracovali jsme na spolehlivosti a podporovanch
vlastnostech, a vkon zvyujeme v kad verzi. Zajmavou strnku
porovnvajc PostgreSQL a MySQL naleznete na
http://openacs.org/philosophy/why-not-mysql.html. Za vvojem MySQL nen
Open Source komunita, ale komern spolenost, pestoe svoje produkty
distribuuje jako Open Source.

Spolehlivost
------------

Jsme si vdomi, e databze mus bt spolehliv, jinak je nepouiteln.
Sname se zveejovat dobe otestovan, stabiln kd s minimem chyb.
Kad verze je vce ne msc v beta testovn, a nae historie verz
ukazuje, e meme nabdnout stabiln, solidn verze, kter jsou
pipraveny pro reln nasazen. V tto oblasti jsme srovnateln s
dalmi databzemi.

Podpora
-------

Na na mailov konferenci mete kontaktovat velkou skupinu vvoj a
uivatel.problm. Nememe garantovat opravu, nicmn komern
databze tak ne vdy nabdnou opravu. Podle ohlas je nae podpora
hodnocena lpe ne u jinch DBMS a to dky pmmu kontaktu s vvoji,
velkou komunitou uivatel, kvalitnmi manuly a pstupnm zdrojovm
kdem. Pro uivatele, kte vyaduj podporu ke konkrtnm ppadm,
existuje placen podpora (FAQ sekce 1.6).

Cena
----

PosgreSQL lze voln pouvat pro nekomern i komern pouit. Mete
do svch produkt pidat n kd bez omezen, respektive v souladu s
podmnkami na licenn smlouvy (v duchu BSD licence).

1.15 Jak lze finann pomoci PostgreSQL?
----------------------------------------

PosgreSQL m prvotdn infrastrukturu od naeho zatku v roce 1996.
Vdme za to Marku Fournierovi, kter zaloil a spravoval tuto
infrastrukturu nkolik let.

Kvalitn infrastruktura je velice dleit pro kad open source
projekt. Pedchz nedorozumnm, kter velice zdruj pokrok v
projektu.

Tato infrastruktura nen lacin. K jejmu zajitn je teba stle
hradit urit msn a jednorzov stky. Pokud mte Vy nebo Vae
spolenost penze, kter nm mete darovat, obrae se na
http://store.pgsql.com/shopping/ a darujte je.

Akoliv webov strnka zmiuje PostgreSQL, Inc. vklady jsou ureny pouze
k podpoe projektu PostgreSQL a nepodporuj dnou existujc
spolenost. Pokud to vyadujete, mete poslat kontrolu na nai
kontaktn adresu.

Pokud mte pklad spnho nasazen PostgreSQL, pihlat se na n
advocacy site na http://advocacy.postgresql.org.

------------------------------------------------------------------------

User client dotazy
==================

2.1 Kde naleznu ODBC ovladae pro PostgreSQL?
---------------------------------------------

Pro PostgreSQL existuj dva ODBC ovladae - PsqlODBC a OpenLink ODBC.

PsqlODBC je ke staen na
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.

OpenLink mete zskat na http://www.openlinksw.com. Spolupracuje s
jejich klientskm programovm vybavenm a je dostupn pro vechny jimi
podporovan platformy (Win, Mac, Unix, VMS).

Tento ovlada je uren pro ty, kte vyaduj podporu komern kvality,
nicmn freeware verze je dostupn a funkn. Dotazy zaslejte na
postgres95@@openlink.co.uk.

2.2 Jak nstroje lze pout pro PostgreSQL a web?
--------------------------------------------------

Pkn vod do databzovch technologi zabezpeujcch chod webovch
strnek najdete na http://www.webreview.com.

Pro tvorbu webu existuje excelentn rozhran PHP, kter naleznete na
http://www.php.net.

Pro sloitj ppady se asto pouv Perl a CGI.pm nebo mod_perl.

2.3 Existuje grafick rozhran pro PostgreSQL?
----------------------------------------------

Pro PostgreSQL existuje nkolik grafickch rozhran: PgAccess
(http://www.php.net), PgAdmin (http://www.php.net), RHDB Admin
(http://sources.redhat.com/rhdb/) a Rekall (
http://www.thekompany.com/products/rekall/). Dle existuje PHPPgAdmin
(http://phppgadmin.sourceforge.net/) rozhran PostgreSQL zaloen na web
technologii.

plnj seznam najdete na
http://techdocs.postgresql.org/guides/GUITools.

2.4 Kter programovac jazyky maj podporu pro PostgreSQL?
----------------------------------------------------------

Vtina programovacch jazyk obsahuje rozhran pro PostgreSQL.
Podvejte se do roziujcch modul Vaeho programovacho jazyka.

Distribuce PostgreSQL obsahuje tato rozhran:

    - C (libpq)
    - Embbedded C (ecpg)
    - Java (jdbc)
    - Python (PyGreSQL)
    - TCL (libpgtcl)

Dal rozhran jsou dostupn na http://gborg.postgresql.org v sekci
Drivers/Interfaces.

------------------------------------------------------------------------

Administrativn dotazy
======================

3.1 Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
--------------------------------------------------------------

Pouijte volbu --prefix pi sputn configure

3.2 Pi startu postmaster, dostanu chybov hlen Bad System Call nebo core dump. Pro?
----------------------------------------------------------------------------------------

Dvody mohou bt rzn, ale nejprve zkontrolujte, zda V systm
podporuje System V extensions. PostgreSQL vyaduje v jde podporu
sdlen pamti a semafor.

3.3 Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate. Pro?
-------------------------------------------------------------------------

Buto nemte sprvn nakonfigurovanou sdlenou pam v jde nebo musite
zvtit jej velikost. Potebn velikost je zvisl na architektue a na
tom, kolik pamovch buffer a backend mte povoleno pro postmastera.
Pro vtinu systm s peddefinovanm potem backend a pamovch
buffer je minimum zhruba 1MB. V
http://www.postgresql.org/docs/view.php?version=current&idoc=1&file=kern
el-resources.html [3] naleznete podrobnj informace o sdlen pamti a
semaforech.

3.4 Pi startu postmastera dostanu hlen o chyb IpcSemaphoreCreate. Pro?
----------------------------------------------------------------------------

Pokud dostane chybovou zprvu IpcSemaphoreCreate: semget failed (No
space left on device), pak vae jdro nem dost volnch semafor.
PostgreSQL vyaduje jeden semafor pro kad backend v pozad. Doasnm
eenm je start postmastera s limitem backend. Pouijte pepna -N s
hodnotou men ne 32. plnm eenm je zven hodnot SEMMNS a SEMMNI
jadra.

Nefunkn semafory mohou zpsobit pd bhem intenzivnch databzovch
operac.

Pokud se tato chyba vyskytuje jet nkde jinde, mon nemte vbec
nakonfigurovny semafory ve vaem jde. V PostgreSQL Administrator's
Guide najdete podrobnj popis poadavk na sdlenou pamt a semafory.

3.5 Jak povolit nebo zakzat pstup z jinch stanic?
-----------------------------------------------------

Pi vchozm nastaven PostgreSQL odepe pstup z jinch stanic ne
lokln s pouitm UDP. Databze se zpstupn jinm stanicm nastavenm
pepnae -i postmastera a povolenm stanice a urenm reimu
autentifikace v $PGDATA/pg_hba.conf. Tm se povol TCP/IP spojen.
ZASTARAL

3.6 Jak ladit databzov stroj na lep vkon?
----------------------------------------------

Urit pomohou indexy. Pkaz EXPLAIN zobraz zpsob interpretace Vaeho
dotazu a pouit index.

Pi vt dvce INSERT uvaujte o nhrad pkazem COPY. Ten je mnohem
rychlej neli samotn INSERT. Kad pkaz mimo blok BEGIN WORK/COMMIT
se provd ve vlastn transakci. Zvate, zda-li by se nedalo nkolik
pkaz spojit do jedn transakce. Tm se sn reie na transakce. Ped
provedenm rozshlch zmn zrute indexy, kter po dokonen zmn opt
vytvote.

Mte nkolik dalch monost, jak zlepit vkon. Mete zakzat fsyn()
pi startu postmastera pepnai -o -F. Tyto pepnae zabrn fsync(),
tj. zpisu na disk po kad transakci.

Mete zvit velikost pamovch buffer pouitch backendy tj.
parametr -B postmasteru. Pokud ale tato hodnota bude pli velk, tak
mon nespustte postmastera jeliko doshnete limitu sdlen pamti.
Kad buffer m 8K a implicitn je 64 buffer.

Dle mete pout pepna -S k zven limitu pamti pro backendy na
doasn tdn. Hodnota je mnna v kilobytech a vchoz nastaven je
512, tj. 512K.

Mete pout pkaz CLUSTER, kter uspod fyzicky data v tabulkch
podle indexu. Vce na manulovch strnkch pkazu CLUSTER.

3.7 Jak jsou monosti ladn?
------------------------------

Mte nkolik monost jak se dostat k uitenm stavovm informacm.

Zaprv, pi pekladu pouijte pepna --enable-cassert, tm se zapne
monitorovn a nsledn zastaven aplikace, kdy se proces v backendu
dostane do neoekvanho stavu.

Jak postmaster tak postgres m nkolik pepna umoujcch ladn.
Postmaster nastartujte tak, abyste si byli jisti, e je standartn
vstup a standartn chybov vstup pesmrovn do souboru logu,
napklad:

cd /usr/local/pgsql
./bin/postmaster > server.log 2>&1 &

Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje uiten
informace o problmech a chybch vyskytlch se na serveru. Postmaster m
pepna -d urujc, jak podrobn maj bt reportovan informace, tj.
debug level. Pozor, pi velk hodnot debug levelu rychle roste velikost
souboru logu.

Pokud neb postmaster, mete spustit backend PostgreSQL z pkazov
dky a napsat svj SQL dotaz pmo v backendu (doporueno pouze pro
ladn). Dotaz je v tomto ppad ukonen novou dkou, nikoliv
stednkem. Pokud mte aplikaci peloenou s ladcmi symboly, mete
pout debbuger k monitorovn procesu. Pokud nen backend sputn
postmasterem, pak neb ve svm obvyklm prosted a tud nkter
problmy dan interakc mezi backendy nemohou bt nasimulovny.

Pokud b postmaster, spuse psql v jednom okn a pak si zjistte PID
procesu postgres pouitho psql. V debuggeru sepipojte k postgresql
PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql. Pokud
ladte startup postgresu, pak nastavte PGOPTIONS="-W n" a spuse psql.
Tento pepna zpsob pauzu n sekund, take budete mt as se pipojit
k procesu, a nastavit breakpointy a pokraovat v startup posloupnosti.

Pro ladn a men vkonu mohou bt uiten pepnae -s, -A a -t
programu postgres (backend).

Mete provst peklad s profilac, tak abyste vidli kolik asu
zabraj jednotliv funkce. Soubory s profily backend jsou uloeny v
adresi pgsql/data/base/dbname. Profil klienta pak v jeho aktulnm
adresi. Korektn profilace v prosted Linux poaduje konfiguraci
systmu s parametrem -DLINUX_PROFILE.

3.8 Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
---------------------------------------------------------------------

Zvyte limit postmastera na maximln poet souasn sputnch
backend.

Vchoz hodnota je 32 backend. Tuto hodnotu zvte zastavenm a
optovnm sputnm postmastera s parametrem -N nebo pravou
postgresql.conf.

Pi zven hodnoty -N nad 32 muste zvit hodnotu -B nad vchoz 64,
-B mus bt minimln dvakrt vt, nebo jet lpe vce. Pravdpodobn
zjistte, e pro velk poet proces backendu je nutn zvit nkter
parametry jdra. Jsou to pedevm maximln velikost sdlen pamti
SHMMAX, maximln poet semafr SEMMNS a SEMMNI, maximln poet
proces NPROC, maximln poet proces uivatele MAXUPRC a maximln
poet otevench soubor NFILE a NINODE. Dvod pro omezen maximlnho
potu backend je fakt, e by mohlo dojt k vyerpn zdroj Vaeho
systmu.

3.9 K emu slou adres pgsql_tmp?
------------------------------------

Tento adres obsahuje doasn soubory vytvoen exekutorem dotaz.
Napklad, kdy je nutn tdn k zajitn ORDER BY a tdn m vt
nroky na prostor ne povoluje parametr -S backendu, pak je vytvoen
doasn soubor k uloen extra daj.

Doasn soubory jsou obvykle mazny automaticky, ale me se stt, e
bhem tdn server spadne. Zastaven a dal start postmastera zajist
odstrann soubor s tchto adres.

3.10 Pro je poadovno dump a obnoven (load) databze bhem upgrade mezi velkmi verzemi PostgreSQL?
------------------------------------------------------------------------------------------------------

PostgreSQL se minimln mn bhem malch verz, take nap. pi upgrade
z 7.2 na 7.2.1 nen nutn dump a load databze. Ale velk verze asto
mn intern formt systmovch tabulek a datovch soubor. Tyto zmny
jsou natolik rozshl, e nelze zajistit zptnou kompatibilitu pro
datov soubory. Dump ulo data v obecnm formtu, take mohou bt
natena a pouvna v novm internm formtu.

------------------------------------------------------------------------

Provozn dotazy
===============

4.1 m se li binrn a normln kurzor?
------------------------------------------

Popis najdete v manulov strnce DECLARE

4.2 Jak zskat pouze prvn dek dotazu? Nhodn dek?
-------------------------------------------------------

Podvejte se do man. strnky pkazu FETCH, nebo pouijte SELECT ...
LIMIT ...

Nen nutn zpracovvat cel dotaz, kdy potebujete pouze nkolik
prvnch dk. Pokud existuje index ORDER BY, PostgreSQL je schopen
peruit zpracovn dotazu po zskn poadovanho potu dk.

K zskn nhodnho dku pouijte:

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

4.3 Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
------------------------------------------------------------

Podvejte se do zdrojovch kd psql do souboru
pgsql/src/bin/psql/describe.c. Ten obsahuje SQL pkazy, kter se
pouvaj v psql metapkazech. Dle mete spustit psql s pepnaem
-E, kter zpsob zobrazen kadho dotazu, kter zpracovn metapkazu
vyvol.

4.4 Jak odstranm sloupec tabulky, jak zmnm jeho typ?
-------------------------------------------------------

Ponaje verz 7.3 mete pout pkaz ALTER TABLE DROP COLUMN. Ve
starch verzch mete pout nsledujc postup:

BEGIN;
LOCK TABLE old_table;
SELECT ... -- mimo sloupec, kter chceme odstranit
  INTO TABLE new_table;
DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table;
COMMIT;

Pro zmnu typu sloupce je teba provst:

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

Pot provete VACUUM FULL tab - uvolnte tm diskov prostor zabran
nyn ji neplatnmi dky.

4.5 Jak je maximln velikost dku, tabulky a databze?
---------------------------------------------------------

PostgreSQL m tato omezen:

 Maximln velikost databze:           neomezena (existuj 32TB db)

 Maximln velikost tabulky:            32 TB

 Maximln velikost dky:              1.6 TB

 Maximln velikost poloky             1 GB

 Maximln poet dk v tabulce:       neomezeno

 Maximln poet sloupc v tabulce:     250-1600 podle typ

 Maximln poet index na tabulce:     neomezeno

Ve skutenosti nic nen neomezeno, limitem bv vdy dostupn diskov
pam nebo velikost operan pamti. Pokud mte nkterou z tchto hodnot
neobvykle velkou, me dojt ke snen vkonu.

Maximln velikost tabulky je 32 TB a nevyaduje podporu velkch soubor
operanm systmem. Velk tabulky se ukldaj do nkolika 1 GB soubor
take limity souborovho systmu nejsou podstatn.

Maximln velikost tabulky a maximln poet sloupc meme
zetynsobit nastavenm velikosti bloku na 32K.

4.6 Kolik diskovho prostoru je poteba k uloen dat z normlnho textovho souboru?
-------------------------------------------------------------------------------------

PostgreSQL vyaduje a ptinsobek diskovho prostoru k uloen dat z
textovho souboru.

Napklad, uvaujme soubor se 100 tisci dky obsahujc na kad dce
cel slo a textov popis. Text je v prmru dvacet byt dlouh.
Textov soubor bude 2.8 MB dlouh. Velikost databze obsahujc
odpovdajc data bude zhruba 6.4 MB.

 36 byt: hlavika dku (piblin)
 24 byt: jedna celoseln poloka a jedna textov
  4 byty: ukazatel na strnku k ntici
------------------------------------------------------
 64 byt na dek

Velikost datov strnky PostgreSQL je 8KB

 8192 byt na strnce
---------------------- = 128 dek na strnku
  64 byt za dek

100000 dek
-------------------- = 782 strnek (zaokrouhleno nahoru)
128 dek na strnce

782 * 8192 = 6, 406, 144 byt (6.4 MB)

Indexy nemaj tak velkou reii, ale mohou bt tak velk, protoe
obsahuj indexovan data.

Hodnoty NULL jsou uloeny v bitmapch, take spotebuj jen velmi mlo
diskovho prostoru.

4.7 Jak zskm seznam vytvoench tabulek, index, databz?
------------------------------------------------------------

psql m sadu metapkaz k zobrazen tchto informac. Jejich seznam
zskte pkazem \?. Dle se mete podvat na obsah systmovch tabulek
zanajcch pg_. Sputn psql s parametrem -l provede vpis nzv
vech databz.

Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy pistupujc k
systmovm tabulkmm.

4.8 Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
-----------------------------------------------------------

Kad dotaz nemus nutn pout existujc indexy. Index se pouije
tehdy, kdy je tabulka vt ne urit minimln velikost, a dotaz
vybr pouze procentuln malou st dk tabulky. To proto, e nhodn
pstup k disku dan tenm indexu me bt pomalej ne linern ten
tabulky nebo sekvenn ten,

PostgreSQL rozhoduje o pouit index na zklad statistiky pstup k
tabulce. Tyto statistiky se shromauj pkazy VACUUM ANALYZE nebo
ANALYZE. Dky statistikm m optimizer informaci o potu dek v tabulce
a me lpe rozhodnout o pouit index. Statistiky se uplatn pi
uren optimlnho poad a metody spojen tabulek. Statistiky by se
mli aktualizovat opakovan, tak jak se mn obsah tabulek.

Indexy nejsou obyejn pouity pro setdn nebo spojen tabulek.
Sekvenn zpracovn nsledovan explicitnm tdnm je obyejn
rychlej ne indexn ten na velk tabulce.

Jinak je tomu v ppad pouit LIMIT a ORDER BY, pi kterm se vtinou
index pouije, vsledkem je pouze mal st tabulky. Funkce MAX() a
MIN() nepouvaj indexy, ale je mon tut hodnotu zskat

SELECT col FROM tab
  ORDER BY col [ DESC ] LIMIT 1;

Pokud si myslte, e optimizer myln zvolil sekvenn prohledvn
tabulky, pouijte pkaz SET enable_seqscan TO 'off' a zkuste zda je
indexn prohledvn rychlej.

Pi vyhledvn na zklad vzoru jako je nap. opertor LIKE nebo ~ se
indexy pouj pouze za uritch skutenost:

    - zatek hledanho vzoru mus bt ukotven k zatku, tj.

        * vzor LIKE nesm zanat %
        * regulrn vraz mus zanat ^

    - vzor nesm zanat intervalem, nap. [a-e]

    - vyhledvan, kter nen Case sensitiv nepouv indexy.
    Mete ale pout funkcionln indexy, kter jsou posny v sekci
    4.12
    - pi inicializaci databze (initdb) mus bt pouito C locale
    (pozn. pekladatele - tud v naich podmnkch nepouiteln,
    nepracovalo by esk tdn).

4.9 Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
------------------------------------------------------------

Podvejte se do manulov strnky pkazu EXPLAIN.

4.10 Co to je R-tree index?
---------------------------

R-tree index se pouv pro indexovn prostorovch dat. Hash index
neme obslouit prohledvn oblast. B-tree index me dit vyhledn
oblast v jedn dimenzi. R-tree index me podporovat hledn v
multidimenzionlnch datech. Pouijeme-li napklad R-tree index na
atributy typu point, pak systm me efektivn odpovdt na dotaz -
vyber vechny body uvnit obdlnk.

Pvodn nvrh R-tree je Guttman, A. "R-trees: A Dynamic Index Structure
for Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on
Mgmt of Data, 45-57

Tyto materily naleznete v Stonebraker's "Readings in Database Systems".

Vestavn R-tree me slouit k indexaci polygon a oblast. Teoreticky
meme R-tree pout i pro vce dimenz (jin ne 3D). Ve skutenosti
ale takov rozen R-tree vyaduje trochu prce a ve souastnosti
chyb dokumentace jak na to.

4.11 Co je Genetic Query Optimizer?
-----------------------------------

GEQO modul urychluje optimalizaci dotaz pi spojovn mnostv tabulek
metodou Genetickch algoritm (GA). To umouje zskat velkho mnostv
variant spojen pi neplnm prohledvnm.

4.12 Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn?

Opertor ~ slou k porovn s regulrnm vrazem, jeho modifikace *~
pedstavuje case insensitive vyhledvn. Jedn se o obdobu LIKE a
ILIKE.

Pro vyhledvn bez ohledu na velk mal psmena pouijeme

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

V tomto ppad se nepouije standardn index. Nicmn, pouije se
funkcionln index, pokud jej vytvote

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

4.13 Jak v dotazu detekovat, e poloka je NULL?
------------------------------------------------

Urte pomoc IS NULL nebo IS NOT NULL

4.14 Jak jsou rozdly mezi rznmi znakovmi typy?
---------------------------------------------------

Typ         Intern nzev       Poznmka
--------------------------------------------------------------------------
VARCHAR(n)  varchar             omezeno maximln dlkou, bez doplnn mezerami
CHAR(n)     bpchar              etzec je doplnn mezerami do dan dlky
TEXT        text                bez hornho limitu na dlku
BYTEA       bytea               pole byt (bezpen lze uloit i znak NULL)
"char"      char                jeden znak

S internmi nzvy se setkte v systmovm katalogu a v nkterch
chybovch hlench.

Prvn tyi uveden typy jsou tzv. varlena typy (tj. prvn tyi byty na
disku nesou daj o dlce, nsleduj samotn data). Proto skuten
pouit prostor je vdy o nco mlo vt ne deklarovan dlka. Naopak,
tyto datov typy jsou komprimovnty TOASTem, take prostor na disku me
bt ni ne je oekvno.

VARCHAR(n) je vhodn pro ukldn text prommn dlky s pevn
stanovenou maximln dlkou. TEXT je pro etzce bez omezen dlky s
maximem jeden gigabajt.

CHAR(n) slou k ukldn etzc stejn dlky. CHAR(n) dopln przdn
znaky do specifikovan dlky, zatmco VARCHAR(n) ulo pouze pedan
znaky. BYTEA je ureno pro ukldn binrnch dat, vetn NULL byte.
Vechny zde popsan typy maj podobn vkonnostn charakteristiky.

4.15.1 Jak vytvoit serial/auto-increment pole?
-----------------------------------------------

PostgreSQL podporuje typ SERIAL. Pi jeho pouit se automaticky vytvo
SEQUENCE a index na sloupci (Pro vy verze to neplat OVIT).
Napklad:

CREATE TABLE person (
  id SERIAL,
  name TEXT
);

je automaticky pevedeno do

CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
  id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
  name TEXT
);
CREATE UNIQUE INDEX person_id_key ON person(id);

Viz dokumentace create_sequence v manulovch strnkch. Dle mete
pout uniktn hodnotu OID kadho dku. Potom ale muste spoutt
pg_dump s pepnaem -o, tak aby zstaly zachovny hodnoty OID (u
pkazu copy COPY WITH OIDS).

4.15.2 Jak zskat hodnotu SERIAL po vloen dku?
--------------------------------------------------

Jednou z monost je zskat budouc hodnotu SERIAL funkc nextval ped
samotnm vloenm a pak ji vloit explicitn. Napklad v jakmsi
pseudojazyku

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

Mete pak jet pout hodnotu newid v dalch dotazech, nap. jako
hodnotu cizho kle. Nzev automaticky vytvoen sekvence je
tabulka_sloupec_seq.

Alternativn mete zskat hodnotu posledn generovou sekvenc funkc
currval() po vloen

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

Konen mete pout OID hodnotu vrcenou pkazem INSERT, ale to je
pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI
modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme $sth->{pg_oid_status}
po kadm $sth->execute().

4.15.3 Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s jinmi uivateli?
------------------------------------------------------------------------------------------

Nikoliv, currval() vrac hodnotu naposledy generovanou ve vaem
backendu, a ta tud nen spolen vem uivatelm.

4.15.4 Pro nen vygenerovan slo pouito pi peruen transakce?
Pro vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?

K zajitn efektivnosti soubhu, jsou hodnoty posloupnosti, kdy se o
n pod, a sekvence nen zamena do ukonen transakce. To zpsobuje
dry v slovn ze zruench transakc.

4.16 Co to je OID? Co je to TID?
--------------------------------

Kad dek vytvoen v PostgreSQL zsk jedinen OID. Vechna OID
generovan bhem inicializace databze jsou men ne 16384
(include/access/transam.h). Vechna OID generovan na poadavek
uivatele jsou rovna nebo vy tto hodnot. Normln, vechna OID jsou
jedinen nejen uvnit tabulky nebo databze, ale v rmci cel instalace
PostgreSQL

PostgreSQL pouv OID ve svm internm systmu tabulek k vytvoen
relac. Tato OID mohou bt pouita k identifikaci konkrtnho uivatele
a pouita v spojen. Pro OID hodnoty je doporuen typ OID. Nad tmto
sloupcem mete vytvoit index pro urychlen pstupu.

OID jsou dna vem dkm z centrln oblasti a jsou pouita v kad
databzi. Pokud potebujete zmnit OID, nebo chcete zkoprovat tabulku s
pvodnmi OID, lze pout

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

OID jsou uloena jako 4bajtov integer a peteou po tyech miliardch.
Nebylo hleno, e by se tak nkdy stalo, pesto ale plnujeme odstranit
tento limit dv ne se tak stane.

TID se pouvaj i identifikaci fyzickch dk s hodnotou bloku a
offsetu. TIDs se mn modifikac dk (pouv se jako ukazatel indexu
fyzickho dku).

4.17 Jak je vznam nkterch vraz pouitch v PostgreSQL?
------------------------------------------------------------

V nkterch zdrojovch kdech nebo star dokumentaci se mete setkat s
nsledujcmi vrazy, kter maj ir vznam. Zde je pklad nekterch:

    - tabulka, relace, tda (table, relation, class)
    - dek, zznam, ntice (row, record, tuple)
    - sloupec, poloka, atribut (column, field, attribute)
    - vyhledn, vbr (retrieve, select)

    - nhrada, prava (replace, update)
    - pidn, vkldn (append, insert)
    - OID, serial value (OID, serial value)
    - portal, kurzor (portal, cursor)
    - range variable, jmno tabulky, alias tabulky (range
    variable, table name, table alias)

seznam tchto vraz mete nalzt na
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/g
lossary.html.

4.18 Pro jsem zskal chybov hlen "ERROR: Memory exhausted in AllocSetAlloc()"?
-----------------------------------------------------------------------------------

Pravdpodobn dolo k vyerpn virtuln pami na Vaem systmu, nebo
jdro m nzk limit pro urit zdroje. Vyzkouejte ped startem
posmatera

ulimit -d 262144
limit datasize 256m

Zle na Vaem shellu, zda budou tyto pkazy spn, mly by zvit
limit datovho segmentu pro Vae procesy a umonit tak dokonen dotazu.
Tyto pkazy se aplikuj na aktuln proces a vechny synovsk procesy
vytvoen po proveden pkazu. Pokud mte problmy s SQL klientem
protoe backend vrac pli mnoho dat, zkuste zvit limity ped
startem klienta.

4.19 Jak se dozvm, kterou verzi PostgreSQL pouvm?
-----------------------------------------------------

V psql spuste

SELECT version();

4.20 Pro operace s velkmi objekty kon "invalid large obj descriptor"?
-------------------------------------------------------------------------

Vechny operace s velkmi objekty - lo_open, lo_close, ... muste
spoutt v transakci, tj. mezi pkazy BEGIN WORK a COMMIT.

PostgreSQL uvoluje handle velkch objekt pi skonen transakce. Pokud
budete pracovat s velkmi objekty mimo transakci, pravdpodobn
dostanete toto chybov hlen, protoe handle ji budou neplatn.

Pokud pouvte interface podobn ODBC muste nastavit set auto_commit
off

4.21 Jak vytvoit sloupec obsahujc implicitn aktuln datum?
---------------------------------------------------------------

Pouijte CURRENT_TIMESTAMP

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

4.22 Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
-------------------------------------------------------------

Aktuln spojujeme tabulky se sekvennm skenovnm vsledku pro kad
dek vnjho dotazu. Pokud vnoen dotaz m pouze nkolik dk a
vnj dotaz vrac hodn dek, IN je rychl. V jinch ppadech
nahrate IN EXISTS:

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

takto

SELECT * FROM tab
  WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);

Pro urychlen vytvoete index pro subcol. Tento vkonnostn problm byl
odstrann ve verzi 7.4.

4.23 Jak provst vnj spojen (outer join)?
---------------------------------------------

PostgreSQL podporuje vnj spojen tabulek standardnmi SQL pkazy.
Zde jsou dva pklady:

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

nebo

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

Tyto identick dotazy napoj t1.col na t2.col a jet pid nepipojen
dky z t1 (kter nemaj obdoby v t2). Prav spojen (RIGHT JOIN) pid
nepipojen dky z t2. FULL JOIN vrt vechny dky, vetn
nepipojench z tbulek t1 a t2. Klov slovo OUTER je nepovinn a ve
se na LEFT, RIGHT a FULL join. Bn spojen se nazv INNER JOIN.

V dvjch verzch se vnj spojen tabulek mohlo simulovat pomoc
UNION a NOT IN. Napklad pro spojen tabulek tab1 a tab2, je
nsledujc dotaz ekvivalentn k vnjmu spojen dvou tabulek:

SELECT tab1.col2, tab2.col2 FROM tab1, tab2
  WHERE tab1.col1 = tab2.col1
UNION ALL
SELECT tab1.col2, NULL FROM tab1
  WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1;

4.24 Jak provst dotaz nap nkolika databzemi?
--------------------------------------------------

PostgreSQL nenabz dn zpsob, jak se dotzat do jin databze ne do
aktuln. Doplnk contrib/dblink umouje dotaz do ciz databze
prostednictvm funkce. Na stran klienta nen problm si otevt vce
simultlnch pstup do rznch databz a spojovat vsledek na stran
klienta.

4.25 Me funkce vrtit vce dk nebo sloupc?
------------------------------------------------

V PostgreSQL 7.3 mete jednodue vracet vce dk nebo sloupc z
funkce, viz:
http://techdocs.postgresql.org/guides/SetReturningFunctions.

4.26 Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL funkcch?
--------------------------------------------------------------------------------

Peloen kd PL/pgSQL funkce je uloen ve vyrovnvac pamti, tj.
funkce je pekldna pouze pi zmn kdu, nikoliv ped kadm volnm
funkce. Nechtnm vedlejm efektem je, e voln funkce sele, kdy se
funkce odkazuje na doasnou tabulku, pokud tato tabulka byla od pekladu
funkce zruena (akoliv ji byla znovu vytvoena a existuje). Jedinm
eenm problmu je pstup k doasn tabulce pomoc EXECUTE, tj.
dynamick provdn dotazu. Tento pkaz zajist opakovan peklad
dotazu pi kadm voln funkce.

4.27 Jak jsou monosti replikace databz?
-------------------------------------------

Existuje nkolik dostupnch een master/slave replikac. Ty povoluj
modifikace master databze a slave databzm umouj pouze ten. Na
konci http://gborg.PostgreSQL.org/genpage?replication_research najdete
jejich seznam. Na een multi-master replikaci se pracuje na
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.

4.28 Jak jsou monosti ifrovn databz?
-------------------------------------------
    -

    contrib/pgcrypto obsahuje ifrovac funkce pouiteln v SQL
    dotazech.

    -

    K ifrovn penosu dat z klienta na server, mus bt server
    peloen s podporou ssl a pepna sslv postgresql.conf mus bt
    nastaven na hodnotu true. Klient mus mt vytvoen zznam hostssl v
    pg_hba.conf a tak mt povolen reim ssl. Lze pout i jin
    prostedky, nejen nativn podporu ssl v PostgreSQL, nap. stunel a
    ssh.

    -

    Hesla uivatel databze jsou zaifrovna ponaje verz 7.3. Ve
    starch verzch toto chovn muselo bt vynuceno volbou
    PASSWORD_ENCRYPTION v postgresql.conf

    -

    Server me bet na ifrovanm souborovm systmu.

------------------------------------------------------------------------

Roziovn PostgreSQL
======================

5.1 Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
------------------------------------------------------------

Problm me bt zpsoben mnoha okolnostmi. Vyzkouejte si svoji funkci
nejdve v njak jednoduch aplikaci.

5.2 Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do PostgreSQL?
-------------------------------------------------------------------------------

Polete sv rozen do konference pgsql-hackers, a ono pak mon
skon v podadresi contrib.

5.3 Jak napsat funkci v C vracejc ntici?
------------------------------------------

Funkce vracejc tabulky jsou podporovan PostgreSQL 7.3 a vy pro
jazyky C, PL/PgSQL a SQL. Vce naleznete v The Programmer's Guide.
Pklady tchto funkc pro C naleznete v contrib/tablefunc.

5.4 Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci vzata v potaz. Pro?
---------------------------------------------------------------------------------------------

Makefile nem informace o zvislostech mezi hlavikovmi soubory. Muste
provst make clean a pak make. Pokud pouvte gcc, mete pout
pepna --enable-depend pkazu configure k automatickmu een
zvislost pekladaem.


[1] http://developer.postgresql.org/todo.php
[2] http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
[3] http://postgresql.ok.cz/PostgreSQL%20Administrator%27sGuide

@

