postgresql/doc/FAQ_czech

850 lines
36 KiB
Plaintext
Raw Normal View History

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