2003-12-14 00:56:00 +08:00
|
|
|
|
|
2005-03-12 05:46:54 +08:00
|
|
|
|
<20>asto kladen<65> dotazy (FAQ) PostgreSQL
|
|
|
|
|
|
|
|
|
|
Posledn<64> aktualizace: St<53>eda 23. <20>ervna 21:10:00 EST 2004
|
|
|
|
|
|
|
|
|
|
Sou<6F>asn<73> spr<70>vce: Bruce Momjian (pgman@candle.pha.pa.us)
|
|
|
|
|
|
|
|
|
|
P<>elo<6C>il: Pavel St<53>hule (stehule@kix.fsv.cvut.cz)
|
|
|
|
|
|
|
|
|
|
Aktu<74>ln<6C> verzi tohoto dokumentu naleznete na adrese:
|
|
|
|
|
http://www.PostgreSQL.org/docs/faqs/FAQ.html. <20>esk<73> p<>eklad na adrese:
|
|
|
|
|
http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html.
|
|
|
|
|
|
|
|
|
|
Odpov<6F>di na dotazy relevantn<74> ke konkr<6B>tn<74>m platform<72>m lze nal<61>zt na
|
|
|
|
|
adrese: http://www.PostgreSQL.org/docs/index.html.
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Obecn<63> ot<6F>zky
|
|
|
|
|
|
|
|
|
|
1.1) Co je PostgreSQL? Jak se vyslovuje?
|
|
|
|
|
1.2) Jak<61> je licence na PostgreSQL?
|
|
|
|
|
1.3) Na kter<65>ch Unixex lze spustit PostgreSQL?
|
|
|
|
|
1.4) Kter<65> ne-unixov<6F> platformy jsou podporovan<61>?
|
|
|
|
|
1.5) Kde mohu z<>skat PostgreSQL?
|
|
|
|
|
1.6) Kde mohu z<>skat podporu?
|
|
|
|
|
1.7) Kde je posledn<64> verze?
|
|
|
|
|
1.8) Jak<61> je dostupn<70> dokumentace?
|
|
|
|
|
1.9) Kde najdu seznam zn<7A>m<EFBFBD>ch chyb nebo nepodporovan<61>ch vlastnost<73>?
|
|
|
|
|
1.10) Jak se mohu nau<61>it SQL?
|
|
|
|
|
1.11) Nem<65> PostgreSQL probl<62>my s rokem 2000?
|
|
|
|
|
1.12) Jak se p<>ipojit k v<>voj<6F><6A>sk<73>mu t<>mu?
|
|
|
|
|
1.13) Kam podat report o chyb<79>?
|
|
|
|
|
1.14) Jak je na tom PostgreSQL v porovn<76>n<EFBFBD> s jin<69>mi datab<61>zemi?
|
|
|
|
|
1.15) Jak lze finan<61>n<EFBFBD> pomoci PostgreSQL?
|
|
|
|
|
|
|
|
|
|
User client dotazy
|
|
|
|
|
|
|
|
|
|
2.1) Kde naleznu ODBC ovlada<64>e pro PostgreSQL?
|
|
|
|
|
2.2) Jak<61> n<>stroje lze pou<6F><75>t pro PostgreSQL a web?
|
|
|
|
|
2.3) Existuje grafick<63> rozhran<61> pro PostgreSQL?
|
|
|
|
|
2.4) Kter<65> programovac<61> jazyky maj<61> podporu pro PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Administrativn<76> dotazy
|
|
|
|
|
|
|
|
|
|
3.1) Jak nainstalovat PostgreSQL jinam ne<6E> do /usr/local/pgsql?
|
|
|
|
|
3.2) P<>i startu postmaster, dostanu chybov<6F> hl<68><6C>en<65> Bad System Call
|
|
|
|
|
nebo core dump. Pro<72>?
|
|
|
|
|
3.3) P<>i startu postmastera dostanu hl<68><6C>en<65> o chyb<79> IpcMemoryCreate.
|
|
|
|
|
Pro<72>?
|
|
|
|
|
3.4) P<>i startu postmastera dostanu hl<68><6C>en<65> o chyb<79>
|
|
|
|
|
IpcSemaphoreCreate. Pro<72>?
|
|
|
|
|
3.5) Jak povolit nebo zak<61>zat p<><70>stup z jin<69>ch stanic?
|
|
|
|
|
3.6) Jak ladit datab<61>zov<6F> stroj na lep<65><70> v<>kon?
|
|
|
|
|
3.7) Jak<61> jsou mo<6D>nosti lad<61>n<EFBFBD>?
|
|
|
|
|
3.8) Pro<72> dostanu "Sorry, too many clients", kdy<64> se zkou<6F><75>m p<>ipojit?
|
|
|
|
|
3.9) K <20>emu slou<6F><75> adres<65><73> pgsql_tmp?
|
|
|
|
|
3.10) Pro<72> je po<70>adov<6F>no dump a obnoven<65> (load) datab<61>ze b<>hem upgrade
|
|
|
|
|
mezi velk<6C>mi verzemi PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Provozn<7A> dotazy
|
|
|
|
|
|
|
|
|
|
4.1) <20><>m se li<6C><69> bin<69>rn<72> a norm<72>ln<6C> kurzor?
|
|
|
|
|
4.2) Jak z<>skat pouze prvn<76> <20><>dek dotazu? N<>hodn<64> <20><>dek?
|
|
|
|
|
4.3) Jak z<>sk<73>m seznam tabulek nebo jinak jak jej z<>sk<73> psql?
|
|
|
|
|
4.4) Jak odstran<61>m sloupec tabulky, jak zm<7A>n<EFBFBD>m jeho typ?
|
|
|
|
|
4.5) Jak<61> je maxim<69>ln<6C> velikost <20><>dku, tabulky a datab<61>ze?
|
|
|
|
|
4.6) Kolik diskov<6F>ho prostoru je pot<6F>eba k ulo<6C>en<65> dat z norm<72>ln<6C>ho
|
|
|
|
|
textov<6F>ho souboru?
|
|
|
|
|
4.7) Jak z<>sk<73>m seznam vytvo<76>en<65>ch tabulek, index<65>, datab<61>z<EFBFBD>?
|
|
|
|
|
4.8) M<>j dotaz je pomal<61> a nepou<6F><75>v<EFBFBD> vytvo<76>en<65> indexy. Pro<72>?
|
|
|
|
|
4.9) Jak zjist<73>m, jak optimizer dotazu vyhodnocuje m<>j dotaz?
|
|
|
|
|
4.10) Co to je R-tree index?
|
|
|
|
|
4.11) Co je Genetic Query Optimizer?
|
|
|
|
|
4.12) Jak prov<6F>st vyhled<65>v<EFBFBD>n<EFBFBD> regul<75>rn<72>ho v<>razu case sensitiv,
|
|
|
|
|
insensitiv? Jak pou<6F><75>t index pro case insensitive vyhled<65>v<EFBFBD>n<EFBFBD>?
|
|
|
|
|
4.13) Jak v dotazu detekovat, <20>e polo<6C>ka je NULL?
|
|
|
|
|
4.14) Jak<61> jsou rozd<7A>ly mezi r<>zn<7A>mi znakov<6F>mi typy?
|
|
|
|
|
4.15.1) Jak vytvo<76>it serial/auto-increment pole?
|
|
|
|
|
4.15.2) Jak z<>skat hodnotu SERIAL po vlo<6C>en<65> <20><>dku?
|
|
|
|
|
4.15.3) Nepovede currval() a nextval() k rozhozen<65> podm<64>nek p<>i
|
|
|
|
|
soub<75>hu s jin<69>mi u<>ivateli?
|
|
|
|
|
4.15.4) Pro<72> nen<65> vygenerovan<61> <20><>slo pou<6F>ito p<>i p<>eru<72>en<65> transakce?
|
|
|
|
|
Pro<72> vznikaj<61> d<>ry v <20><>slov<6F>n<EFBFBD> vlastn<74> sekvenc<6E>/SERIAL sloupce?
|
|
|
|
|
4.16) Co to je OID? Co je to TID?
|
|
|
|
|
4.17) Jak<61> je v<>znam n<>kter<65>ch v<>raz<61> pou<6F>it<69>ch v PostgreSQL?
|
|
|
|
|
4.18) Pro<72> jsem z<>skal chybov<6F> hl<68><6C>en<65> "ERROR: Memory exhausted in
|
|
|
|
|
AllocSetAlloc()"?
|
|
|
|
|
4.19) Jak se dozv<7A>m, kterou verzi PostgreSQL pou<6F><75>v<EFBFBD>m?
|
|
|
|
|
4.20) Pro<72> operace s velk<6C>mi objekty kon<6F><6E> "invalid large obj
|
|
|
|
|
descriptor"?
|
|
|
|
|
4.21) Jak vytvo<76>it sloupec obsahuj<75>c<EFBFBD> implicitn<74> aktu<74>ln<6C> datum?
|
|
|
|
|
4.22) Pro<72> jsou moje vno<6E>en<65> dotazy pou<6F><75>vaj<61>c<EFBFBD> IN tak pomal<61>?
|
|
|
|
|
4.23) Jak prov<6F>st vn<76>j<EFBFBD><6A> spojen<65> (outer join)?
|
|
|
|
|
4.24) Jak prov<6F>st dotaz nap<61><70><EFBFBD> n<>kolika datab<61>zemi?
|
|
|
|
|
4.25) M<><4D>e funkce vr<76>tit v<>ce <20><>dk<64> nebo sloupc<70>?
|
|
|
|
|
4.26) Pro<72> nelze spolehliv<69> vytv<74><76>et a ru<72>it do<64>asn<73> tabulky v
|
|
|
|
|
PL/pgSQL funkc<6B>ch?
|
|
|
|
|
4.27) Jak<61> jsou mo<6D>nosti replikace datab<61>z<EFBFBD>?
|
|
|
|
|
4.28) Jak<61> jsou mo<6D>nosti <20>ifrov<6F>n<EFBFBD> datab<61>z<EFBFBD>?
|
|
|
|
|
|
|
|
|
|
Roz<6F>i<EFBFBD>ov<6F>n<EFBFBD> PostgreSQL
|
|
|
|
|
|
|
|
|
|
5.1) Napsal jsem UDF funkci, PostgreSQL v<>ak kon<6F><6E> dump core?
|
|
|
|
|
5.2) Jak mohu p<>isp<73>t n<>jak<61>mi <20>ikovn<76>mi datov<6F>mi typy a funkcemi do
|
|
|
|
|
PostgreSQL?
|
|
|
|
|
5.3) Jak napsat funkci v C vracej<65>c<EFBFBD> ntici?
|
|
|
|
|
5.4) Modifikoval jsem zdrojov<6F> soubory. Tato zm<7A>na nebyla p<>i
|
|
|
|
|
rekompilaci vzata v potaz. Pro<72>?
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Obecn<63> ot<6F>zky
|
|
|
|
|
|
|
|
|
|
1.1) Co je PostgreSQL? Jak se vyslovuje?
|
|
|
|
|
|
|
|
|
|
PostgreSQL se vyslovuje Post-Gres-Q-L. Zvukov<6F> z<>znam je dostupn<70> na
|
|
|
|
|
adrese .
|
|
|
|
|
|
|
|
|
|
PostgreSQL vych<63>z<EFBFBD> z datab<61>ze POSTGRES (a st<73>le je n<>kdy ozna<6E>ov<6F>n
|
|
|
|
|
zjednodu<64>en<65> jako Postgres) - v<>zkumn<6D>ho prototypu DBMS nov<6F> generace.
|
|
|
|
|
Z postgresu byl p<>evzat siln<6C> datov<6F> model a bohat<61> soubor datov<6F>ch
|
|
|
|
|
typ<79> a jeho dotazovac<61> jazyk PostQuel byl nahrazen roz<6F><7A><EFBFBD>enou
|
|
|
|
|
podmno<6E>inou jazyka SQL. PostgreSQL lze pou<6F><75>vat bez omezen<65> a jeho
|
|
|
|
|
zdrojov<6F> k<>dy jsou voln<6C> k dispozici.
|
|
|
|
|
|
|
|
|
|
PostgreSQL vyv<79>j<EFBFBD> t<>m v<>voj<6F><6A><EFBFBD> p<>ihl<68><6C>en<65>ch do v<>voj<6F><6A>sk<73> konference
|
|
|
|
|
PostgreSQL. Sou<6F>asn<73>m koordin<69>torem je Marc G. Fournier
|
|
|
|
|
(scrappy@PostgreSQL.org). (viz 1.6 - jak se zapojit). Tento t<>m je
|
|
|
|
|
zodpov<6F>dn<64> za ve<76>ker<65> v<>voj PostgreSQL. Jedn<64> se o ve<76>ejn<6A> projekt,
|
|
|
|
|
kter<65> nen<65> <20><>zen <20><>dnou firmou. Pokud se chcete zapojit, p<>e<EFBFBD>t<EFBFBD>te si
|
|
|
|
|
developer's FAQ na adrese
|
|
|
|
|
http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html
|
|
|
|
|
|
|
|
|
|
Autory prvn<76> verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
|
|
|
|
|
portace, testov<6F>n<EFBFBD>, lad<61>n<EFBFBD> a roz<6F>i<EFBFBD>ov<6F>n<EFBFBD> k<>du se zapojilo mnoho
|
|
|
|
|
dal<61><6C>ch v<>voj<6F><6A><EFBFBD> . P<>vodni k<>d Postgresu, ze kter<65>ho PostgreSQL
|
|
|
|
|
vych<63>z<EFBFBD>, je v<>sledkem <20>sil<69> mnoha student<6E> a program<61>tor<6F> pracuj<75>c<EFBFBD>ch
|
|
|
|
|
pod veden<65>m prof. Michaela Stonebrakera na University of California v
|
|
|
|
|
Berkley.
|
|
|
|
|
|
|
|
|
|
P<>vodn<64> n<>zev software z Berkley byl Postgres. Po p<>id<69>n<EFBFBD> jazyka SQL
|
|
|
|
|
se n<>zev zm<7A>nil na Postgres95. Koncem roku 1996 byl RDBMS p<>ejmenov<6F>n
|
|
|
|
|
na PostgreSQL.
|
|
|
|
|
|
|
|
|
|
1.2) Jak<61> je licence na PostgreSQL?
|
|
|
|
|
|
|
|
|
|
PostgreSQL je p<>edm<64>tem n<>sleduj<75>c<EFBFBD>ch autorsk<73>ch pr<70>v:
|
|
|
|
|
|
2006-03-05 23:59:11 +08:00
|
|
|
|
D<>l<EFBFBD><6C> Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
2005-03-12 05:46:54 +08:00
|
|
|
|
D<>l<EFBFBD><6C> Copyright (c) 1994-6, Regents of the University of California
|
|
|
|
|
|
|
|
|
|
Ud<55>luje se opr<70>vn<76>n<EFBFBD> k u<>it<69>, rozmno<6E>ov<6F>n<EFBFBD>, prov<6F>d<EFBFBD>n<EFBFBD> <20>prav a
|
|
|
|
|
roz<6F>i<EFBFBD>ov<6F>n<EFBFBD> tohoto softwaru a dokumentace k n<>mu, pro jak<61>koli <20><>ely,
|
|
|
|
|
bez licen<65>n<EFBFBD>ho poplatku a bez p<>semn<6D> licen<65>n<EFBFBD> smlouvy, za podm<64>nky,
|
|
|
|
|
<20>e na v<>ech jeho kopi<70>ch je uvedeno ozn<7A>men<65> o v<><76>e uveden<65>ch pr<70>vech,
|
|
|
|
|
jako<6B> i obsah tohoto a dvou n<>sleduj<75>c<EFBFBD>ch odstavc<76>.
|
|
|
|
|
|
|
|
|
|
THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK<53> UNIVERZITA") NEN<45> V <20><>DN<44>M
|
|
|
|
|
P<><50>PAD<41> ODPOV<4F>DNA <20><>DN<44> T<>ET<45> OSOB<4F> ZA P<><50>MOU, NEP<45><50>MOU, ZVL<56><4C>TN<54>,
|
|
|
|
|
NAHODILOU NEBO V<>SLEDNOU <20>KODU, V<>ETN<54> U<>L<EFBFBD>HO ZISKU, ZP<5A>SOBENOU U<>IT<49>M
|
|
|
|
|
TOHOTO SOFTWARU A DOKUMENTACE K N<>MU, A TO I V P<><50>PAD<41>, <20>E THE
|
|
|
|
|
UNIVERSITY OF CALIFORNIA BYLA INFORMOV<4F>NA O MO<4D>NOSTI VZNIKU TAKOV<4F>
|
|
|
|
|
<20>KODY.
|
|
|
|
|
|
|
|
|
|
HE 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><>EL<45>M. NͮE UVEDEN<45> SOFTWARE JE POSKYTNUT "JAK STOJ<4F> A
|
|
|
|
|
LE<4C><45>" A THE UNIVERSITY OF CALIFORNIA NEN<45> POVINNA ZAJISTIT JEHO
|
|
|
|
|
<20>DR<44>BU, PODPORU, AKTUALIZACI, VYLEP<45>EN<45> NEBO MODIFIKACI.
|
|
|
|
|
|
|
|
|
|
V<><56>e uveden<65> je BSD licence, b<><62>n<EFBFBD> licence otev<65>en<65>ho zdroje. Nen<65> zde
|
|
|
|
|
<20><>dn<64> omezen<65> ohledn<64> u<>it<69> k<>du zdroje. Jsme s t<>m spokojeni a nem<65>me
|
|
|
|
|
v <20>myslu na t<>to skute<74>nosti cokoli m<>nit.
|
|
|
|
|
|
|
|
|
|
1.3) Na kter<65>ch Unixex lze spustit PostgreSQL?
|
|
|
|
|
|
|
|
|
|
PostgreSQL b<><62><EFBFBD> na v<>ech modern<72>ch unixov<6F>ch platform<72>ch. V
|
|
|
|
|
instala<6C>n<EFBFBD>ch instrukc<6B>ch naleznete aktu<74>ln<6C> seznam v<>ech platforem na
|
|
|
|
|
kter<65>ch byla testov<6F>n<EFBFBD>m ov<6F><76>ena funkcionalita PostgreSQL.
|
|
|
|
|
|
|
|
|
|
1.4) Kter<65> ne-unixov<6F> platformy jsou podporovan<61>?
|
|
|
|
|
|
|
|
|
|
Klient
|
|
|
|
|
|
|
|
|
|
Knihovna libpq, psql a n<>kter<65> dal<61><6C> moduly byly p<>elo<6C>eny pro MS
|
|
|
|
|
Windows. Klienta lze provozovat na MS Windows, ten prost<73>ednictv<74>m
|
|
|
|
|
TCP/IP protokolu komunikuje se serverem b<><62><EFBFBD>c<EFBFBD>m na n<>kter<65> z
|
|
|
|
|
podporovan<61>ch Unixov<6F>ch platforem. K p<>ekladu lze pou<6F><75>t win32.mak a
|
|
|
|
|
Win32 knihovny libpq a psql. K datab<61>zi PostgerSQL lze p<>istupovat
|
|
|
|
|
skrze rozhran<61> ODBC.
|
|
|
|
|
|
|
|
|
|
Server
|
|
|
|
|
|
|
|
|
|
Server m<><6D>e b<>t na WindowsNT a Win2k provozov<6F>n pouze s knihovnou
|
|
|
|
|
Cygwin, Cygnus Unix/NT porting library. V<>ce pgsql/doc/FAQ_MSWIN v
|
|
|
|
|
distribuci nebo MS Windows FAQ na adrese
|
|
|
|
|
http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN.
|
|
|
|
|
|
|
|
|
|
Na nativn<76>m portu pro MS Win NT/2000/XP se pracuje. Dal<61><6C> informace o
|
|
|
|
|
aktu<74>ln<6C>m stavu PostgreSQL pro Windows naleznet na adrese
|
|
|
|
|
http://techdocs.postgresql.org/guides/Windows a
|
|
|
|
|
http://momjian.postgresql.org/main/writings/pgsql/win32.html.
|
|
|
|
|
|
|
|
|
|
Existuj<75>c<EFBFBD> port pro Novell Netware 6 naleznete na
|
|
|
|
|
http://forge.novell.com.
|
|
|
|
|
|
|
|
|
|
1.5) Kde mohu z<>skat PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Prim<69>rn<72>m anonymn<6D>m ftp serverem pro PostgreSQL je
|
|
|
|
|
ftp://ftp.PostgreSQL.org/pub. Seznam zrcadel naleznete na na<6E>ich
|
|
|
|
|
webov<6F>ch str<74>nk<6E>ch.
|
|
|
|
|
|
|
|
|
|
1.6) Kde mohu z<>skat podporu?
|
|
|
|
|
|
|
|
|
|
Hlavn<76> mailov<6F> konference je: pgsql-general@PostgreSQL.org. Slou<6F><75> k
|
|
|
|
|
diskuz<75>m ohledn<64> PostgreSQL. P<>ihl<68>s<EFBFBD>te se zasl<73>n<EFBFBD>m mailu obsahuj<75>c<EFBFBD>
|
|
|
|
|
n<>sleduj<75>c<EFBFBD> <20><>dky v t<>le dopisu (nikoliv v z<>hlav<61> - subjectu):
|
|
|
|
|
subscribe
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
na adresu pgsql-general-request@PostgreSQL.org.
|
|
|
|
|
|
|
|
|
|
M<><4D>ete si vy<76><79>dat denn<6E> p<>ehled (diggest), kter<65> m<> zhruba 30K denn<6E>
|
|
|
|
|
zpr<70>v.
|
|
|
|
|
|
|
|
|
|
Konference psql-bugs je ur<75>ena k zas<61>l<EFBFBD>n<EFBFBD> zpr<70>v o chyb<79>ch. Pro
|
|
|
|
|
p<>ihl<68><6C>en<65> po<70>lete mail se stejn<6A>m obsahem jako v p<>edchoz<6F>m p<><70>pad<61>
|
|
|
|
|
na adresu pgsql-bugs-request@PostgreSQL.org.
|
|
|
|
|
|
|
|
|
|
Do v<>voj<6F><6A>sk<73> konference se p<>ihl<68>s<EFBFBD>te odesl<73>n<EFBFBD>m dopisu s ji<6A>
|
|
|
|
|
zmi<6D>ovan<61>m obsahem na mailto:pgsql-hackers-request@PostgreSQL.org.
|
|
|
|
|
|
|
|
|
|
Seznam dal<61><6C>ch konferenc<6E> naleznete na str<74>nk<6E>ch PostgreSQL:
|
|
|
|
|
|
|
|
|
|
http://www.postgresql.org
|
|
|
|
|
|
|
|
|
|
1.7) Jak<61> je posledn<64> verze?
|
|
|
|
|
|
|
|
|
|
Posledn<64> verze PostgreSQL je 7.4.3. Pl<50>nujeme uvolnit v<>znamnou verzi
|
|
|
|
|
ka<6B>d<EFBFBD>ch <20>est a<> osm m<>s<EFBFBD>c<EFBFBD>.
|
|
|
|
|
|
|
|
|
|
1.8) Jak<61> je dostupn<70> dokumentace?
|
|
|
|
|
|
|
|
|
|
R<>zn<7A> manu<6E>ly, manu<6E>lov<6F> str<74>nky a n<>kolik mal<61>ch testovac<61>ch p<><70>klad<61>
|
|
|
|
|
jsou sou<6F><75>sti distribuce. Pod<6F>vejte se do adres<65><73>e /doc. Manu<6E>ly jsou
|
|
|
|
|
p<><70>stupn<70> online na http://www.PostgreSQL.org/docs.
|
|
|
|
|
|
|
|
|
|
Na adres<65>ch http://www.PostgreSQL.org/docs/awbook.html a
|
|
|
|
|
http://www.commandprompt.com/ppbook/ naleznezte dv<64> online knihy o
|
|
|
|
|
PostgreSQL. Seznam dostupn<70> literatury je na
|
|
|
|
|
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor
|
|
|
|
|
technick<63>ch <20>l<EFBFBD>nk<6E> s tematikou PostgresQL najdete na
|
|
|
|
|
http://techdocs.PostgreSQL.org/.
|
|
|
|
|
|
|
|
|
|
psql m<> u<>ite<74>n<EFBFBD> metap<61><70>kaz \d slou<6F><75>c<EFBFBD> k zobrazen<65> informac<61> o
|
|
|
|
|
typech, oper<65>torech, funkc<6B>, agrega<67>n<EFBFBD>ch funkc<6B> atd.
|
|
|
|
|
|
|
|
|
|
V<>ce dokumentace naleznete na na<6E>ich webov<6F>ch str<74>nk<6E>ch.
|
|
|
|
|
|
|
|
|
|
1.9) Kde najdu seznam zn<7A>m<EFBFBD>ch chyb nebo nepodporovan<61>ch vlastnost<73>?
|
|
|
|
|
|
|
|
|
|
PostgreSQL podporuje roz<6F><7A><EFBFBD>enou podmno<6E>inu SQL-92. V na<6E>em TODO
|
|
|
|
|
najdete seznam zn<7A>m<EFBFBD>ch chyb, chyb<79>j<EFBFBD>c<EFBFBD>ch vlastnost<73> a seznam
|
|
|
|
|
vlastnost<73>, kter<65> budou do syst<73>mu implementov<6F>ny v budoucnu (v<>etn<74>
|
|
|
|
|
priorit).
|
|
|
|
|
|
|
|
|
|
1.10) Jak se mohu nau<61>it SQL?
|
|
|
|
|
|
|
|
|
|
V knize The PostgreSQL book na
|
|
|
|
|
http://www.PostgreSQL.org/docs/awbook.html je vysv<73>tlen jazyk SQL
|
|
|
|
|
(vy<76>la <20>esky). Dal<61><6C> dostupnou knihou je
|
|
|
|
|
http://www.commandprompt.com/ppbook. Kvalitn<74> n<>vody naleznete na
|
|
|
|
|
http://www.intermedia.net/support/sql/sqltut.shtm, a na
|
|
|
|
|
http://sqlcourse.com.
|
|
|
|
|
|
|
|
|
|
Dal<61><6C> je Teach Yourself SQL in 21 days, Second Edition na
|
|
|
|
|
http://members.tripod.com/er4ebus/sql/index.htm.
|
|
|
|
|
|
|
|
|
|
Mnoho u<>ivatel<65> doporu<72>uje The Practical SQL Handbook, Bowman, Judith
|
|
|
|
|
S., et al., Addison-Wesley. Jin<69> preferuj<75> The Complete Reference SQL,
|
|
|
|
|
Groff et al., McGraw-Hill.
|
|
|
|
|
|
|
|
|
|
1.11) Nem<65> PostgreSQL probl<62>my s rokem 2000?
|
|
|
|
|
|
|
|
|
|
Nem<65>, m<><6D>eme pracovat s datumy po roce 2000 na<6E>eho letopo<70>tu i p<>ed
|
|
|
|
|
rokem 2000 p<>.n.l.
|
|
|
|
|
|
|
|
|
|
1.12) Jak se p<>ipojit k v<>voj<6F><6A>sk<73>mu t<>mu?
|
|
|
|
|
|
|
|
|
|
Nejd<6A><64>ve si st<73>hn<68>te nejnov<6F>j<EFBFBD><6A> zdroje a p<>e<EFBFBD>t<EFBFBD>te si v<>voj<6F><6A>skou
|
|
|
|
|
dokumentaci na na<6E>em webu nebo v distribuci. Pak se p<>ihla<6C>te do
|
|
|
|
|
konferenc<6E> pgsql-hackers a pgsql-patches. Kvalitn<74> z<>platy pos<6F>lejte
|
|
|
|
|
do pgsql-patches.
|
|
|
|
|
|
|
|
|
|
Pr<50>vo commit m<> v CVS archivu asi t<>in<69>cti lid<69>. Ka<4B>d<EFBFBD> z nich poslal
|
|
|
|
|
mnoho kvalitn<74>ch z<>plat, tak<61>e tehdej<65><6A> commiters m<>li jistotu, <20>e
|
|
|
|
|
budou p<>edkl<6B>dat jenom kvalitn<74> z<>platy a mohli jim p<>ed<65>lit v<>t<EFBFBD><74>
|
|
|
|
|
pr<70>va.
|
|
|
|
|
|
|
|
|
|
1.13) Kam podat report o chyb<79>?
|
|
|
|
|
|
|
|
|
|
Nav<61>tivte na<6E>i PostgreSQL BugTool str<74>nku na
|
|
|
|
|
http://www.PostgreSQL.org/bugs/bugs.php, kter<65> obsahuje n<>vod a
|
|
|
|
|
sm<73>rnice jak podat chybov<6F> report.
|
|
|
|
|
|
|
|
|
|
Ov<4F><76>te si na na<6E>em ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li
|
|
|
|
|
m<>te nejnov<6F>j<EFBFBD><6A> verzi PostgreSQL a zda-li k n<> neexistuj<75> n<>jak<61>
|
|
|
|
|
z<>platy.
|
|
|
|
|
|
|
|
|
|
1.14) Jak je na tom PostgreSQL v porovn<76>n<EFBFBD> s jin<69>mi datab<61>zemi?
|
|
|
|
|
|
|
|
|
|
Existuje n<>kolik hledisek jak porovn<76>vat software: vlastnosti, v<>kon,
|
|
|
|
|
spolehlivost, podpora a cena.
|
|
|
|
|
|
|
|
|
|
Vlastnosti
|
|
|
|
|
PostgreSQL m<> hodn<64> spole<6C>n<EFBFBD>ch vlastnost<73> s velk<6C>mi komer<65>n<EFBFBD>mi
|
|
|
|
|
DBMS, nap<61>. transakce, vno<6E>en<65> dotazy, spou<6F>t<EFBFBD>, pohledy,
|
|
|
|
|
kontrolu referen<65>n<EFBFBD> integrity a sofistikovan<61> zamyk<79>n<EFBFBD>.
|
|
|
|
|
Podporuje n<>kter<65> vlastnosti, kter<65> tyto syst<73>my nemaj<61>,
|
|
|
|
|
u<>ivatelem definovan<61> typy, d<>di<64>nost, pravidla, MVCC
|
|
|
|
|
redukuj<75>c<EFBFBD> zamyk<79>n<EFBFBD>.
|
|
|
|
|
|
|
|
|
|
V<>kon
|
|
|
|
|
V<>konnostn<74> je na tom PostgreSQL podobn<62> jako dal<61><6C> komer<65>n<EFBFBD>
|
|
|
|
|
ale i open source datab<61>ze, v n<><6E>em je rychlej<65><6A>, jindy
|
|
|
|
|
pomalej<65><6A>. V porovn<76>n<EFBFBD> s MySQL a podobn<62>mi datab<61>zov<6F>mi syst<73>my
|
|
|
|
|
je PostgreSQL rychlej<65><6A> p<>i v<>ceu<65>ivatelsk<73>m p<><70>stupu,
|
|
|
|
|
slo<6C>it<69>j<EFBFBD><6A>ch dotazech a zat<61><74>en<65> read/write dotazy. MySQL je
|
|
|
|
|
rychlej<65><6A> v jednodu<64><75><EFBFBD>ch dotazech s mal<61>m po<70>tem u<>ivatel<65>.
|
|
|
|
|
Nav<61>c, MySQL nepodporuje mnoh<6F> vlatnosti zm<7A>n<EFBFBD>n<EFBFBD> v sekci
|
|
|
|
|
vlastnosti. Zapracovali jsme na spolehlivosti a podporovan<61>ch
|
|
|
|
|
vlastnostech, a v<>kon zvy<76>ujeme v ka<6B>d<EFBFBD> verzi. Zaj<61>mavou
|
|
|
|
|
str<74>nku porovn<76>vaj<61>c<EFBFBD> PostgreSQL a MySQL naleznete na
|
|
|
|
|
http://openacs.org/philosophy/why-not-mysql.html. Za v<>vojem
|
|
|
|
|
MySQL nen<65> Open Source komunita, ale komer<65>n<EFBFBD> spole<6C>nost,
|
|
|
|
|
p<>esto<74>e svoje produkty distribuuje jako Open Source.
|
|
|
|
|
|
|
|
|
|
Spolehlivost
|
|
|
|
|
Jsme si v<>domi, <20>e datab<61>ze mus<75> b<>t spolehliv<69>, jinak je
|
|
|
|
|
nepou<6F>iteln<6C>. Sna<6E><61>me se zve<76>ej<65>ovat dob<6F>e otestovan<61>, stabiln<6C>
|
|
|
|
|
k<>d s minimem chyb. Ka<4B>d<EFBFBD> verze je v<>ce ne<6E> m<>s<EFBFBD>c v beta
|
|
|
|
|
testov<6F>n<EFBFBD>, a na<6E>e historie verz<72> ukazuje, <20>e m<><6D>eme nab<61>dnout
|
|
|
|
|
stabiln<6C>, solidn<64> verze, kter<65> jsou p<>ipraveny pro re<72>ln<6C>
|
|
|
|
|
nasazen<65>. V t<>to oblasti jsme srovnateln<6C> s dal<61><6C>mi datab<61>zemi.
|
|
|
|
|
|
|
|
|
|
Podpora
|
|
|
|
|
Na na<6E><61> mailov<6F> konferenci m<><6D>ete kontaktovat velkou skupinu
|
|
|
|
|
v<>voj<6F><6A><EFBFBD> a u<>ivatel<65>.probl<62>m<EFBFBD>. Nem<65><6D>eme garantovat opravu,
|
|
|
|
|
nicm<63>n<EFBFBD> komer<65>n<EFBFBD> datab<61>ze tak<61> ne v<>dy nab<61>dnou opravu. Podle
|
|
|
|
|
ohlas<61> je na<6E>e podpora hodnocena l<>pe ne<6E> u jin<69>ch DBMS a to
|
|
|
|
|
d<>ky p<><70>m<EFBFBD>mu kontaktu s v<>voj<6F><6A>i, velkou komunitou u<>ivatel<65>,
|
|
|
|
|
kvalitn<74>mi manu<6E>ly a p<><70>stupn<70>m zdrojov<6F>m k<>dem. Pro u<>ivatele,
|
|
|
|
|
kte<74><65> vy<76>aduj<75> podporu ke konkr<6B>tn<74>m p<><70>pad<61>m, existuje placen<65>
|
|
|
|
|
podpora (FAQ sekce 1.6).
|
|
|
|
|
|
|
|
|
|
Cena
|
|
|
|
|
PosgreSQL lze voln<6C> pou<6F><75>vat pro nekomer<65>n<EFBFBD> i komer<65>n<EFBFBD> pou<6F>it<69>.
|
|
|
|
|
M<><4D>ete do sv<73>ch produkt<6B> p<>idat n<><6E> k<>d bez omezen<65>, respektive
|
|
|
|
|
v souladu s podm<64>nkami na<6E><61> licen<65>n<EFBFBD> smlouvy (v duchu BSD
|
|
|
|
|
licence).
|
|
|
|
|
|
|
|
|
|
1.15) Jak lze finan<61>n<EFBFBD> pomoci PostgreSQL?
|
|
|
|
|
|
|
|
|
|
PosgreSQL m<> prvot<6F><74>dn<64> infrastrukturu od na<6E>eho za<7A><61>tku v roce 1996.
|
|
|
|
|
Vd<56><64><EFBFBD>me za to Marku Fournierovi, kter<65> zalo<6C>il a spravoval tuto
|
|
|
|
|
infrastrukturu n<>kolik let.
|
|
|
|
|
|
|
|
|
|
Kvalitn<74> infrastruktura je velice d<>le<6C>it<69> pro ka<6B>d<EFBFBD> open source
|
|
|
|
|
projekt. P<>edch<63>z<EFBFBD> nedorozum<75>n<EFBFBD>m, kter<65> velice zdr<64>uj<75> pokrok v
|
|
|
|
|
projektu.
|
|
|
|
|
|
|
|
|
|
Tato infrastruktura nen<65> lacin<69>. K jej<65>mu zaji<6A>t<EFBFBD>n<EFBFBD> je t<>eba st<73>le
|
|
|
|
|
hradit ur<75>it<69> m<>s<EFBFBD><73>n<EFBFBD> a jednor<6F>zov<6F> <20><>stky. Pokud m<>te Vy nebo Va<56>e
|
|
|
|
|
spole<6C>nost pen<65>ze, kter<65> n<>m m<><6D>ete darovat, obra<72>e se na
|
|
|
|
|
http://store.pgsql.com/shopping/ a darujte je.
|
|
|
|
|
|
|
|
|
|
A<>koliv webov<6F> str<74>nka zmi<6D>uje PostgreSQL, Inc. vklady jsou ur<75>eny
|
|
|
|
|
pouze k podpo<70>e projektu PostgreSQL a nepodporuj<75> <20><>dnou existuj<75>c<EFBFBD>
|
|
|
|
|
spole<6C>nost. Pokud to vy<76>adujete, m<><6D>ete poslat kontrolu na na<6E>i
|
|
|
|
|
kontaktn<74> adresu.
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Pokud m<>te p<><70>klad <20>sp<73><70>n<EFBFBD>ho nasazen<65> PostgreSQL, p<>ihla<6C>t<EFBFBD> se na n<><6E>
|
|
|
|
|
advocacy site na http://advocacy.postgresql.org.
|
|
|
|
|
|
|
|
|
|
User client dotazy
|
|
|
|
|
|
|
|
|
|
2.1) Kde naleznu ODBC ovlada<64>e pro PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Pro PostgreSQL existuj<75> dva ODBC ovlada<64>e - PsqlODBC a OpenLink ODBC.
|
|
|
|
|
|
|
|
|
|
PsqlODBC je ke sta<74>en<65> na
|
|
|
|
|
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
|
|
|
|
|
|
|
|
|
|
OpenLink m<><6D>ete z<>skat na http://www.openlinksw.com. Spolupracuje s
|
|
|
|
|
jejich klientsk<73>m programov<6F>m vybaven<65>m a je dostupn<70> pro v<>echny jimi
|
|
|
|
|
podporovan<61> platformy (Win, Mac, Unix, VMS).
|
|
|
|
|
|
|
|
|
|
Tento ovlada<64> je ur<75>en pro ty, kte<74><65> vy<76>aduj<75> podporu komer<65>n<EFBFBD>
|
|
|
|
|
kvality, nicm<63>n<EFBFBD> freeware verze je dostupn<70> a funk<6E>n<EFBFBD>. Dotazy
|
|
|
|
|
zas<61>lejte na postgres95@openlink.co.uk.
|
|
|
|
|
|
|
|
|
|
2.2) Jak<61> n<>stroje lze pou<6F><75>t pro PostgreSQL a web?
|
|
|
|
|
|
|
|
|
|
P<>kn<6B> <20>vod do datab<61>zov<6F>ch technologi<67> zabezpe<70>uj<75>c<EFBFBD>ch chod webov<6F>ch
|
|
|
|
|
str<74>nek najdete na http://www.webreview.com.
|
|
|
|
|
|
|
|
|
|
Pro tvorbu webu existuje excelentn<74> rozhran<61> PHP, kter<65> naleznete na
|
|
|
|
|
http://www.php.net.
|
|
|
|
|
|
|
|
|
|
Pro slo<6C>it<69>j<EFBFBD><6A> p<><70>pady se <20>asto pou<6F><75>v<EFBFBD> Perl a CGI.pm nebo mod_perl.
|
|
|
|
|
|
|
|
|
|
2.3) Existuje grafick<63> rozhran<61> pro PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Pro PostgreSQL existuje n<>kolik grafick<63>ch rozhran<61>: PgAccess
|
|
|
|
|
(http://www.php.net), PgAdmin III (http://www.php.net), RHDB Admin
|
|
|
|
|
(http://sources.redhat.com/rhdb/) a Rekall (
|
|
|
|
|
http://www.thekompany.com/products/rekall/). D<>le je<6A>t<EFBFBD> PhpPgAdmin
|
|
|
|
|
(http://phppgadmin.sourceforge.net/) co<63> je rozhran<61> PostgreSQL
|
|
|
|
|
zalo<6C>en<65> na web technologii.
|
|
|
|
|
|
|
|
|
|
<20>pln<6C>j<EFBFBD><6A> seznam najdete na
|
|
|
|
|
http://techdocs.postgresql.org/guides/GUITools.
|
|
|
|
|
|
|
|
|
|
2.4) Kter<65> programovac<61> jazyky maj<61> podporu pro PostgreSQL?
|
|
|
|
|
|
|
|
|
|
V<>t<EFBFBD>ina programovac<61>ch jazyk<79> obsahuje rozhran<61> pro PostgreSQL.
|
|
|
|
|
Pod<6F>vejte se do roz<6F>i<EFBFBD>uj<75>c<EFBFBD>ch modul<75> Va<56>eho programovac<61>ho jazyka.
|
|
|
|
|
|
|
|
|
|
Distribuce PostgreSQL obsahuje tato rozhran<61>:
|
|
|
|
|
* C (libpq)
|
|
|
|
|
* Embbedded C (ecpg)
|
|
|
|
|
* Java (jdbc)
|
|
|
|
|
* Python (PyGreSQL)
|
|
|
|
|
* TCL (libpgtcl)
|
|
|
|
|
|
|
|
|
|
Dal<61><6C> rozhran<61> jsou dostupn<70> na http://gborg.postgresql.org v sekci
|
|
|
|
|
Drivers/Interfaces.
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Administrativn<76> dotazy
|
|
|
|
|
|
|
|
|
|
3.1) Jak nainstalovat PostgreSQL jinam ne<6E> do /usr/local/pgsql?
|
|
|
|
|
|
|
|
|
|
Pou<6F>ijte volbu --prefix p<>i spu<70>t<EFBFBD>n<EFBFBD> configure.
|
|
|
|
|
|
|
|
|
|
3.2) P<>i startu postmaster, dostanu chybov<6F> hl<68><6C>en<65> Bad System Call nebo
|
|
|
|
|
core dump. Pro<72>?
|
|
|
|
|
|
|
|
|
|
D<>vody mohou b<>t r<>zn<7A>, ale nejprve zkontrolujte, zda V<><56> syst<73>m
|
|
|
|
|
podporuje System V extensions. PostgreSQL vy<76>aduje v j<>d<EFBFBD>e podporu
|
|
|
|
|
sd<73>len<65> pam<61>ti a semafor<6F>.
|
|
|
|
|
|
|
|
|
|
3.3) P<>i startu postmastera dostanu hl<68><6C>en<65> o chyb<79> IpcMemoryCreate. Pro<72>?
|
|
|
|
|
|
|
|
|
|
Bu<42>to nem<65>te spr<70>vn<76> nakonfigurovanou sd<73>lenou pam<61><6D> v j<>d<EFBFBD>e nebo
|
|
|
|
|
musite zv<7A>t<EFBFBD>it jej<65> velikost. Pot<6F>ebn<62> velikost je z<>visl<73> na
|
|
|
|
|
architektu<74>e a na tom, kolik pam<61><6D>ov<6F>ch buffer<65> a backend<6E> m<>te
|
|
|
|
|
povoleno pro postmastera. Pro v<>t<EFBFBD>inu syst<73>m<EFBFBD> s p<>eddefinovan<61>m po<70>tem
|
|
|
|
|
backend<6E> a pam<61><6D>ov<6F>ch buffer<65> je minimum zhruba 1MB. V PostgreSQL
|
|
|
|
|
Administrator's Guide naleznete podrobn<62>j<EFBFBD><6A> informace o sd<73>len<65> pam<61>ti
|
|
|
|
|
a semaforech.
|
|
|
|
|
|
|
|
|
|
3.4) P<>i startu postmastera dostanu hl<68><6C>en<65> o chyb<79> IpcSemaphoreCreate.
|
|
|
|
|
Pro<72>?
|
|
|
|
|
|
|
|
|
|
Pokud dostane chybovou zpr<70>vu IpcSemaphoreCreate: semget failed (No
|
|
|
|
|
space left on device), pak va<76>e j<>dro nem<65> dost voln<6C>ch semafor<6F>.
|
|
|
|
|
PostgreSQL vy<76>aduje jeden semafor pro ka<6B>d<EFBFBD> backend v pozad<61>. Do<44>asn<73>m
|
|
|
|
|
<20>e<EFBFBD>en<65>m je start postmaster s limitem backend<6E>. Pou<6F>ijte p<>ep<65>na<6E> -N s
|
|
|
|
|
hodnotou men<65><6E> ne<6E> 32. <20>pln<6C>m <20>e<EFBFBD>en<65>m je zv<7A><76>en<65> hodnot SEMMNS a
|
|
|
|
|
SEMMNI jadra.
|
|
|
|
|
|
|
|
|
|
Nefunk<6E>n<EFBFBD> semafory mohou zp<7A>sobit p<>d b<>hem intenzivn<76>ch datab<61>zov<6F>ch
|
|
|
|
|
operac<61>.
|
|
|
|
|
|
|
|
|
|
Pokud se tato chyba vyskytuje je<6A>t<EFBFBD> n<>kde jinde, mo<6D>n<EFBFBD> nem<65>te v<>bec
|
|
|
|
|
nakonfigurov<6F>ny semafory ve va<76>em j<>d<EFBFBD>e. V PostgreSQL Administrator's
|
|
|
|
|
Guide najdete podrobn<62>j<EFBFBD><6A> popis po<70>adavk<76> na sd<73>lenou pam<61>t a
|
|
|
|
|
semafory.
|
|
|
|
|
|
|
|
|
|
3.5) Jak povolit nebo zak<61>zat p<><70>stup z jin<69>ch stanic?
|
|
|
|
|
|
|
|
|
|
P<>i v<>choz<6F>m nastaven<65> PostgreSQL odep<65>e p<><70>stup z jin<69>ch stanic ne<6E>
|
|
|
|
|
lok<6F>ln<6C> s pou<6F>it<69>m UDP. P<><50>stup z jin<69>ch stroj<6F> nen<65> mo<6D>n<EFBFBD> dokud jej
|
|
|
|
|
nepovol<6F>te nastaven<65>m tcpip_socket v postgresql.conf a ur<75>en<65>m zp<7A>sobu
|
|
|
|
|
autentifikace v $PGDATA/pg_hba.conf.
|
|
|
|
|
|
|
|
|
|
3.6) Jak ladit datab<61>zov<6F> stroj na lep<65><70> v<>kon?
|
|
|
|
|
|
|
|
|
|
Ur<55>it<69> pomohou indexy. P<><50>kaz EXPLAIN ANALYZE V<>m umo<6D>n<EFBFBD> sledovat jak
|
|
|
|
|
PostgreSQL interpretuje V<><56> dotaz a kter<65> indexy pou<6F><75>v<EFBFBD>.
|
|
|
|
|
|
|
|
|
|
P<>i v<>t<EFBFBD><74> d<>vce INSERT<52> uva<76>ujte o n<>hrad<61> p<><70>kazem COPY. Ten je
|
|
|
|
|
mnohem rychlej<65><6A> ne<6E>li samotn<74> INSERT. Ka<4B>d<EFBFBD> p<><70>kaz mimo blok BEGIN
|
|
|
|
|
WORK/COMMIT se prov<6F>d<EFBFBD> ve vlastn<74> transakci. Zva<76>te, zda-li by se
|
|
|
|
|
nedalo n<>kolik p<><70>kaz<61> spojit do jedn<64> transakce. T<>m se sn<73><6E><EFBFBD> re<72>ie
|
|
|
|
|
na transakce. P<>ed proveden<65>m rozs<7A>hl<68>ch zm<7A>n zru<72>te indexy, kter<65> po
|
|
|
|
|
dokon<6F>en<65> zm<7A>n op<6F>t vytvo<76>te.
|
|
|
|
|
|
|
|
|
|
M<>te n<>kolik dal<61><6C>ch mo<6D>nost<73>, jak zlep<65>it v<>kon. M<><4D>ete zak<61>zat
|
|
|
|
|
fsyn() p<>i startu postmastera p<>ep<65>na<6E>i -o -F. Tyto p<>ep<65>na<6E>e zabr<62>n<EFBFBD>
|
|
|
|
|
fsync(), tj. z<>pisu na disk po ka<6B>d<EFBFBD> transakci.
|
|
|
|
|
|
|
|
|
|
M<><4D>ete zv<7A><76>it velikost pam<61><6D>ov<6F>ch buffer<65> pou<6F>it<69>ch backendy tj.
|
|
|
|
|
parametr -B postmasteru. Pokud ale tato hodnota bude p<><70>li<6C> velk<6C>, tak
|
|
|
|
|
mo<6D>n<EFBFBD> nespust<73>te postmastera jeliko<6B> dos<6F>hnete limitu sd<73>len<65> pam<61>ti.
|
|
|
|
|
Ka<4B>d<EFBFBD> buffer m<> 8K a implicitn<74> je 64 buffer<65>.
|
|
|
|
|
|
|
|
|
|
D<>le m<><6D>ete pou<6F><75>t p<>ep<65>na<6E> -S k zv<7A><76>en<65> limitu pam<61>ti pro backendy na
|
|
|
|
|
do<64>asn<73> t<><74>d<EFBFBD>n<EFBFBD>. Hodnota je m<>n<EFBFBD>na v kilobytech a v<>choz<6F> nastaven<65> je
|
|
|
|
|
512, tj. 512K.
|
|
|
|
|
|
|
|
|
|
M<><4D>ete pou<6F><75>t p<><70>kaz CLUSTER, kter<65> uspo<70><6F>d<EFBFBD> fyzicky data v tabulk<6C>ch
|
|
|
|
|
podle indexu. V<>ce na manu<6E>lov<6F>ch str<74>nk<6E>ch p<><70>kazu CLUSTER.
|
|
|
|
|
|
|
|
|
|
3.7) Jak<61> jsou mo<6D>nosti lad<61>n<EFBFBD>?
|
|
|
|
|
|
|
|
|
|
M<>te n<>kolik mo<6D>nost<73> jak se dostat k u<>ite<74>n<EFBFBD>m stavov<6F>m informac<61>m.
|
|
|
|
|
|
|
|
|
|
Zaprv<72>, p<>i p<>ekladu pou<6F>ijte p<>ep<65>na<6E> --enable-cassert, t<>m se zapne
|
|
|
|
|
monitorov<6F>n<EFBFBD> a n<>sledn<64> zastaven<65> aplikace, kdy<64> se proces v backendu
|
|
|
|
|
dostane do neo<65>ek<65>van<61>ho stavu.
|
|
|
|
|
|
|
|
|
|
Jak postmaster tak postgres m<> n<>kolik p<>ep<65>na<6E><61> umo<6D><6F>uj<75>c<EFBFBD>ch lad<61>n<EFBFBD>.
|
|
|
|
|
Postmaster nastartujte tak, abyste si byli jisti, <20>e je standartn<74>
|
|
|
|
|
v<>stup a standartn<74> chybov<6F> v<>stup p<>esm<73>rov<6F>n do souboru logu,
|
|
|
|
|
nap<61><70>klad:
|
|
|
|
|
cd /usr/local/pgsql
|
|
|
|
|
./bin/postmaster > server.log 2>&1 &
|
|
|
|
|
|
|
|
|
|
T<>m se vytvo<76><6F> log v adres<65><73>i PostgreSQL, Tento soubor obsahuje
|
|
|
|
|
u<>ite<74>n<EFBFBD> informace o probl<62>mech a chyb<79>ch vyskytl<74>ch se na serveru.
|
|
|
|
|
Postmaster m<> p<>ep<65>na<6E> -d ur<75>uj<75>c<EFBFBD>, jak podrobn<62> maj<61> b<>t reportovan<61>
|
|
|
|
|
informace, tj. debug level. Pozor, p<>i velk<6C> hodnot<6F> debug levelu
|
|
|
|
|
rychle roste velikost souboru logu.
|
|
|
|
|
|
|
|
|
|
Pokud neb<65><62><EFBFBD> postmaster, m<><6D>ete spustit backend PostgreSQL z p<><70>kazov<6F>
|
|
|
|
|
<20><>dky a napsat sv<73>j SQL dotaz p<><70>mo v backendu (doporu<72>eno pouze pro
|
|
|
|
|
lad<61>n<EFBFBD>). Dotaz je v tomto p<><70>pad<61> ukon<6F>en novou <20><>dkou, nikoliv
|
|
|
|
|
st<73>edn<64>kem. Pokud m<>te aplikaci p<>elo<6C>enou s lad<61>c<EFBFBD>mi symboly, m<><6D>ete
|
|
|
|
|
pou<6F><75>t debbuger k monitorov<6F>n<EFBFBD> procesu. Pokud nen<65> backend spu<70>t<EFBFBD>n
|
|
|
|
|
postmasterem, pak neb<65><62><EFBFBD> ve sv<73>m obvykl<6B>m prost<73>ed<65> a tud<75><64> n<>kter<65>
|
|
|
|
|
probl<62>my dan<61> interakc<6B> mezi backendy nemohou b<>t nasimulov<6F>ny.
|
|
|
|
|
|
|
|
|
|
Pokud b<><62><EFBFBD> postmaster, spus<75>e psql v jednom okn<6B> a pak si zjist<73>te PID
|
|
|
|
|
procesu postgres pou<6F>it<69>ho psql. V debuggeru sep<65>ipojte k postgresql
|
|
|
|
|
PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql.
|
|
|
|
|
Pokud lad<61>te startup postgresu, pak nastavte PGOPTIONS="-W n" a spus<75>e
|
|
|
|
|
psql. Tento p<>ep<65>na<6E> zp<7A>sob<6F> pauzu n sekund, tak<61>e budete m<>t <20>as se
|
|
|
|
|
p<>ipojit k procesu, a nastavit breakpointy a pokra<72>ovat v startup
|
|
|
|
|
posloupnosti.
|
|
|
|
|
|
|
|
|
|
Pro lad<61>n<EFBFBD> a m<><6D>en<65> v<>konu mohou b<>t u<>ite<74>n<EFBFBD> p<>ep<65>na<6E>e -s, -A a -t
|
|
|
|
|
programu postgres (backend).
|
|
|
|
|
|
|
|
|
|
M<><4D>ete prov<6F>st p<>eklad s profilac<61>, tak abyste vid<69>li kolik <20>asu
|
|
|
|
|
zab<61>raj<61> jednotliv<69> funkce. Soubory s profily backend<6E> jsou ulo<6C>eny v
|
|
|
|
|
adres<65><73>i pgsql/data/base/dbname. Profil klienta pak v jeho aktu<74>ln<6C>m
|
|
|
|
|
adres<65><73>i. Korektn<74> profilace v prost<73>ed<65> Linux po<70>aduje konfiguraci
|
|
|
|
|
syst<73>mu s parametrem -DLINUX_PROFILE.
|
|
|
|
|
|
|
|
|
|
3.8) Pro<72> dostanu "Sorry, too many clients", kdy<64> se zkou<6F><75>m p<>ipojit?
|
|
|
|
|
|
|
|
|
|
Zvy<76>te limit postmastera na maxim<69>ln<6C> po<70>et sou<6F>asn<73> spu<70>t<EFBFBD>n<EFBFBD>ch
|
|
|
|
|
backend<6E>.
|
|
|
|
|
|
|
|
|
|
V<>choz<6F> hodnota je 32 backend<6E>. Tuto hodnotu zv<7A><76><EFBFBD>te zastaven<65>m a
|
|
|
|
|
op<6F>tovn<76>m spu<70>t<EFBFBD>n<EFBFBD>m postmastera s parametrem -N nebo <20>pravou
|
|
|
|
|
postgresql.conf.
|
|
|
|
|
|
|
|
|
|
P<>i zv<7A><76>en<65> hodnoty -N nad 32 mus<75>te zv<7A><76>it hodnotu -B nad v<>choz<6F> 64,
|
|
|
|
|
-B mus<75> b<>t minim<69>ln<6C> dvakr<6B>t v<>t<EFBFBD><74>, nebo je<6A>t<EFBFBD> l<>pe v<>ce.
|
|
|
|
|
Pravd<76>podobn<62> zjist<73>te, <20>e pro velk<6C> po<70>et proces<65> backendu je nutn<74>
|
|
|
|
|
zv<7A><76>it n<>kter<65> parametry j<>dra. Jsou to p<>edev<65><76>m maxim<69>ln<6C> velikost
|
|
|
|
|
sd<73>len<65> pam<61>ti SHMMAX, maxim<69>ln<6C> po<70>et semaf<61>r<EFBFBD> SEMMNS a SEMMNI,
|
|
|
|
|
maxim<69>ln<6C> po<70>et proces<65> NPROC, maxim<69>ln<6C> po<70>et proces<65> u<>ivatele
|
|
|
|
|
MAXUPRC a maxim<69>ln<6C> po<70>et otev<65>en<65>ch soubor<6F> NFILE a NINODE. D<>vod pro
|
|
|
|
|
omezen<65> maxim<69>ln<6C>ho po<70>tu backend<6E> je fakt, <20>e by mohlo doj<6F>t k
|
|
|
|
|
vy<76>erp<72>n<EFBFBD> zdroj<6F> Va<56>eho syst<73>mu.
|
|
|
|
|
|
|
|
|
|
3.9) K <20>emu slou<6F><75> adres<65><73> pgsql_tmp?
|
|
|
|
|
|
|
|
|
|
Tento adres<65><73> obsahuje do<64>asn<73> soubory vytvo<76>en<65> exekutorem dotaz<61>.
|
|
|
|
|
Nap<61><70>klad, kdy<64> je nutn<74> t<><74>d<EFBFBD>n<EFBFBD> k zaji<6A>t<EFBFBD>n<EFBFBD> ORDER BY a t<><74>d<EFBFBD>n<EFBFBD> m<>
|
|
|
|
|
v<>t<EFBFBD><74> n<>roky na prostor ne<6E> povoluje parametr -S backendu, pak je
|
|
|
|
|
vytvo<76>en do<64>asn<73> soubor k ulo<6C>en<65> extra <20>daj<61>.
|
|
|
|
|
|
|
|
|
|
Do<44>asn<73> soubory jsou obvykle maz<61>ny automaticky, ale m<><6D>e se st<73>t, <20>e
|
|
|
|
|
b<>hem t<><74>d<EFBFBD>n<EFBFBD> server spadne. Zastaven<65> a dal<61><6C> start postmastera
|
|
|
|
|
zajist<73> odstran<61>n<EFBFBD> soubor<6F> s t<>chto adres<65><73><EFBFBD>.
|
|
|
|
|
|
|
|
|
|
3.10) Pro<72> je po<70>adov<6F>no dump a obnoven<65> (load) datab<61>ze b<>hem upgrade mezi
|
|
|
|
|
velk<6C>mi verzemi PostgreSQL?
|
|
|
|
|
|
|
|
|
|
PostgreSQL se minim<69>ln<6C> m<>n<EFBFBD> b<>hem mal<61>ch verz<72>, tak<61>e nap<61>. p<>i
|
|
|
|
|
upgrade z 7.2 na 7.2.1 nen<65> nutn<74> dump a load datab<61>ze. Ale v<>ynamn<6D>
|
|
|
|
|
verze <20>asto m<>n<EFBFBD> intern<72> form<72>t syst<73>mov<6F>ch tabulek a datov<6F>ch
|
|
|
|
|
soubor<6F>. Tyto zm<7A>ny jsou natolik rozs<7A>hl<68>, <20>e nelze zajistit zp<7A>tnou
|
|
|
|
|
kompatibilitu pro datov<6F> soubory. Dump ulo<6C><6F> data v obecn<63>m form<72>tu,
|
|
|
|
|
tak<61>e mohou b<>t na<6E>tena a pou<6F><75>v<EFBFBD>na v nov<6F>m intern<72>m form<72>tu.
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Provozn<7A> dotazy
|
|
|
|
|
|
|
|
|
|
4.1) <20><>m se li<6C><69> bin<69>rn<72> a norm<72>ln<6C> kurzor?
|
|
|
|
|
|
|
|
|
|
Popis najdete v manu<6E>lov<6F> str<74>nce DECLARE
|
|
|
|
|
|
|
|
|
|
4.2) Jak z<>skat pouze prvn<76> <20><>dek dotazu? N<>hodn<64> <20><>dek?
|
|
|
|
|
|
|
|
|
|
Pod<6F>vejte se do man. str<74>nky p<><70>kazu FETCH, nebo pou<6F>ijte SELECT ...
|
|
|
|
|
LIMIT ...
|
|
|
|
|
|
|
|
|
|
I kdy<64> pot<6F>ebujete z<>skat pouze prvn<76>ch n<>kolik <20><>dk<64>, je t<>eba
|
|
|
|
|
zpracovat v<>echna data, nap<61>. pokud dotaz m<> ORDER BY. Pokud v<>ak
|
|
|
|
|
existuje index, kter<65> odpov<6F>d<EFBFBD> ORDER BY, PostgreSQL m<><6D>e z<>skat pouze
|
|
|
|
|
prvn<76>ch n <20><>dk<64> a ukon<6F>it zpracov<6F>n<EFBFBD> dotazu.
|
|
|
|
|
|
|
|
|
|
K z<>sk<73>n<EFBFBD> n<>hodn<64>ho <20><>dku pou<6F>ijte:
|
|
|
|
|
SELECT col
|
|
|
|
|
FROM tab
|
|
|
|
|
ORDER BY random()
|
|
|
|
|
LIMIT 1;
|
|
|
|
|
|
|
|
|
|
4.3) Jak z<>sk<73>m seznam tabulek nebo jinak jak jej z<>sk<73> psql?
|
|
|
|
|
|
|
|
|
|
P<><50>kaz \dt v psql zobraz<61> seznam tabulek. <20>pln<6C> seznam p<><70>kaz<61> psql
|
|
|
|
|
dostanete p<><70>kazem \?. Tak<61> se m<><6D>ete pod<6F>vat do zdrojov<6F>ch k<>d<EFBFBD> psql
|
|
|
|
|
do souboru pgsql/src/bin/psql/describe.c. Ten obsahuje SQL p<><70>kazy,
|
|
|
|
|
kter<65> se pou<6F><75>vaj<61> v psql metap<61><70>kazech. D<>le m<><6D>ete spustit psql s
|
|
|
|
|
p<>ep<65>na<6E>em -E, kter<65> zp<7A>sob<6F> zobrazen<65> ka<6B>d<EFBFBD>ho dotazu, kter<65>
|
|
|
|
|
zpracov<6F>n<EFBFBD> metap<61><70>kazu vyvol<6F>. PostgreSQL nab<61>z<EFBFBD> SQLi INFORMATION
|
|
|
|
|
SCHEMA s tabulkami obsahuj<75>c<EFBFBD> informace o datab<61>zi.
|
|
|
|
|
|
|
|
|
|
4.4) Jak odstran<61>m sloupec tabulky, jak zm<7A>n<EFBFBD>m jeho typ?
|
|
|
|
|
|
|
|
|
|
Po<50><6F>naje verz<72> 7.3 m<><6D>ete pou<6F><75>t p<><70>kaz ALTER TABLE DROP COLUMN. Ve
|
|
|
|
|
star<61><72>ch verz<72>ch m<><6D>ete pou<6F><75>t n<>sleduj<75>c<EFBFBD> postup:
|
|
|
|
|
BEGIN;
|
|
|
|
|
LOCK TABLE old_table;
|
|
|
|
|
SELECT ... -- mimo sloupec, kter<65> chceme odstranit
|
|
|
|
|
INTO TABLE new_table;
|
|
|
|
|
DROP TABLE old_table;
|
|
|
|
|
ALTER TABLE new_table RENAME TO old_table;
|
|
|
|
|
COMMIT;
|
|
|
|
|
|
|
|
|
|
Pro zm<7A>nu typu sloupce je t<>eba prov<6F>st:
|
|
|
|
|
BEGIN;
|
|
|
|
|
ALTER TABLE tab ADD COLUMN new_col new_data_type;
|
|
|
|
|
UPDATE tab SET new_col = CAST(old_col AS new_data_type;
|
|
|
|
|
ALTER TABLE tab DROP COLUMN old_col;
|
|
|
|
|
COMMIT;
|
|
|
|
|
|
|
|
|
|
Pot<6F> prove<76>te VACUUM FULL tab - uvoln<6C>te t<>m diskov<6F> prostor zabran<61>
|
|
|
|
|
nyn<79> ji<6A> neplatn<74>mi <20><>dky.
|
|
|
|
|
|
|
|
|
|
4.5) Jak<61> je maxim<69>ln<6C> velikost <20><>dku, tabulky a datab<61>ze?
|
|
|
|
|
|
|
|
|
|
PostgreSQL m<> tato omezen<65>:
|
|
|
|
|
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 <20><>dky: 1.6 TB
|
|
|
|
|
Maxim<69>ln<6C> velikost polo<6C>ky 1 GB
|
|
|
|
|
Maxim<69>ln<6C> po<70>et <20><>dk<64> v tabulce: neomezeno
|
|
|
|
|
Maxim<69>ln<6C> po<70>et sloupc<70> v tabulce: 250-1600 podle typ<79>
|
|
|
|
|
Maxim<69>ln<6C> po<70>et index<65> na tabulce: neomezeno
|
|
|
|
|
|
|
|
|
|
Ve skute<74>nosti nic nen<65> neomezeno, limitem b<>v<EFBFBD> v<>dy dostupn<70> diskov<6F>
|
|
|
|
|
pam<61><6D> nebo velikost opera<72>n<EFBFBD> pam<61>ti. Pokud m<>te n<>kterou z t<>chto
|
|
|
|
|
hodnot neobvykle velkou, m<><6D>e doj<6F>t ke sn<73><6E>en<65> v<>konu.
|
|
|
|
|
|
|
|
|
|
Maxim<69>ln<6C> velikost tabulky je 32 TB a nevy<76>aduje podporu velk<6C>ch
|
|
|
|
|
soubor<6F> opera<72>n<EFBFBD>m syst<73>mem. Velk<6C> tabulky se ukl<6B>daj<61> do n<>kolika 1 GB
|
|
|
|
|
soubor<6F> tak<61>e limity souborov<6F>ho syst<73>mu nejsou podstatn<74>.
|
|
|
|
|
|
|
|
|
|
Maxim<69>ln<6C> velikost tabulky a maxim<69>ln<6C> po<70>et sloupc<70> m<><6D>eme
|
|
|
|
|
ze<7A>ty<74>n<EFBFBD>sobit nastaven<65>m velikosti bloku na 32K.
|
|
|
|
|
|
|
|
|
|
4.6) Kolik diskov<6F>ho prostoru je pot<6F>eba k ulo<6C>en<65> dat z
|
|
|
|
|
|
|
|
|
|
norm<72>ln<6C>ho textov<6F>ho souboru?
|
|
|
|
|
|
|
|
|
|
PostgreSQL vy<76>aduje a<> p<>tin<69>sobek diskov<6F>ho prostoru k ulo<6C>en<65> dat z
|
|
|
|
|
textov<6F>ho souboru.
|
|
|
|
|
|
|
|
|
|
Nap<61><70>klad, uva<76>ujme soubor se 100 tis<69>ci <20><>dky obsahuj<75>c<EFBFBD> na ka<6B>d<EFBFBD>
|
|
|
|
|
<20><>dce cel<65> <20><>slo a textov<6F> popis. Text je v pr<70>m<EFBFBD>ru dvacet byt<79>
|
|
|
|
|
dlouh<75>. Textov<6F> soubor bude 2.8 MB dlouh<75>. Velikost datab<61>ze
|
|
|
|
|
obsahuj<75>c<EFBFBD> odpov<6F>daj<61>c<EFBFBD> data bude zhruba 6.4 MB.
|
|
|
|
|
36 byt<79>: hlavi<76>ka <20><>dku (p<>ibli<6C>n<EFBFBD>)
|
|
|
|
|
24 byt<79>: jedna celo<6C><6F>seln<6C> polo<6C>ka a jedna textov<6F>
|
|
|
|
|
+ 4 byty: ukazatel na str<74>nku k ntici
|
|
|
|
|
------------------------------------------------------
|
|
|
|
|
64 byt<79> na <20><>dek
|
|
|
|
|
|
|
|
|
|
Velikost datov<6F> str<74>nky PostgreSQL je 8KB
|
|
|
|
|
|
|
|
|
|
8192 byt<79> na str<74>nce
|
|
|
|
|
---------------------- = 128 <20><>dek na str<74>nku
|
|
|
|
|
64 byt<79> za <20><>dek
|
|
|
|
|
|
|
|
|
|
100000 <20><>dek
|
|
|
|
|
-------------------- = 782 str<74>nek (zaokrouhleno nahoru)
|
|
|
|
|
128 <20><>dek na str<74>nce
|
|
|
|
|
|
|
|
|
|
782 * 8192 = 6, 406, 144 byt<79> (6.4 MB)
|
|
|
|
|
|
|
|
|
|
Indexy nemaj<61> tak velkou re<72>ii, ale mohou b<>t tak<61> velk<6C>, proto<74>e
|
|
|
|
|
obsahuj<75> indexovan<61> data.
|
|
|
|
|
|
|
|
|
|
Hodnoty NULL jsou ulo<6C>eny v bitmap<61>ch, tak<61>e spot<6F>ebuj<75> jen velmi m<>lo
|
|
|
|
|
diskov<6F>ho prostoru.
|
|
|
|
|
|
|
|
|
|
4.7) Jak z<>sk<73>m seznam vytvo<76>en<65>ch tabulek, index<65>, datab<61>z<EFBFBD>?
|
|
|
|
|
|
|
|
|
|
psql m<> sadu metap<61><70>kaz<61> k zobrazen<65> t<>chto informac<61>. Jejich seznam
|
|
|
|
|
z<>sk<73>te p<><70>kazem \?. D<>le se m<><6D>ete pod<6F>vat na obsah syst<73>mov<6F>ch
|
|
|
|
|
tabulek za<7A><61>naj<61>c<EFBFBD>ch pg_. Spu<70>t<EFBFBD>n<EFBFBD> psql s parametrem -l provede v<>pis
|
|
|
|
|
n<>zv<7A> v<>ech datab<61>z<EFBFBD>.
|
|
|
|
|
|
|
|
|
|
Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy p<>istupuj<75>c<EFBFBD>
|
|
|
|
|
k syst<73>mov<6F>m tabulk<6C>mm.
|
|
|
|
|
|
|
|
|
|
4.8) M<>j dotaz je pomal<61> a nepou<6F><75>v<EFBFBD> vytvo<76>en<65> indexy. Pro<72>?
|
|
|
|
|
|
|
|
|
|
Ka<4B>d<EFBFBD> dotaz nemus<75> nutn<74> pou<6F><75>t existuj<75>c<EFBFBD> indexy. Index se pou<6F>ije
|
|
|
|
|
tehdy, kdy<64> je tabulka v<>t<EFBFBD><74> ne<6E> ur<75>it<69> minim<69>ln<6C> velikost, a dotaz
|
|
|
|
|
vyb<79>r<EFBFBD> pouze procentu<74>ln<6C> malou <20><>st <20><>dk<64> tabulky. To proto, <20>e
|
|
|
|
|
n<>hodn<64> p<><70>stup k disku dan<61> <20>ten<65>m indexu m<><6D>e b<>t pomalej<65><6A> ne<6E>
|
|
|
|
|
line<6E>rn<72> <20>ten<65> tabulky nebo sekven<65>n<EFBFBD> <20>ten<65>.
|
|
|
|
|
|
|
|
|
|
PostgreSQL rozhoduje o pou<6F>it<69> index<65> na z<>klad<61> statistiky p<><70>stup<75> k
|
|
|
|
|
tabulce. Tyto statistiky se shroma<6D><61>uj<75> p<><70>kazy VACUUM ANALYZE nebo
|
|
|
|
|
ANALYZE. D<>ky statistik<69>m m<> optimizer informaci o po<70>tu <20><>dek v
|
|
|
|
|
tabulce a m<><6D>e l<>pe rozhodnout o pou<6F>it<69> index<65>. Statistiky se uplatn<74>
|
|
|
|
|
p<>i ur<75>en<65> optim<69>ln<6C>ho po<70>ad<61> a metody spojen<65> tabulek. Statistiky by
|
|
|
|
|
se m<>li aktualizovat opakovan<61>, tak jak se m<>n<EFBFBD> obsah tabulek.
|
|
|
|
|
|
|
|
|
|
Indexy nejsou oby<62>ejn<6A> pou<6F>ity pro set<65><74>d<EFBFBD>n<EFBFBD> nebo spojen<65> tabulek.
|
|
|
|
|
Sekven<65>n<EFBFBD> zpracov<6F>n<EFBFBD> n<>sledovan<61> explicitn<74>m t<><74>d<EFBFBD>n<EFBFBD>m je oby<62>ejn<6A>
|
|
|
|
|
rychlej<65><6A> ne<6E> indexn<78> <20>ten<65> na velk<6C> tabulce.
|
|
|
|
|
|
|
|
|
|
Jinak je tomu v p<><70>pad<61> pou<6F>it<69> LIMIT a ORDER BY, p<>i kter<65>m se
|
|
|
|
|
v<>t<EFBFBD>inou index pou<6F>ije, v<>sledkem je pouze mal<61> <20><>st tabulky. Funkce
|
|
|
|
|
MAX() a MIN() nepou<6F><75>vaj<61> indexy, ale je mo<6D>n<EFBFBD> tut<75><74> hodnotu z<>skat:
|
|
|
|
|
SELECT col
|
|
|
|
|
FROM tab
|
|
|
|
|
ORDER BY col [ DESC ]
|
|
|
|
|
LIMIT 1;
|
|
|
|
|
|
|
|
|
|
Pokud si mysl<73>te, <20>e optimizer myln<6C> zvolil sekven<65>n<EFBFBD> prohled<65>v<EFBFBD>n<EFBFBD>
|
|
|
|
|
tabulky, pou<6F>ijte p<><70>kaz SET enable_seqscan TO 'off' a zkuste zda je
|
|
|
|
|
indexn<78> prohled<65>v<EFBFBD>n<EFBFBD> rychlej<65><6A>.
|
|
|
|
|
|
|
|
|
|
P<>i vyhled<65>v<EFBFBD>n<EFBFBD> na z<>klad<61> vzoru jako je nap<61>. oper<65>tor LIKE nebo ~ se
|
|
|
|
|
indexy pou<6F><75>j<EFBFBD> pouze za ur<75>it<69>ch skute<74>nost<73>:
|
|
|
|
|
* za<7A><61>tek hledan<61>ho vzoru mus<75> b<>t ukotven k za<7A><61>tku, tj.
|
|
|
|
|
+ vzor LIKE nesm<73> za<7A><61>nat %
|
|
|
|
|
+ ~ regul<75>rn<72> v<>raz mus<75> za<7A><61>nat ^
|
|
|
|
|
* vzor nesm<73> za<7A><61>nat intervalem, nap<61>. [a-e]
|
|
|
|
|
* vyhled<65>van<61>, kter<65> nen<65> Case sensitiv jako je ILIKE nebo ~*
|
|
|
|
|
nepou<6F><75>v<EFBFBD> indexy. M<><4D>ete ale pou<6F><75>t funkcion<6F>ln<6C> indexy, kter<65>
|
|
|
|
|
jsou pos<6F>ny v sekci 4.12
|
|
|
|
|
* p<>i inicializaci datab<61>ze (initdb) mus<75> b<>t pou<6F>ito C locale
|
|
|
|
|
(pozn. p<>ekladatele - tud<75><64> v na<6E>ich podm<64>nk<6E>ch nepou<6F>iteln<6C>,
|
|
|
|
|
nepracovalo by <20>esk<73> t<><74>d<EFBFBD>n<EFBFBD>).
|
|
|
|
|
|
|
|
|
|
4.9) Jak zjist<73>m, jak optimizer dotazu vyhodnocuje m<>j dotaz?
|
|
|
|
|
|
|
|
|
|
Pod<6F>vejte se do manu<6E>lov<6F> str<74>nky p<><70>kazu EXPLAIN.
|
|
|
|
|
|
|
|
|
|
4.10) Co to je R-tree index?
|
|
|
|
|
|
|
|
|
|
R-tree index se pou<6F><75>v<EFBFBD> pro indexov<6F>n<EFBFBD> prostorov<6F>ch dat. Hash index
|
|
|
|
|
nem<65><6D>e obslou<6F>it prohled<65>v<EFBFBD>n<EFBFBD> oblast<73>. B-tree index m<><6D>e <20><>dit
|
|
|
|
|
vyhled<65>n<EFBFBD> oblast<73> v jedn<64> dimenzi. R-tree index m<><6D>e podporovat
|
|
|
|
|
hled<65>n<EFBFBD> v multidimenzion<6F>ln<6C>ch datech. Pou<6F>ijeme-li nap<61><70>klad R-tree
|
|
|
|
|
index na atributy typu point, pak syst<73>m m<><6D>e efektivn<76> odpov<6F>d<EFBFBD>t na
|
|
|
|
|
dotaz - vyber v<>echny body uvnit<69> obd<62>ln<6C>k<EFBFBD>.
|
|
|
|
|
|
|
|
|
|
P<>vodn<64> n<>vrh R-tree je Guttman, A. "R-trees: A Dynamic Index
|
|
|
|
|
Structure for Spatial Searching." Proceedings of the 1984 ACM SIGMOD
|
|
|
|
|
Int'l Conf on Mgmt of Data, 45-57
|
|
|
|
|
|
|
|
|
|
Tyto materi<72>ly naleznete v Stonebraker's "Readings in Database
|
|
|
|
|
Systems".
|
|
|
|
|
|
|
|
|
|
Vestav<61>n<EFBFBD> R-tree m<><6D>e slou<6F>it k indexaci polygon<6F> a oblast<73>.
|
|
|
|
|
Teoreticky m<><6D>eme R-tree pou<6F><75>t i pro v<>ce dimenz<6E> (jin<69> ne<6E> 3D). Ve
|
|
|
|
|
skute<74>nosti ale takov<6F> roz<6F><7A><EFBFBD>en<65> R-tree vy<76>aduje trochu pr<70>ce a ve
|
|
|
|
|
sou<6F>astnosti chyb<79> dokumentace jak na to.
|
|
|
|
|
|
|
|
|
|
4.11) Co je Genetic Query Optimizer?
|
|
|
|
|
|
|
|
|
|
GEQO modul urychluje optimalizaci dotaz<61> p<>i spojov<6F>n<EFBFBD> mno<6E>stv<74>
|
|
|
|
|
tabulek metodou Genetick<63>ch algoritm<74> (GA). To umo<6D><6F>uje z<>skat velk<6C>ho
|
|
|
|
|
mno<6E>stv<74> variant spojen<65> p<>i ne<6E>pln<6C>m prohled<65>v<EFBFBD>n<EFBFBD>m.
|
|
|
|
|
|
|
|
|
|
4.12) Jak prov<6F>st vyhled<65>v<EFBFBD>n<EFBFBD> regul<75>rn<72>ho v<>razu case sensitiv, insensitiv?
|
|
|
|
|
Jak pou<6F><75>t index pro case insensitive vyhled<65>v<EFBFBD>n<EFBFBD>?
|
|
|
|
|
|
|
|
|
|
Oper<65>tor ~ slou<6F><75> k porov<6F>n<EFBFBD> s regul<75>rn<72>m v<>razem, jeho modifikace *~
|
|
|
|
|
p<>edstavuje case insensitive vyhled<65>v<EFBFBD>n<EFBFBD>. Jedn<64> se o obdobu LIKE a
|
|
|
|
|
ILIKE.
|
|
|
|
|
|
|
|
|
|
Pro vyhled<65>v<EFBFBD>n<EFBFBD> bez ohledu na velk<6C> mal<61> p<>smena pou<6F>ijeme:
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM tab
|
|
|
|
|
WHERE lower(col) = 'abc';
|
|
|
|
|
|
|
|
|
|
V tomto p<><70>pad<61> se nepou<6F>ije standardn<64> index. Nicm<63>n<EFBFBD>, pou<6F>ije se
|
|
|
|
|
funkcion<6F>ln<6C> index, pokud jej vytvo<76><6F>te:
|
|
|
|
|
CREATE INDEX tabindex ON tab (lower(col));
|
|
|
|
|
|
|
|
|
|
4.13) Jak v dotazu detekovat, <20>e polo<6C>ka je NULL?
|
|
|
|
|
|
|
|
|
|
Ur<55><72>te pomoc<6F> IS NULL nebo IS NOT NULL
|
|
|
|
|
|
|
|
|
|
4.14) Jak<61> jsou rozd<7A>ly mezi r<>zn<7A>mi znakov<6F>mi typy?
|
|
|
|
|
|
2003-12-14 00:56:00 +08:00
|
|
|
|
Typ Intern<72> n<>zev Pozn<7A>mka
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
|
|
VARCHAR(n) varchar omezeno maxim<69>ln<6C> d<>lkou, bez dopln<6C>n<EFBFBD> mezerami
|
|
|
|
|
CHAR(n) bpchar <20>et<65>zec je dopln<6C>n mezerami do dan<61> d<>lky
|
|
|
|
|
TEXT text bez horn<72>ho limitu na d<>lku
|
|
|
|
|
BYTEA bytea pole byt<79> (bezpe<70>n<EFBFBD> lze ulo<6C>it i znak NULL)
|
|
|
|
|
"char" char jeden znak
|
|
|
|
|
|
2005-03-12 05:46:54 +08:00
|
|
|
|
S intern<72>mi n<>zvy se setk<74>te v syst<73>mov<6F>m katalogu a v n<>kter<65>ch
|
|
|
|
|
chybov<6F>ch hl<68><6C>en<65>ch.
|
|
|
|
|
|
|
|
|
|
Prvn<76> <20>ty<74>i uveden<65> typy jsou tzv. varlena typy (tj. prvn<76> <20>ty<74>i byty
|
|
|
|
|
na disku nesou <20>daj o d<>lce, n<>sleduj<75> samotn<74> data). Proto skute<74>n<EFBFBD>
|
|
|
|
|
pou<6F>it<69> prostor je v<>dy o n<>co m<>lo v<>t<EFBFBD><74> ne<6E> deklarovan<61> d<>lka.
|
|
|
|
|
Naopak, tyto datov<6F> typy jsou komprimov<6F>nty TOASTem, tak<61>e prostor na
|
|
|
|
|
disku m<><6D>e b<>t ni<6E><69><EFBFBD> ne<6E> je o<>ek<65>v<EFBFBD>no.
|
|
|
|
|
|
|
|
|
|
VARCHAR(n) je vhodn<64> pro ukl<6B>d<EFBFBD>n<EFBFBD> text<78> promm<6D>n<EFBFBD> d<>lky s pevn<76>
|
|
|
|
|
stanovenou maxim<69>ln<6C> d<>lkou. TEXT je pro <20>et<65>zce bez omezen<65> d<>lky s
|
|
|
|
|
maximem jeden gigabajt.
|
|
|
|
|
|
|
|
|
|
CHAR(n) slou<6F><75> k ukl<6B>d<EFBFBD>n<EFBFBD> <20>et<65>zc<7A> stejn<6A> d<>lky. CHAR(n) dopln<6C> pr<70>zdn<64>
|
|
|
|
|
znaky do specifikovan<61> d<>lky, zat<61>mco VARCHAR(n) ulo<6C><6F> pouze p<>edan<61>
|
|
|
|
|
znaky. BYTEA je ur<75>eno pro ukl<6B>d<EFBFBD>n<EFBFBD> bin<69>rn<72>ch dat, v<>etn<74> NULL byte.
|
|
|
|
|
V<>echny zde popsan<61> typy maj<61> podobn<62> v<>konnostn<74> charakteristiky.
|
|
|
|
|
|
|
|
|
|
4.15.1) Jak vytvo<76>it serial/auto-increment pole?
|
|
|
|
|
|
|
|
|
|
PostgreSQL podporuje typ SERIAL. P<>i jeho pou<6F>it<69> se automaticky
|
|
|
|
|
vytvo<76><6F> SEQUENCE. Nap<61><70>klad:
|
|
|
|
|
CREATE TABLE person (
|
|
|
|
|
id SERIAL,
|
|
|
|
|
name TEXT
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
je automaticky p<>evedeno do
|
|
|
|
|
CREATE SEQUENCE person_id_seq;
|
|
|
|
|
CREATE TABLE person (
|
|
|
|
|
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
|
|
|
|
|
name TEXT
|
|
|
|
|
);
|
|
|
|
|
CREATE UNIQUE INDEX person_id_key ON person(id);
|
|
|
|
|
|
|
|
|
|
Viz dokumentace create_sequence v manu<6E>lov<6F>ch str<74>nk<6E>ch. D<>le m<><6D>ete
|
|
|
|
|
pou<6F><75>t unik<69>tn<74> hodnotu OID ka<6B>d<EFBFBD>ho <20><>dku. Potom ale mus<75>te spou<6F>t<EFBFBD>t
|
|
|
|
|
pg_dump s p<>ep<65>na<6E>em -o, tak aby z<>staly zachov<6F>ny hodnoty OID (u
|
|
|
|
|
p<><70>kazu copy COPY WITH OIDS).
|
|
|
|
|
|
|
|
|
|
4.15.2) Jak z<>skat hodnotu SERIAL po vlo<6C>en<65> <20><>dku?
|
|
|
|
|
|
|
|
|
|
Jednou z mo<6D>nost<73> je z<>skat budouc<75> hodnotu SERIAL funkc<6B> nextval()
|
|
|
|
|
p<>ed samotn<74>m vlo<6C>en<65>m a pak ji vlo<6C>it explicitn<74>. Nap<61><70>klad v jak<61>msi
|
|
|
|
|
pseudojazyku:
|
|
|
|
|
newid = execute("SELECT nextval('person_id_seq')");
|
|
|
|
|
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
|
|
|
|
|
|
|
|
|
|
M<><4D>ete pak je<6A>t<EFBFBD> pou<6F><75>t hodnotu newid v dal<61><6C>ch dotazech, nap<61>. jako
|
|
|
|
|
hodnotu ciz<69>ho kl<6B><6C>e. N<>zev automaticky vytvo<76>en<65> sekvence je
|
|
|
|
|
tabulka_sloupec_seq.
|
|
|
|
|
|
|
|
|
|
Alternativn<76> m<><6D>ete z<>skat hodnotu posledn<64> generovou sekvenc<6E> funkc<6B>
|
|
|
|
|
currval() po vlo<6C>en<65>:
|
|
|
|
|
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
|
|
|
|
|
new_id = execute("SELECT currval('person_id_seq')");
|
|
|
|
|
|
|
|
|
|
Kone<6E>n<EFBFBD> m<><6D>ete pou<6F><75>t OID hodnotu vr<76>cenou p<><70>kazem INSERT, ale to je
|
|
|
|
|
pravd<76>podobn<62> nejm<6A>n<EFBFBD> p<>enositeln<6C> <20>e<EFBFBD>en<65>. V Perlu p<>i pou<6F>it<69> DBI
|
|
|
|
|
modulu Edmunda Mergleho DBD:Pg oid hodnotu z<>sk<73>me
|
|
|
|
|
$sth->{pg_oid_status} po ka<6B>d<EFBFBD>m $sth->execute().
|
|
|
|
|
|
|
|
|
|
4.15.3) Nepovede currval() a nextval() k rozhozen<65> podm<64>nek p<>i soub<75>hu s
|
|
|
|
|
jin<69>mi u<>ivateli?
|
|
|
|
|
|
|
|
|
|
Nikoliv, currval() vrac<61> hodnotu naposledy generovanou ve va<76>em
|
|
|
|
|
backendu, a ta tud<75><64> nen<65> spole<6C>n<EFBFBD> v<>em u<>ivatel<65>m.
|
|
|
|
|
|
|
|
|
|
4.15.4) Pro<72> nen<65> vygenerovan<61> <20><>slo pou<6F>ito p<>i p<>eru<72>en<65> transakce? Pro<72>
|
|
|
|
|
vznikaj<61> d<>ry v <20><>slov<6F>n<EFBFBD> vlastn<74> sekvenc<6E>/SERIAL sloupce?
|
|
|
|
|
|
|
|
|
|
K zaji<6A>t<EFBFBD>n<EFBFBD> efektivnosti soub<75>hu, jsou hodnoty posloupnosti, kdy<64> se o
|
|
|
|
|
n<> po<70><6F>d<EFBFBD>, a sekvence nen<65> zam<61>ena do ukon<6F>en<65> transakce. To zp<7A>sobuje
|
|
|
|
|
d<>ry v <20><>slov<6F>n<EFBFBD> ze zru<72>en<65>ch transakc<6B>.
|
|
|
|
|
|
|
|
|
|
4.16) Co to je OID? Co je to TID?
|
|
|
|
|
|
|
|
|
|
Ka<4B>d<EFBFBD> <20><>dek vytvo<76>en<65> v PostgreSQL z<>sk<73> jedine<6E>n<EFBFBD> OID. V<>echna OID
|
|
|
|
|
generovan<61> b<>hem inicializace datab<61>ze jsou men<65><6E> ne<6E> 16384
|
|
|
|
|
(include/access/transam.h). V<>echna OID generovan<61> na po<70>adavek
|
|
|
|
|
u<>ivatele jsou rovna nebo vy<76><79><EFBFBD> t<>to hodnot<6F>. Norm<72>ln<6C>, v<>echna OID
|
|
|
|
|
jsou jedine<6E>n<EFBFBD> nejen uvnit<69> tabulky nebo datab<61>ze, ale v r<>mci cel<65>
|
|
|
|
|
instalace PostgreSQL
|
|
|
|
|
|
|
|
|
|
PostgreSQL pou<6F><75>v<EFBFBD> OID ve sv<73>m intern<72>m syst<73>mu tabulek k vytvo<76>en<65>
|
|
|
|
|
relac<61>. Tato OID mohou b<>t pou<6F>ita k identifikaci konkr<6B>tn<74>ho
|
|
|
|
|
u<>ivatele a pou<6F>ita v spojen<65>. Pro OID hodnoty je doporu<72>en typ OID.
|
|
|
|
|
Nad t<>mto sloupcem m<><6D>ete vytvo<76>it index pro urychlen<65> p<><70>stupu.
|
|
|
|
|
|
|
|
|
|
OID jsou d<>na v<>em <20><>dk<64>m z centr<74>ln<6C> oblasti a jsou pou<6F>ita v ka<6B>d<EFBFBD>
|
|
|
|
|
datab<61>zi. Pokud pot<6F>ebujete zm<7A>nit OID, nebo chcete zkop<6F>rovat tabulku
|
|
|
|
|
s p<>vodn<64>mi OID, lze pou<6F><75>t:
|
|
|
|
|
CREATE TABLE new_table(old_oid oid, mycol int);
|
|
|
|
|
SELECT old_oid, mycol INTO new FROM old;
|
|
|
|
|
COPY new TO '/tmp/pgtable';
|
|
|
|
|
DELETE FROM new;
|
|
|
|
|
COPY new WITH OIDS FROM '/tmp/pgtable';
|
|
|
|
|
|
|
|
|
|
OID jsou ulo<6C>ena jako 4bajtov<6F> integer a p<>ete<74>ou po <20>ty<74>ech
|
|
|
|
|
miliard<72>ch. Nebylo hl<68><6C>eno, <20>e by se tak n<>kdy stalo, p<>esto ale
|
|
|
|
|
pl<70>nujeme odstranit tento limit d<><64>v ne<6E> se tak stane.
|
|
|
|
|
|
|
|
|
|
TID se pou<6F><75>vaj<61> i identifikaci fyzick<63>ch <20><>dk<64> s hodnotou bloku a
|
|
|
|
|
offsetu. TIDs se m<>n<EFBFBD> modifikac<61> <20><>dk<64> (pou<6F><75>v<EFBFBD> se jako ukazatel
|
|
|
|
|
indexu fyzick<63>ho <20><>dku).
|
|
|
|
|
|
|
|
|
|
4.17) Jak<61> je v<>znam n<>kter<65>ch v<>raz<61> pou<6F>it<69>ch v PostgreSQL?
|
|
|
|
|
|
|
|
|
|
V n<>kter<65>ch zdrojov<6F>ch k<>dech nebo star<61><72> dokumentaci se m<><6D>ete setkat
|
|
|
|
|
s n<>sleduj<75>c<EFBFBD>mi v<>razy, kter<65> maj<61> <20>ir<69><72> v<>znam. Zde je p<><70>klad
|
|
|
|
|
nekter<65>ch:
|
|
|
|
|
* tabulka, relace, t<><74>da (table, relation, class)
|
|
|
|
|
* <20><>dek, z<>znam, ntice (row, record, tuple)
|
|
|
|
|
* sloupec, polo<6C>ka, atribut (column, field, attribute)
|
|
|
|
|
* vyhled<65>n<EFBFBD>, v<>b<EFBFBD>r (retrieve, select)
|
|
|
|
|
* n<>hrada, <20>prava (replace, update)
|
|
|
|
|
* p<>id<69>n<EFBFBD>, vkl<6B>d<EFBFBD>n<EFBFBD> (append, insert)
|
|
|
|
|
* OID, serial value (OID, serial value)
|
|
|
|
|
* portal, kurzor (portal, cursor)
|
|
|
|
|
* range variable, jm<6A>no tabulky, alias tabulky (range variable,
|
|
|
|
|
table name, table alias)
|
|
|
|
|
|
|
|
|
|
seznam t<>chto v<>raz<61> m<><6D>ete nal<61>zt na
|
|
|
|
|
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
|
|
|
|
|
/glossary.html.
|
|
|
|
|
|
|
|
|
|
4.18) Pro<72> jsem z<>skal chybov<6F> hl<68><6C>en<65> "ERROR: Memory exhausted in
|
|
|
|
|
AllocSetAlloc()"?
|
|
|
|
|
|
|
|
|
|
Pravd<76>podobn<62> do<64>lo k vy<76>erp<72>n<EFBFBD> virtu<74>ln<6C> pam<61><6D>i na Va<56>em syst<73>mu,
|
|
|
|
|
nebo j<>dro m<> n<>zk<7A> limit pro ur<75>it<69> zdroje. Vyzkou<6F>ejte p<>ed startem
|
|
|
|
|
posmatera
|
|
|
|
|
ulimit -d 262144
|
|
|
|
|
limit datasize 256m
|
|
|
|
|
|
|
|
|
|
Z<>le<6C><65> na Va<56>em shellu, zda budou tyto p<><70>kazy <20>sp<73><70>n<EFBFBD>, m<>ly by zv<7A><76>it
|
|
|
|
|
limit datov<6F>ho segmentu pro Va<56>e procesy a umo<6D>nit tak dokon<6F>en<65>
|
|
|
|
|
dotazu. Tyto p<><70>kazy se aplikuj<75> na aktu<74>ln<6C> proces a v<>echny synovsk<73>
|
|
|
|
|
procesy vytvo<76>en<65> po proveden<65> p<><70>kazu. Pokud m<>te probl<62>my s SQL
|
|
|
|
|
klientem proto<74>e backend vrac<61> p<><70>li<6C> mnoho dat, zkuste zv<7A><76>it limity
|
|
|
|
|
p<>ed startem klienta.
|
|
|
|
|
|
|
|
|
|
4.19) Jak se dozv<7A>m, kterou verzi PostgreSQL pou<6F><75>v<EFBFBD>m?
|
|
|
|
|
|
|
|
|
|
V psql spus<75>te SELECT version();
|
|
|
|
|
|
|
|
|
|
4.20) Pro<72> operace s velk<6C>mi objekty kon<6F><6E> "invalid large obj descriptor"?
|
|
|
|
|
|
|
|
|
|
V<>echny operace s velk<6C>mi objekty - lo_open, lo_close, ... mus<75>te
|
|
|
|
|
spou<6F>t<EFBFBD>t v transakci, tj. mezi p<><70>kazy BEGIN WORK a COMMIT.
|
|
|
|
|
|
|
|
|
|
PostgreSQL uvol<6F>uje handle velk<6C>ch objekt<6B> p<>i skon<6F>en<65> transakce.
|
|
|
|
|
Pokud budete pracovat s velk<6C>mi objekty mimo transakci, pravd<76>podobn<62>
|
|
|
|
|
dostanete toto chybov<6F> hl<68><6C>en<65>, proto<74>e handle ji<6A> budou neplatn<74>.
|
|
|
|
|
Pokud pou<6F><75>v<EFBFBD>te interface podobn<62> ODBC mus<75>te nastavit set auto_commit
|
|
|
|
|
off.
|
|
|
|
|
|
|
|
|
|
4.21) Jak vytvo<76>it sloupec obsahuj<75>c<EFBFBD> implicitn<74> aktu<74>ln<6C> datum?
|
|
|
|
|
|
|
|
|
|
Pou<6F>ijte CURRENT_TIMESTAMP:
|
2003-12-14 00:56:00 +08:00
|
|
|
|
|
|
|
|
|
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
|
|
|
|
|
2005-03-12 05:46:54 +08:00
|
|
|
|
4.22) Pro<72> jsou moje vno<6E>en<65> dotazy pou<6F><75>vaj<61>c<EFBFBD> IN tak pomal<61>?
|
|
|
|
|
|
|
|
|
|
D<><44>v<EFBFBD>j<EFBFBD><6A> verze (p<>ed 7.4) spojovali vno<6E>en<65> dotazy k vn<76>j<EFBFBD><6A>m
|
|
|
|
|
sekven<65>n<EFBFBD>m <20>ten<65>m v<>sledku poddotazu pro ka<6B>d<EFBFBD> <20><>dek vn<76>j<EFBFBD><6A>ho dotazu.
|
|
|
|
|
Pokud poddotaz vr<76>til n<>kolik m<>lo <20><>dk<64> IN bylo rychl<68>. Pro ostatn<74>
|
|
|
|
|
p<><70>pady je vhodn<64> nahradit IN EXISTS:
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM tab
|
|
|
|
|
WHERE col IN (SELECT subcol FROM subtab);
|
|
|
|
|
|
|
|
|
|
na:
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM tab
|
|
|
|
|
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
|
|
|
|
|
|
|
|
|
|
Pro urychlen<65> vytvo<76>ete index pro subcol.
|
|
|
|
|
|
|
|
|
|
Ve verzi 7.4 a pozd<7A>j<EFBFBD><6A>ch, IN pou<6F><75>v<EFBFBD> stejn<6A> sofistikovanou techniku
|
|
|
|
|
spojov<6F>n<EFBFBD> tabulek jako ostatn<74> dotazy a je preferovan<61> p<>ed EXISTS.
|
|
|
|
|
|
|
|
|
|
4.23) Jak prov<6F>st vn<76>j<EFBFBD><6A> spojen<65> (outer join)?
|
|
|
|
|
|
|
|
|
|
PostgreSQL podporuje vn<76>j<EFBFBD><6A> spojen<65> tabulek standardn<64>mi SQL p<><70>kazy.
|
|
|
|
|
Zde jsou dva p<><70>klady:
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
|
|
|
|
|
|
|
|
|
|
nebo
|
|
|
|
|
SELECT *
|
|
|
|
|
FROM t1 LEFT OUTER JOIN USING (col);
|
|
|
|
|
|
|
|
|
|
Tyto identick<63> dotazy napoj<6F> t1.col na t2.col a je<6A>t<EFBFBD> p<>id<69>
|
|
|
|
|
nep<65>ipojen<65> <20><>dky z t1 (kter<65> nemaj<61> obdoby v t2). Prav<61> spojen<65>
|
|
|
|
|
(RIGHT JOIN) p<>id<69> nep<65>ipojen<65> <20><>dky z t2. FULL JOIN vr<76>t<EFBFBD> v<>echny
|
|
|
|
|
<20><>dky, v<>etn<74> nep<65>ipojen<65>ch z tbulek t1 a t2. Kl<4B><6C>ov<6F> slovo OUTER je
|
|
|
|
|
nepovinn<6E> a v<><76>e se na LEFT, RIGHT a FULL join. B<><42>n<EFBFBD> spojen<65> se
|
|
|
|
|
naz<61>v<EFBFBD> INNER JOIN.
|
|
|
|
|
|
|
|
|
|
V d<><64>v<EFBFBD>j<EFBFBD><6A>ch verz<72>ch se vn<76>j<EFBFBD><6A> spojen<65> tabulek mohlo simulovat pomoc<6F>
|
|
|
|
|
UNION a NOT IN. Nap<61><70>klad pro spojen<65> tabulek tab1 a tab2, je
|
|
|
|
|
n<>sleduj<75>c<EFBFBD> dotaz ekvivalentn<74> k vn<76>j<EFBFBD><6A>mu spojen<65> dvou tabulek:
|
|
|
|
|
SELECT tab1.col2, tab2.col2
|
|
|
|
|
FROM tab1, tab2
|
|
|
|
|
WHERE tab1.col1 = tab2.col1
|
|
|
|
|
UNION ALL
|
|
|
|
|
SELECT tab1.col2, NULL
|
|
|
|
|
FROM tab1
|
|
|
|
|
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
|
|
|
|
|
ORDER BY col1;
|
|
|
|
|
|
|
|
|
|
4.24) Jak prov<6F>st dotaz z v<>ce datab<61>z<EFBFBD>?
|
|
|
|
|
|
|
|
|
|
PostgreSQL nepodporuje dotazy do jin<69> ne<6E> aktu<74>ln<6C> datab<61>ze.
|
|
|
|
|
|
|
|
|
|
contrib/dblink nab<61>z<EFBFBD> funkce umo<6D><6F>uj<75>c<EFBFBD> proveden<65> dotazu v jin<69>
|
|
|
|
|
datab<61>zi. Klient si m<><6D>e otev<65><76>t simult<6C>ln<6C> p<>ipojen<65> do r<>zn<7A>ch db
|
|
|
|
|
bez omezen<65>.
|
|
|
|
|
|
|
|
|
|
4.25) M<><4D>e funkce vr<76>tit v<>ce <20><>dk<64> nebo sloupc<70>?
|
|
|
|
|
|
|
|
|
|
V PostgreSQL 7.3 m<><6D>ete jednodu<64>e vracet v<>ce <20><>dk<64> nebo sloupc<70> z
|
|
|
|
|
funkce, viz:
|
|
|
|
|
http://techdocs.postgresql.org/guides/SetReturningFunctions.
|
|
|
|
|
|
|
|
|
|
4.26) Pro<72> nelze spolehliv<69> vytv<74><76>et a ru<72>it do<64>asn<73> tabulky v PL/pgSQL
|
|
|
|
|
funkc<6B>ch?
|
|
|
|
|
|
|
|
|
|
P<>elo<6C>en<65> k<>d PL/pgSQL funkce je ulo<6C>en ve vyrovn<76>vac<61> pam<61>ti, tj.
|
|
|
|
|
funkce je p<>ekl<6B>d<EFBFBD>na pouze p<>i zm<7A>n<EFBFBD> k<>du, nikoliv p<>ed ka<6B>d<EFBFBD>m vol<6F>n<EFBFBD>m
|
|
|
|
|
funkce. Necht<68>n<EFBFBD>m vedlej<65><6A>m efektem je, <20>e vol<6F>n<EFBFBD> funkce sel<65>e, kdy<64>
|
|
|
|
|
se funkce odkazuje na do<64>asnou tabulku, pokud tato tabulka byla od
|
|
|
|
|
p<>ekladu funkce zru<72>ena (a<>koliv ji<6A> byla znovu vytvo<76>ena a existuje).
|
|
|
|
|
Jedin<69>m <20>e<EFBFBD>en<65>m probl<62>mu je p<><70>stup k do<64>asn<73> tabulce pomoc<6F> EXECUTE,
|
|
|
|
|
tj. dynamick<63> prov<6F>d<EFBFBD>n<EFBFBD> dotazu. Tento p<><70>kaz zajist<73> opakovan<61> p<>eklad
|
|
|
|
|
dotazu p<>i ka<6B>d<EFBFBD>m vol<6F>n<EFBFBD> funkce.
|
|
|
|
|
|
|
|
|
|
4.27) Jak<61> jsou mo<6D>nosti replikace datab<61>z<EFBFBD>?
|
|
|
|
|
|
|
|
|
|
Existuje n<>kolik dostupn<70>ch <20>e<EFBFBD>en<65> master/slave replikac<61>, tj umo<6D><6F>uj<75>
|
|
|
|
|
modifikace master datab<61>ze a slave datab<61>z<EFBFBD>m umo<6D><6F>uj<75> pouze <20>ten<65>. Na
|
|
|
|
|
konci http://gborg.PostgreSQL.org/genpage?replication_research najdete
|
|
|
|
|
jejich seznam. Na <20>e<EFBFBD>en<65> multi-master replikaci se pracuje na
|
|
|
|
|
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
|
|
|
|
|
|
|
|
|
|
4.28) Jak<61> jsou mo<6D>nosti <20>ifrov<6F>n<EFBFBD> datab<61>z<EFBFBD>?
|
|
|
|
|
|
|
|
|
|
* contrib/pgcrypto obsahuje <20>ifrovac<61> funkce pou<6F>iteln<6C> v SQL
|
|
|
|
|
dotazech.
|
|
|
|
|
* K <20>ifrov<6F>n<EFBFBD> p<>enosu dat z klienta na server, mus<75> b<>t server
|
|
|
|
|
p<>elo<6C>en s podporou ssl a p<>ep<65>na<6E> ssl v postgresql.conf mus<75> b<>t
|
|
|
|
|
nastaven na hodnotu true. Klient mus<75> m<>t vytvo<76>en z<>znam hostssl
|
|
|
|
|
v pg_hba.conf a tak<61> m<>t povolen re<72>im ssl. Lze pou<6F><75>t i jin<69>
|
|
|
|
|
prost<73>edky, nejen nativn<76> podporu ssl v PostgreSQL, nap<61>. stunel a
|
|
|
|
|
ssh.
|
|
|
|
|
* Hesla u<>ivatel<65> datab<61>ze jsou za<7A>ifrov<6F>na po<70><6F>naje verz<72> 7.3. Ve
|
|
|
|
|
star<61><72>ch verz<72>ch toto chov<6F>n<EFBFBD> muselo b<>t vynuceno volbou
|
|
|
|
|
PASSWORD_ENCRYPTION v postgresql.conf
|
|
|
|
|
* Server m<><6D>e b<><62>et na <20>ifrovan<61>m souborov<6F>m syst<73>mu.
|
|
|
|
|
_________________________________________________________________
|
|
|
|
|
|
|
|
|
|
Roz<6F>i<EFBFBD>ov<6F>n<EFBFBD> PostgreSQL
|
|
|
|
|
|
|
|
|
|
5.1) Napsal jsem UDF funkci, PostgreSQL v<>ak kon<6F><6E> dump core?
|
|
|
|
|
|
|
|
|
|
Probl<62>m m<><6D>e b<>t zp<7A>soben mnoha okolnostmi. Vyzkou<6F>ejte si svoji
|
|
|
|
|
funkci nejd<6A><64>ve v n<>jak<61> jednoduch<63> aplikaci.
|
|
|
|
|
|
|
|
|
|
5.2) Jak mohu p<>isp<73>t n<>jak<61>mi <20>ikovn<76>mi datov<6F>mi typy a funkcemi do
|
|
|
|
|
PostgreSQL?
|
|
|
|
|
|
|
|
|
|
Po<50>lete sv<73> roz<6F><7A><EFBFBD>en<65> do konference pgsql-hackers, a ono pak mo<6D>n<EFBFBD>
|
|
|
|
|
skon<6F><6E> v podadres<65><73>i contrib.
|
|
|
|
|
|
|
|
|
|
5.3) Jak napsat funkci v C vracej<65>c<EFBFBD> ntici?
|
|
|
|
|
|
|
|
|
|
Funkce vracej<65>c<EFBFBD> tabulky jsou podporovan<61> PostgreSQL 7.3 a vy<76><79><EFBFBD> pro
|
|
|
|
|
jazyky C, PL/PgSQL a SQL. V<>ce naleznete v The Programmer's Guide.
|
|
|
|
|
P<><50>klady t<>chto funkc<6B> pro C naleznete v contrib/tablefunc.
|
|
|
|
|
|
|
|
|
|
5.4) Modifikoval jsem zdrojov<6F> soubory. Tato zm<7A>na nebyla p<>i rekompilaci
|
|
|
|
|
vzata v potaz. Pro<72>?
|
|
|
|
|
|
|
|
|
|
Makefile nem<65> informace o z<>vislostech mezi hlavi<76>kov<6F>mi soubory.
|
|
|
|
|
Mus<75>te prov<6F>st make clean a pak make. Pokud pou<6F><75>v<EFBFBD>te gcc, m<><6D>ete
|
|
|
|
|
pou<6F><75>t p<>ep<65>na<6E> --enable-depend p<><70>kazu configure k automatick<63>mu
|
|
|
|
|
<20>e<EFBFBD>en<65> z<>vislost<73> p<>eklada<64>em.
|