2003-12-14 00:56:00 +08:00
|
|
|
|
|
2007-11-02 01:28:03 +08:00
|
|
|
|
Frequently Asked Questions
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
2007-11-02 01:28:03 +08:00
|
|
|
|
Casto kladen<65> dotazy (FAQ) PostgreSQL
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
2007-11-02 01:28:03 +08:00
|
|
|
|
Posledn<64> aktualizace: 29. r<>jna 2007 (aktualizov<6F>no pro PostgreSQL
|
|
|
|
|
8.3)
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
2007-11-02 01:28:03 +08:00
|
|
|
|
Soucasn<73> spr<70>vce: Bruce Momjian (bruce@momjian.us)
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
2007-11-02 01:28:03 +08:00
|
|
|
|
Prelozil: Pavel Stehule (pavel.stehule@gmail.com)
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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/.
|
2005-03-12 05:46:54 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
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?
|
2005-03-12 05:46:54 +08:00
|
|
|
|
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>
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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?
|
2005-03-12 05:46:54 +08:00
|
|
|
|
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?
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
|
|
|
|
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
|
2005-03-12 05:46:54 +08:00
|
|
|
|
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
|
2005-03-12 05:46:54 +08:00
|
|
|
|
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?
|
2005-03-12 05:46:54 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
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:
|
|
|
|
|
|
2008-01-02 03:46:01 +08:00
|
|
|
|
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.
|
2005-03-12 05:46:54 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
2007-11-02 01:28:03 +08:00
|
|
|
|
Dotazy na klientsk<73> rozhran<61>
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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.
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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.
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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.
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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).
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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.
|
2005-03-12 05:46:54 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
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.
|
2005-03-12 05:46:54 +08:00
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
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;
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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;
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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.
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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?
|
|
|
|
|
|
2005-03-12 05:46:54 +08:00
|
|
|
|
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
|
2005-03-12 05:46:54 +08:00
|
|
|
|
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
|
2005-03-12 05:46:54 +08:00
|
|
|
|
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
|
2005-03-12 05:46:54 +08:00
|
|
|
|
------------------------------------------------------
|
2007-11-02 01:28:03 +08:00
|
|
|
|
52 bytu na r<>dek
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
2007-11-02 01:28:03 +08:00
|
|
|
|
100000 r<>dek
|
|
|
|
|
----------------------- = 633 str<74>nek (zaokrouhleno nahoru)
|
|
|
|
|
158 r<>dek na str<74>nce
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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)
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
2007-11-02 01:28:03 +08:00
|
|
|
|
Indexy nemaj<61> tak velkou rezii, ale mohou b<>t tak<61> velk<6C>, protoze
|
2005-03-12 05:46:54 +08:00
|
|
|
|
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
|
2005-03-12 05:46:54 +08:00
|
|
|
|
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]
|
2005-03-12 05:46:54 +08:00
|
|
|
|
* 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.
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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';
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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));
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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)
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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
|
|
|
|
|
);
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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
|
|
|
|
|
);
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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;
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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();
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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 );
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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);
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
|
|
|
|
nebo
|
2007-11-02 01:28:03 +08:00
|
|
|
|
SELECT *
|
|
|
|
|
FROM t1 LEFT OUTER JOIN t2 USING (col);
|
2005-03-12 05:46:54 +08:00
|
|
|
|
|
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
|