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