Commit 9878fe2a authored by Bruce Momjian's avatar Bruce Momjian

Add Czech language FAQ's

Pavel Stehule
parent 2afacfc4
asto kladen dotazy (FAQ) PostgreSQL
=====================================
Obecn otzky
=============
1.1 Co je PostgreSQL? Jak se vyslovuje?
1.2 Jak je licence na PostgreSQL?
1.3 Na kterch Unixex lze spustit PostgreSQL?
1.4 Kter ne-unixov platformy jsou podporovan?
1.5 Kde mohu zskat PostgreSQL?
1.6 Kde mohu zskat podporu?
1.7 Kde je posledn verze?
1.8 Jak je dostupn dokumentace?
1.9 Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
1.10 Jak se mohu nauit SQL?
1.11 Nem PostgreSQL problmy s rokem 2000?
1.12 Jak se pipojit k vvojskmu tmu?
1.13 Kam podat report o chyb?
1.14 Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
1.15 Jak lze finann pomoci PostgreSQL?
User client dotazy
==================
2.1 Kde naleznu ODBC ovladae pro PostgreSQL?
2.2 Jak nstroje lze pout pro PostgreSQL a web?
2.3 Existuje grafick rozhran pro PostgreSQL?
2.4 Kter programovac jazyky maj podporu pro PostgreSQL?
Administrativn dotazy
======================
3.1 Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
3.2 Pi startu postmaster, dostanu chybov hlen Bad System Call nebo
core dump. Pro? 3.3 Pi startu postmastera dostanu hlen o chyb
IpcMemoryCreate. Pro? 3.4 Pi startu postmastera dostanu hlen o
chyb IpcSemaphoreCreate. Pro? 3.5 Jak povolit nebo zakzat pstup z
jinch stanic? 3.6 Jak ladit databzov stroj na lep vkon?
3.7 Jak jsou monosti ladn?
3.8 Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
3.9 K emu slou adres pgsql_tmp?
3.10 Pro je poadovno dump a obnoven (load) databze bhem upgrade
mezi velkmi verzemi PostgreSQL?
Provozn dotazy
===============
4.1 m se li binrn a normln kurzor?
4.2 Jak zskat pouze prvn dek dotazu? Nhodn dek?
4.3 Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
4.4 Jak odstranm sloupec tabulky, jak zmnm jeho typ?
4.5 Jak je maximln velikost dku, tabulky a databze?
4.6 Kolik diskovho prostoru je poteba k uloen dat z normlnho
textovho souboru? 4.7 Jak zskm seznam vytvoench tabulek, index,
databz? 4.8 Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
4.9 Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
4.10 Co to je R-tree index?
4.11 Co je Genetic Query Optimizer?
4.12 Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn? 4.13 Jak
v dotazu detekovat, e poloka je NULL? 4.14 Jak jsou rozdly mezi
rznmi znakovmi typy? 4.15.1 Jak vytvoit serial/auto-increment pole?
4.15.2 Jak zskat hodnotu SERIAL po vloen dku?
4.15.3 Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s
jinmi uivateli? 4.15.4 Pro nen vygenerovan slo pouito pi
peruen transakce? Pro vznikaj dry v slovn vlastn
sekvenc/SERIAL sloupce? 4.16 Co to je OID? Co je to TID?
4.17 Jak je vznam nkterch vraz pouitch v PostgreSQL?
4.18 Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
AllocSetAlloc()"? 4.19 Jak se dozvm, kterou verzi PostgreSQL pouvm?
4.20 Pro operace s velkmi objekty kon "invalid large obj
descriptor"? 4.21 Jak vytvoit sloupec obsahujc implicitn aktuln
datum? 4.22 Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
4.23 Jak provst vnj spojen (outer join)?
4.24 Jak provst dotaz nap nkolika databzemi?
4.25 Me funkce vrtit vce dk nebo sloupc?
4.26 Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL
funkcch? 4.27 Jak jsou monosti replikace databz?
4.28 Jak jsou monosti ifrovn databz?
Roziovn PostgreSQL
======================
5.1 Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
5.2 Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
PostgreSQL? 5.3 Jak napsat funkci v C vracejc ntici?
5.4 Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci
vzata v potaz. Pro?
------------------------------------------------------------------------
Obecn otzky
=============
1.1 Co je PostgreSQL? Jak se vyslovuje?
---------------------------------------
PostgreSQL se vyslovuje Post-Gres-Q-L.
PostgreSQL vychz z databze POSTGRES - vzkumnho prototypu DBMS nov
generace. Z postgresu byl pevzat siln datov model a bohat soubor
datovch typ a jeho dotazovac jazyk PostQuel byl nahrazen rozenou
podmnoinou jazyka SQL. PostgreSQL lze pouvat bez omezen a jeho
zdrojov kdy jsou voln k dispozici.
PostgreSQL vyvj tm vvoj pihlench do vvojsk konference
PostgreSQL. Souasnm koordintorem je Marc G. Fournier. (Odpov 1.6. -
jak se zapojit). Tento tm je zodpovdn za veker vvoj PostgreSQL.
Autory prvn verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
portace, testovn, ladn a roziovn kdu se zapojilo mnoho dalch
vvoj . Pvodni kd Postgresu, ze kterho PostgreSQL vychz, je
vsledkem sil mnoha student a programtor pracujcch pod vedenm
prof. Michaela Stonebrakera na University of California v Berkley.
Pvodn nzev software z Berkley byl Postgres. Po pidn jazyka SQL se
nzev zmnil na Postgres95. Koncem roku 1996 byl RDBMS pejmenovn na
PostgreSQL.
1.2 Jak je licence na PostgreSQL?
----------------------------------
PostgreSQL je pedmtem nsledujcch autorskch prv:
Dl copyright (c) 1996-2002, PostgreSQL Global Development Group
Dl copyright (c) 1994-6, Regents of the University of California
Udluje se oprvnn k uit, rozmnoovn, provdn prav a
roziovn tohoto softwaru a dokumentace k nmu, pro jakkoli ely,
bez licennho poplatku a bez psemn licenn smlouvy, za podmnky, e
na vech jeho kopich je uvedeno oznmen o ve uvedench prvech,
jako i obsah tohoto a dvou nsledujcch odstavc.
THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V DNM
PPAD ODPOVDNA DN TET OSOB ZA PMOU, NEPMOU, ZVLTN,
NAHODILOU NEBO VSLEDNOU KODU, VETN ULHO ZISKU, ZPSOBENOU UITM
TOHOTO SOFTWARU A DOKUMENTACE K NMU, A TO I V PPAD, E THE
UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MONOSTI VZNIKU TAKOV
KODY.
THE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE SPECIFICKM
ELM. NͮE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A LE" A THE
UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO DRBU, PODPORU,
AKTUALIZACI, VYLEPEN NEBO MODIFIKACI.
Ve uveden je BSD licence, bn licence otevenho zdroje. Nen zde
dn omezen ohledn uit kdu zdroje. Jsme s tm spokojeni a nemme v
myslu na tto skutenosti cokoli mnit.
1.3 Na kterch Unixex lze spustit PostgreSQL?
---------------------------------------------
PostgreSQL b na vech modernch unixovch platformch. V instalanch
instrukcch naleznete aktuln seznam vech platforem na kterch byla
testovnm ovena funkcionalita PostgreSQL.
1.4 Kter ne-unixov platformy jsou podporovan?
------------------------------------------------
Klient
------
Knihovna libpq, psql a nkter dal moduly byly peloeny pro MS
Windows. Klienta lze provozovat na MS Windows, ten prostednictvm
TCP/IP protokolu komunikuje se serverem bcm na nkter z
podporovanch Unixovch platforem. K pekladu lze pout win32.mak a
Win32 knihovny libpq a psql. K databzi PostgerSQL lze pistupovat skrze
rozhran ODBC.
Server
------
Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou
Cygwin, Cygnus Unix/NT porting library. Na nativnm portu pro MS Win
NT/2000/XP se pracuje. Existujc port pro Novell Netware 6 naleznete na
http://forge.novell.com.
1.5 Kde mohu zskat PostgreSQL?
-------------------------------
Primrnm anonymnm ftp serverem pro PostgreSQL je
ftp://ftp.PostgreSQL.org/pub . Seznam zrcadel naleznete na naich
webovch strnkch.
1.6 Kde mohu zskat podporu?
----------------------------
Hlavnm mailov konference je pgsql-general@PostgreSQL.org. Slou k
diskuzm ohledn PostgreSQL. Pihlste se zaslnm mailu obsahujc
nsledujc dky v tle dopisu (nikoliv v zhlav - subjectu)
subscribe
end
na adresu mailto:pgsql-general-request@PostgreSQL.org.
Mete si vydat denn pehled (diggest), kter m zhruba 30K denn
zprv.
Konference psql-bugs je urena k zasln zprv o chybch. Pro
pihlen polete mail se stejnm obsahem jako v pedchozm ppad na
adresu mailto:pgsql-bugs-request@PostgreSQL.org.
Do vvojsk konference se pihlste odeslnm dopisu s ji zmiovanm
obsahem na mailto:pgsql-hackers-request@PostgreSQL.org.
Seznam dalch konferenc naleznete na strnkch PostgreSQL
http://www.postgresql.org
1.7 Kde je posledn verze?
--------------------------
Posledn verz je PostgreSQL 7.4.. Plnujeme uvolnit velkou verzi
kadch est a osm msc.
1.8 Jak je dostupn dokumentace?
---------------------------------
Rzn manuly, manulov strnky a nkolik malch testovacch pklad
jsou sousti distribuce. Podvejte se do adrese /doc. Manuly jsou
pstupn online na http://www.PostgreSQL.org/docs.
Na adresch http://www.PostgreSQL.org/docs/awbook.html a
http://www.commandprompt.com/ppbook/ naleznezte dv online knihy o
PostgreSQL. Seznam dostupn literatury je na
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor
technickch lnk s tematikou PostgresQL najdete na
http://techdocs.PostgreSQL.org/.
psql m uiten metapkaz \d slouc k zobrazen informac o typech,
opertorech, funkc, agreganch funkc atd.
Vce dokumentace naleznete na naich webovch strnkch.
1.9 Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
------------------------------------------------------------------
PostgreSQL podporuje rozenou podmnoinu SQL-92. V naem TODO [1]
najdete seznam znmch chyb, chybjcch vlastnost a seznam vlastnost,
kter budou do systmu implementovny v budoucnu (vetn priorit).
1.10 Jak se mohu nauit SQL?
----------------------------
V knize The PostgreSQL book na
http://www.PostgreSQL.org/docs/awbook.html je vysvtlen jazyk SQL (vyla
esky). Dal dostupnou knihou je http://www.commandprompt.com/ppbook.
Kvalitn nvody naleznete na
http://www.intermedia.net/support/sql/sqltut.shtm, na
http://www.intermedia.net/support/sql/sqltut.shtm [2] , a na
http://sqlcourse.com.
Dal je Teach Yourself SQL in 21 days, Second Edition na
http://members.tripod.com/er4ebus/sql/index.htm.
Mnoho uivatel doporuuje The Practical SQL Handbook, Bowman, Judith
S., et al., Addison-Wesley. Jin preferuj The Complete Reference SQL,
Groff et al., McGraw-Hill.
1.11 Nem PostgreSQL problmy s rokem 2000?
-------------------------------------------
Nem, meme pracovat s datumy po roce 2000 naeho letopotu i ped
rokem 2000 p.n.l.
1.12 Jak se pipojit k vvojskmu tmu?
-----------------------------------------
Nejdve si sthnte nejnovj zdroje a pette si vvojskou
dokumentaci na naem webu nebo v distribuci. Pak se pihlate do
konferenc pgsql-hackers a pgsql-patches. Kvalitn zplaty poslejte do
pgsql-patches.
Prvo commit m v cvs archivu asi tincti lid. Kad z nich poslal
mnoho kvalitnch zplat, take tehdej commiters mli jistotu, e budou
pedkldat jenom kvalitn zplaty a mohli jim pedlit vt prva.
1.13 Kam podat report o chyb?
------------------------------
Navtivte nai PostgreSQL BugTool strnku na
http://www.PostgreSQL.org/bugs/bugs.php, kter obsahuje nvod a smrnice
jak podat chybov report.
Ovte si na naem ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li mte
nejnovj verzi PostgreSQL a zda-li k n neexistuj njak zplaty.
1.14 Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
--------------------------------------------------------------
Existuje nkolik hledisek jak porovnvat software: vlastnosti, vkon,
spolehlivost, podpora a cena.
Vlastnosti
----------
PostgreSQL m hodn spolench vlastnost s velkmi komernmi DBMS,
nap. transakce, vnoen dotazy, spout, pohledy, kontrolu referenn
integrity a sofistikovan zamykn. Podporuje nkter vlastnosti, kter
tyto systmy nemaj, uivatelem definovan typy, ddinost, pravidla,
MVCC redukujc zamykn.
Vkon
-----
Vkonnostn je na tom PostgreSQL podobn jako dal komern ale i open
source databze, v nem je rychlej, jindy pomalej. V porovnn s
MySQL a podobnmi databzovmi systmy je PostgreSQL rychlej pi
vceuivatelskm pstupu, sloitjch dotazech a zaten read/write
dotazy. MySQL je rychlej v jednoduch dotazech s malm potem
uivatel. Navc, MySQL nepodporuje mnoh vlatnosti zmnn v sekci
vlastnosti. Zapracovali jsme na spolehlivosti a podporovanch
vlastnostech, a vkon zvyujeme v kad verzi. Zajmavou strnku
porovnvajc PostgreSQL a MySQL naleznete na
http://openacs.org/philosophy/why-not-mysql.html. Za vvojem MySQL nen
Open Source komunita, ale komern spolenost, pestoe svoje produkty
distribuuje jako Open Source.
Spolehlivost
------------
Jsme si vdomi, e databze mus bt spolehliv, jinak je nepouiteln.
Sname se zveejovat dobe otestovan, stabiln kd s minimem chyb.
Kad verze je vce ne msc v beta testovn, a nae historie verz
ukazuje, e meme nabdnout stabiln, solidn verze, kter jsou
pipraveny pro reln nasazen. V tto oblasti jsme srovnateln s
dalmi databzemi.
Podpora
-------
Na na mailov konferenci mete kontaktovat velkou skupinu vvoj a
uivatel.problm. Nememe garantovat opravu, nicmn komern
databze tak ne vdy nabdnou opravu. Podle ohlas je nae podpora
hodnocena lpe ne u jinch DBMS a to dky pmmu kontaktu s vvoji,
velkou komunitou uivatel, kvalitnmi manuly a pstupnm zdrojovm
kdem. Pro uivatele, kte vyaduj podporu ke konkrtnm ppadm,
existuje placen podpora (FAQ sekce 1.6).
Cena
----
PosgreSQL lze voln pouvat pro nekomern i komern pouit. Mete
do svch produkt pidat n kd bez omezen, respektive v souladu s
podmnkami na licenn smlouvy (v duchu BSD licence).
1.15 Jak lze finann pomoci PostgreSQL?
----------------------------------------
PosgreSQL m prvotdn infrastrukturu od naeho zatku v roce 1996.
Vdme za to Marku Fournierovi, kter zaloil a spravoval tuto
infrastrukturu nkolik let.
Kvalitn infrastruktura je velice dleit pro kad open source
projekt. Pedchz nedorozumnm, kter velice zdruj pokrok v
projektu.
Tato infrastruktura nen lacin. K jejmu zajitn je teba stle
hradit urit msn a jednorzov stky. Pokud mte Vy nebo Vae
spolenost penze, kter nm mete darovat, obrae se na
http://store.pgsql.com/shopping/ a darujte je.
Akoliv webov strnka zmiuje PostgreSQL, Inc. vklady jsou ureny pouze
k podpoe projektu PostgreSQL a nepodporuj dnou existujc
spolenost. Pokud to vyadujete, mete poslat kontrolu na nai
kontaktn adresu.
Pokud mte pklad spnho nasazen PostgreSQL, pihlat se na n
advocacy site na http://advocacy.postgresql.org.
------------------------------------------------------------------------
User client dotazy
==================
2.1 Kde naleznu ODBC ovladae pro PostgreSQL?
---------------------------------------------
Pro PostgreSQL existuj dva ODBC ovladae - PsqlODBC a OpenLink ODBC.
PsqlODBC je ke staen na
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
OpenLink mete zskat na http://www.openlinksw.com. Spolupracuje s
jejich klientskm programovm vybavenm a je dostupn pro vechny jimi
podporovan platformy (Win, Mac, Unix, VMS).
Tento ovlada je uren pro ty, kte vyaduj podporu komern kvality,
nicmn freeware verze je dostupn a funkn. Dotazy zaslejte na
postgres95@openlink.co.uk.
2.2 Jak nstroje lze pout pro PostgreSQL a web?
--------------------------------------------------
Pkn vod do databzovch technologi zabezpeujcch chod webovch
strnek najdete na http://www.webreview.com.
Pro tvorbu webu existuje excelentn rozhran PHP, kter naleznete na
http://www.php.net.
Pro sloitj ppady se asto pouv Perl a CGI.pm nebo mod_perl.
2.3 Existuje grafick rozhran pro PostgreSQL?
----------------------------------------------
Pro PostgreSQL existuje nkolik grafickch rozhran: PgAccess
(http://www.php.net), PgAdmin (http://www.php.net), RHDB Admin
(http://sources.redhat.com/rhdb/) a Rekall (
http://www.thekompany.com/products/rekall/). Dle existuje PHPPgAdmin
(http://phppgadmin.sourceforge.net/) rozhran PostgreSQL zaloen na web
technologii.
plnj seznam najdete na
http://techdocs.postgresql.org/guides/GUITools.
2.4 Kter programovac jazyky maj podporu pro PostgreSQL?
----------------------------------------------------------
Vtina programovacch jazyk obsahuje rozhran pro PostgreSQL.
Podvejte se do roziujcch modul Vaeho programovacho jazyka.
Distribuce PostgreSQL obsahuje tato rozhran:
- C (libpq)
- Embbedded C (ecpg)
- Java (jdbc)
- Python (PyGreSQL)
- TCL (libpgtcl)
Dal rozhran jsou dostupn na http://gborg.postgresql.org v sekci
Drivers/Interfaces.
------------------------------------------------------------------------
Administrativn dotazy
======================
3.1 Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
--------------------------------------------------------------
Pouijte volbu --prefix pi sputn configure
3.2 Pi startu postmaster, dostanu chybov hlen Bad System Call nebo core dump. Pro?
----------------------------------------------------------------------------------------
Dvody mohou bt rzn, ale nejprve zkontrolujte, zda V systm
podporuje System V extensions. PostgreSQL vyaduje v jde podporu
sdlen pamti a semafor.
3.3 Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate. Pro?
-------------------------------------------------------------------------
Buto nemte sprvn nakonfigurovanou sdlenou pam v jde nebo musite
zvtit jej velikost. Potebn velikost je zvisl na architektue a na
tom, kolik pamovch buffer a backend mte povoleno pro postmastera.
Pro vtinu systm s peddefinovanm potem backend a pamovch
buffer je minimum zhruba 1MB. V
http://www.postgresql.org/docs/view.php?version=current&idoc=1&file=kern
el-resources.html [3] naleznete podrobnj informace o sdlen pamti a
semaforech.
3.4 Pi startu postmastera dostanu hlen o chyb IpcSemaphoreCreate. Pro?
----------------------------------------------------------------------------
Pokud dostane chybovou zprvu IpcSemaphoreCreate: semget failed (No
space left on device), pak vae jdro nem dost volnch semafor.
PostgreSQL vyaduje jeden semafor pro kad backend v pozad. Doasnm
eenm je start postmastera s limitem backend. Pouijte pepna -N s
hodnotou men ne 32. plnm eenm je zven hodnot SEMMNS a SEMMNI
jadra.
Nefunkn semafory mohou zpsobit pd bhem intenzivnch databzovch
operac.
Pokud se tato chyba vyskytuje jet nkde jinde, mon nemte vbec
nakonfigurovny semafory ve vaem jde. V PostgreSQL Administrator's
Guide najdete podrobnj popis poadavk na sdlenou pamt a semafory.
3.5 Jak povolit nebo zakzat pstup z jinch stanic?
-----------------------------------------------------
Pi vchozm nastaven PostgreSQL odepe pstup z jinch stanic ne
lokln s pouitm UDP. Databze se zpstupn jinm stanicm nastavenm
pepnae -i postmastera a povolenm stanice a urenm reimu
autentifikace v $PGDATA/pg_hba.conf. Tm se povol TCP/IP spojen.
ZASTARAL
3.6 Jak ladit databzov stroj na lep vkon?
----------------------------------------------
Urit pomohou indexy. Pkaz EXPLAIN zobraz zpsob interpretace Vaeho
dotazu a pouit index.
Pi vt dvce INSERT uvaujte o nhrad pkazem COPY. Ten je mnohem
rychlej neli samotn INSERT. Kad pkaz mimo blok BEGIN WORK/COMMIT
se provd ve vlastn transakci. Zvate, zda-li by se nedalo nkolik
pkaz spojit do jedn transakce. Tm se sn reie na transakce. Ped
provedenm rozshlch zmn zrute indexy, kter po dokonen zmn opt
vytvote.
Mte nkolik dalch monost, jak zlepit vkon. Mete zakzat fsyn()
pi startu postmastera pepnai -o -F. Tyto pepnae zabrn fsync(),
tj. zpisu na disk po kad transakci.
Mete zvit velikost pamovch buffer pouitch backendy tj.
parametr -B postmasteru. Pokud ale tato hodnota bude pli velk, tak
mon nespustte postmastera jeliko doshnete limitu sdlen pamti.
Kad buffer m 8K a implicitn je 64 buffer.
Dle mete pout pepna -S k zven limitu pamti pro backendy na
doasn tdn. Hodnota je mnna v kilobytech a vchoz nastaven je
512, tj. 512K.
Mete pout pkaz CLUSTER, kter uspod fyzicky data v tabulkch
podle indexu. Vce na manulovch strnkch pkazu CLUSTER.
3.7 Jak jsou monosti ladn?
------------------------------
Mte nkolik monost jak se dostat k uitenm stavovm informacm.
Zaprv, pi pekladu pouijte pepna --enable-cassert, tm se zapne
monitorovn a nsledn zastaven aplikace, kdy se proces v backendu
dostane do neoekvanho stavu.
Jak postmaster tak postgres m nkolik pepna umoujcch ladn.
Postmaster nastartujte tak, abyste si byli jisti, e je standartn
vstup a standartn chybov vstup pesmrovn do souboru logu,
napklad:
cd /usr/local/pgsql
./bin/postmaster > server.log 2>&1 &
Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje uiten
informace o problmech a chybch vyskytlch se na serveru. Postmaster m
pepna -d urujc, jak podrobn maj bt reportovan informace, tj.
debug level. Pozor, pi velk hodnot debug levelu rychle roste velikost
souboru logu.
Pokud neb postmaster, mete spustit backend PostgreSQL z pkazov
dky a napsat svj SQL dotaz pmo v backendu (doporueno pouze pro
ladn). Dotaz je v tomto ppad ukonen novou dkou, nikoliv
stednkem. Pokud mte aplikaci peloenou s ladcmi symboly, mete
pout debbuger k monitorovn procesu. Pokud nen backend sputn
postmasterem, pak neb ve svm obvyklm prosted a tud nkter
problmy dan interakc mezi backendy nemohou bt nasimulovny.
Pokud b postmaster, spuse psql v jednom okn a pak si zjistte PID
procesu postgres pouitho psql. V debuggeru sepipojte k postgresql
PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql. Pokud
ladte startup postgresu, pak nastavte PGOPTIONS="-W n" a spuse psql.
Tento pepna zpsob pauzu n sekund, take budete mt as se pipojit
k procesu, a nastavit breakpointy a pokraovat v startup posloupnosti.
Pro ladn a men vkonu mohou bt uiten pepnae -s, -A a -t
programu postgres (backend).
Mete provst peklad s profilac, tak abyste vidli kolik asu
zabraj jednotliv funkce. Soubory s profily backend jsou uloeny v
adresi pgsql/data/base/dbname. Profil klienta pak v jeho aktulnm
adresi. Korektn profilace v prosted Linux poaduje konfiguraci
systmu s parametrem -DLINUX_PROFILE.
3.8 Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
---------------------------------------------------------------------
Zvyte limit postmastera na maximln poet souasn sputnch
backend.
Vchoz hodnota je 32 backend. Tuto hodnotu zvte zastavenm a
optovnm sputnm postmastera s parametrem -N nebo pravou
postgresql.conf.
Pi zven hodnoty -N nad 32 muste zvit hodnotu -B nad vchoz 64,
-B mus bt minimln dvakrt vt, nebo jet lpe vce. Pravdpodobn
zjistte, e pro velk poet proces backendu je nutn zvit nkter
parametry jdra. Jsou to pedevm maximln velikost sdlen pamti
SHMMAX, maximln poet semafr SEMMNS a SEMMNI, maximln poet
proces NPROC, maximln poet proces uivatele MAXUPRC a maximln
poet otevench soubor NFILE a NINODE. Dvod pro omezen maximlnho
potu backend je fakt, e by mohlo dojt k vyerpn zdroj Vaeho
systmu.
3.9 K emu slou adres pgsql_tmp?
------------------------------------
Tento adres obsahuje doasn soubory vytvoen exekutorem dotaz.
Napklad, kdy je nutn tdn k zajitn ORDER BY a tdn m vt
nroky na prostor ne povoluje parametr -S backendu, pak je vytvoen
doasn soubor k uloen extra daj.
Doasn soubory jsou obvykle mazny automaticky, ale me se stt, e
bhem tdn server spadne. Zastaven a dal start postmastera zajist
odstrann soubor s tchto adres.
3.10 Pro je poadovno dump a obnoven (load) databze bhem upgrade mezi velkmi verzemi PostgreSQL?
------------------------------------------------------------------------------------------------------
PostgreSQL se minimln mn bhem malch verz, take nap. pi upgrade
z 7.2 na 7.2.1 nen nutn dump a load databze. Ale velk verze asto
mn intern formt systmovch tabulek a datovch soubor. Tyto zmny
jsou natolik rozshl, e nelze zajistit zptnou kompatibilitu pro
datov soubory. Dump ulo data v obecnm formtu, take mohou bt
natena a pouvna v novm internm formtu.
------------------------------------------------------------------------
Provozn dotazy
===============
4.1 m se li binrn a normln kurzor?
------------------------------------------
Popis najdete v manulov strnce DECLARE
4.2 Jak zskat pouze prvn dek dotazu? Nhodn dek?
-------------------------------------------------------
Podvejte se do man. strnky pkazu FETCH, nebo pouijte SELECT ...
LIMIT ...
Nen nutn zpracovvat cel dotaz, kdy potebujete pouze nkolik
prvnch dk. Pokud existuje index ORDER BY, PostgreSQL je schopen
peruit zpracovn dotazu po zskn poadovanho potu dk.
K zskn nhodnho dku pouijte:
SELECT col FROM tab
ORDER BY random() LIMIT 1;
4.3 Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
------------------------------------------------------------
Podvejte se do zdrojovch kd psql do souboru
pgsql/src/bin/psql/describe.c. Ten obsahuje SQL pkazy, kter se
pouvaj v psql metapkazech. Dle mete spustit psql s pepnaem
-E, kter zpsob zobrazen kadho dotazu, kter zpracovn metapkazu
vyvol.
4.4 Jak odstranm sloupec tabulky, jak zmnm jeho typ?
-------------------------------------------------------
Ponaje verz 7.3 mete pout pkaz ALTER TABLE DROP COLUMN. Ve
starch verzch mete pout nsledujc postup:
BEGIN;
LOCK TABLE old_table;
SELECT ... -- mimo sloupec, kter chceme odstranit
INTO TABLE new_table;
DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table;
COMMIT;
Pro zmnu typu sloupce je teba provst:
BEGIN;
ALTER TABLE tab ADD COLUMN new_col new_data_type;
UPDATE tab SET new_col = CAST(old_col AS new_data_type;
ALTER TABLE tab DROP COLUMN old_col;
COMMIT;
Pot provete VACUUM FULL tab - uvolnte tm diskov prostor zabran
nyn ji neplatnmi dky.
4.5 Jak je maximln velikost dku, tabulky a databze?
---------------------------------------------------------
PostgreSQL m tato omezen:
Maximln velikost databze: neomezena (existuj 32TB db)
Maximln velikost tabulky: 32 TB
Maximln velikost dky: 1.6 TB
Maximln velikost poloky 1 GB
Maximln poet dk v tabulce: neomezeno
Maximln poet sloupc v tabulce: 250-1600 podle typ
Maximln poet index na tabulce: neomezeno
Ve skutenosti nic nen neomezeno, limitem bv vdy dostupn diskov
pam nebo velikost operan pamti. Pokud mte nkterou z tchto hodnot
neobvykle velkou, me dojt ke snen vkonu.
Maximln velikost tabulky je 32 TB a nevyaduje podporu velkch soubor
operanm systmem. Velk tabulky se ukldaj do nkolika 1 GB soubor
take limity souborovho systmu nejsou podstatn.
Maximln velikost tabulky a maximln poet sloupc meme
zetynsobit nastavenm velikosti bloku na 32K.
4.6 Kolik diskovho prostoru je poteba k uloen dat z normlnho textovho souboru?
-------------------------------------------------------------------------------------
PostgreSQL vyaduje a ptinsobek diskovho prostoru k uloen dat z
textovho souboru.
Napklad, uvaujme soubor se 100 tisci dky obsahujc na kad dce
cel slo a textov popis. Text je v prmru dvacet byt dlouh.
Textov soubor bude 2.8 MB dlouh. Velikost databze obsahujc
odpovdajc data bude zhruba 6.4 MB.
36 byt: hlavika dku (piblin)
24 byt: jedna celoseln poloka a jedna textov
4 byty: ukazatel na strnku k ntici
------------------------------------------------------
64 byt na dek
Velikost datov strnky PostgreSQL je 8KB
8192 byt na strnce
---------------------- = 128 dek na strnku
64 byt za dek
100000 dek
-------------------- = 782 strnek (zaokrouhleno nahoru)
128 dek na strnce
782 * 8192 = 6, 406, 144 byt (6.4 MB)
Indexy nemaj tak velkou reii, ale mohou bt tak velk, protoe
obsahuj indexovan data.
Hodnoty NULL jsou uloeny v bitmapch, take spotebuj jen velmi mlo
diskovho prostoru.
4.7 Jak zskm seznam vytvoench tabulek, index, databz?
------------------------------------------------------------
psql m sadu metapkaz k zobrazen tchto informac. Jejich seznam
zskte pkazem \?. Dle se mete podvat na obsah systmovch tabulek
zanajcch pg_. Sputn psql s parametrem -l provede vpis nzv
vech databz.
Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy pistupujc k
systmovm tabulkmm.
4.8 Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
-----------------------------------------------------------
Kad dotaz nemus nutn pout existujc indexy. Index se pouije
tehdy, kdy je tabulka vt ne urit minimln velikost, a dotaz
vybr pouze procentuln malou st dk tabulky. To proto, e nhodn
pstup k disku dan tenm indexu me bt pomalej ne linern ten
tabulky nebo sekvenn ten,
PostgreSQL rozhoduje o pouit index na zklad statistiky pstup k
tabulce. Tyto statistiky se shromauj pkazy VACUUM ANALYZE nebo
ANALYZE. Dky statistikm m optimizer informaci o potu dek v tabulce
a me lpe rozhodnout o pouit index. Statistiky se uplatn pi
uren optimlnho poad a metody spojen tabulek. Statistiky by se
mli aktualizovat opakovan, tak jak se mn obsah tabulek.
Indexy nejsou obyejn pouity pro setdn nebo spojen tabulek.
Sekvenn zpracovn nsledovan explicitnm tdnm je obyejn
rychlej ne indexn ten na velk tabulce.
Jinak je tomu v ppad pouit LIMIT a ORDER BY, pi kterm se vtinou
index pouije, vsledkem je pouze mal st tabulky. Funkce MAX() a
MIN() nepouvaj indexy, ale je mon tut hodnotu zskat
SELECT col FROM tab
ORDER BY col [ DESC ] LIMIT 1;
Pokud si myslte, e optimizer myln zvolil sekvenn prohledvn
tabulky, pouijte pkaz SET enable_seqscan TO 'off' a zkuste zda je
indexn prohledvn rychlej.
Pi vyhledvn na zklad vzoru jako je nap. opertor LIKE nebo ~ se
indexy pouj pouze za uritch skutenost:
- zatek hledanho vzoru mus bt ukotven k zatku, tj.
* vzor LIKE nesm zanat %
* regulrn vraz mus zanat ^
- vzor nesm zanat intervalem, nap. [a-e]
- vyhledvan, kter nen Case sensitiv nepouv indexy.
Mete ale pout funkcionln indexy, kter jsou posny v sekci
4.12
- pi inicializaci databze (initdb) mus bt pouito C locale
(pozn. pekladatele - tud v naich podmnkch nepouiteln,
nepracovalo by esk tdn).
4.9 Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
------------------------------------------------------------
Podvejte se do manulov strnky pkazu EXPLAIN.
4.10 Co to je R-tree index?
---------------------------
R-tree index se pouv pro indexovn prostorovch dat. Hash index
neme obslouit prohledvn oblast. B-tree index me dit vyhledn
oblast v jedn dimenzi. R-tree index me podporovat hledn v
multidimenzionlnch datech. Pouijeme-li napklad R-tree index na
atributy typu point, pak systm me efektivn odpovdt na dotaz -
vyber vechny body uvnit obdlnk.
Pvodn nvrh R-tree je Guttman, A. "R-trees: A Dynamic Index Structure
for Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on
Mgmt of Data, 45-57
Tyto materily naleznete v Stonebraker's "Readings in Database Systems".
Vestavn R-tree me slouit k indexaci polygon a oblast. Teoreticky
meme R-tree pout i pro vce dimenz (jin ne 3D). Ve skutenosti
ale takov rozen R-tree vyaduje trochu prce a ve souastnosti
chyb dokumentace jak na to.
4.11 Co je Genetic Query Optimizer?
-----------------------------------
GEQO modul urychluje optimalizaci dotaz pi spojovn mnostv tabulek
metodou Genetickch algoritm (GA). To umouje zskat velkho mnostv
variant spojen pi neplnm prohledvnm.
4.12 Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn?
Opertor ~ slou k porovn s regulrnm vrazem, jeho modifikace *~
pedstavuje case insensitive vyhledvn. Jedn se o obdobu LIKE a
ILIKE.
Pro vyhledvn bez ohledu na velk mal psmena pouijeme
SELECT * FROM tab
WHERE lower(col) = 'abc';
V tomto ppad se nepouije standardn index. Nicmn, pouije se
funkcionln index, pokud jej vytvote
CREATE INDEX tabindex ON tab (lower(col));
4.13 Jak v dotazu detekovat, e poloka je NULL?
------------------------------------------------
Urte pomoc IS NULL nebo IS NOT NULL
4.14 Jak jsou rozdly mezi rznmi znakovmi typy?
---------------------------------------------------
Typ Intern nzev Poznmka
--------------------------------------------------------------------------
VARCHAR(n) varchar omezeno maximln dlkou, bez doplnn mezerami
CHAR(n) bpchar etzec je doplnn mezerami do dan dlky
TEXT text bez hornho limitu na dlku
BYTEA bytea pole byt (bezpen lze uloit i znak NULL)
"char" char jeden znak
S internmi nzvy se setkte v systmovm katalogu a v nkterch
chybovch hlench.
Prvn tyi uveden typy jsou tzv. varlena typy (tj. prvn tyi byty na
disku nesou daj o dlce, nsleduj samotn data). Proto skuten
pouit prostor je vdy o nco mlo vt ne deklarovan dlka. Naopak,
tyto datov typy jsou komprimovnty TOASTem, take prostor na disku me
bt ni ne je oekvno.
VARCHAR(n) je vhodn pro ukldn text prommn dlky s pevn
stanovenou maximln dlkou. TEXT je pro etzce bez omezen dlky s
maximem jeden gigabajt.
CHAR(n) slou k ukldn etzc stejn dlky. CHAR(n) dopln przdn
znaky do specifikovan dlky, zatmco VARCHAR(n) ulo pouze pedan
znaky. BYTEA je ureno pro ukldn binrnch dat, vetn NULL byte.
Vechny zde popsan typy maj podobn vkonnostn charakteristiky.
4.15.1 Jak vytvoit serial/auto-increment pole?
-----------------------------------------------
PostgreSQL podporuje typ SERIAL. Pi jeho pouit se automaticky vytvo
SEQUENCE a index na sloupci (Pro vy verze to neplat OVIT).
Napklad:
CREATE TABLE person (
id SERIAL,
name TEXT
);
je automaticky pevedeno do
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT
);
CREATE UNIQUE INDEX person_id_key ON person(id);
Viz dokumentace create_sequence v manulovch strnkch. Dle mete
pout uniktn hodnotu OID kadho dku. Potom ale muste spoutt
pg_dump s pepnaem -o, tak aby zstaly zachovny hodnoty OID (u
pkazu copy COPY WITH OIDS).
4.15.2 Jak zskat hodnotu SERIAL po vloen dku?
--------------------------------------------------
Jednou z monost je zskat budouc hodnotu SERIAL funkc nextval ped
samotnm vloenm a pak ji vloit explicitn. Napklad v jakmsi
pseudojazyku
newid = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
Mete pak jet pout hodnotu newid v dalch dotazech, nap. jako
hodnotu cizho kle. Nzev automaticky vytvoen sekvence je
tabulka_sloupec_seq.
Alternativn mete zskat hodnotu posledn generovou sekvenc funkc
currval() po vloen
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");
Konen mete pout OID hodnotu vrcenou pkazem INSERT, ale to je
pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI
modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme $sth->{pg_oid_status}
po kadm $sth->execute().
4.15.3 Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s jinmi uivateli?
------------------------------------------------------------------------------------------
Nikoliv, currval() vrac hodnotu naposledy generovanou ve vaem
backendu, a ta tud nen spolen vem uivatelm.
4.15.4 Pro nen vygenerovan slo pouito pi peruen transakce?
Pro vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?
K zajitn efektivnosti soubhu, jsou hodnoty posloupnosti, kdy se o
n pod, a sekvence nen zamena do ukonen transakce. To zpsobuje
dry v slovn ze zruench transakc.
4.16 Co to je OID? Co je to TID?
--------------------------------
Kad dek vytvoen v PostgreSQL zsk jedinen OID. Vechna OID
generovan bhem inicializace databze jsou men ne 16384
(include/access/transam.h). Vechna OID generovan na poadavek
uivatele jsou rovna nebo vy tto hodnot. Normln, vechna OID jsou
jedinen nejen uvnit tabulky nebo databze, ale v rmci cel instalace
PostgreSQL
PostgreSQL pouv OID ve svm internm systmu tabulek k vytvoen
relac. Tato OID mohou bt pouita k identifikaci konkrtnho uivatele
a pouita v spojen. Pro OID hodnoty je doporuen typ OID. Nad tmto
sloupcem mete vytvoit index pro urychlen pstupu.
OID jsou dna vem dkm z centrln oblasti a jsou pouita v kad
databzi. Pokud potebujete zmnit OID, nebo chcete zkoprovat tabulku s
pvodnmi OID, lze pout
CREATE TABLE new_table(old_oid oid, mycol int);
SELECT old_oid, mycol INTO new FROM old;
COPY new TO '/tmp/pgtable';
DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable';
OID jsou uloena jako 4bajtov integer a peteou po tyech miliardch.
Nebylo hleno, e by se tak nkdy stalo, pesto ale plnujeme odstranit
tento limit dv ne se tak stane.
TID se pouvaj i identifikaci fyzickch dk s hodnotou bloku a
offsetu. TIDs se mn modifikac dk (pouv se jako ukazatel indexu
fyzickho dku).
4.17 Jak je vznam nkterch vraz pouitch v PostgreSQL?
------------------------------------------------------------
V nkterch zdrojovch kdech nebo star dokumentaci se mete setkat s
nsledujcmi vrazy, kter maj ir vznam. Zde je pklad nekterch:
- tabulka, relace, tda (table, relation, class)
- dek, zznam, ntice (row, record, tuple)
- sloupec, poloka, atribut (column, field, attribute)
- vyhledn, vbr (retrieve, select)
- nhrada, prava (replace, update)
- pidn, vkldn (append, insert)
- OID, serial value (OID, serial value)
- portal, kurzor (portal, cursor)
- range variable, jmno tabulky, alias tabulky (range
variable, table name, table alias)
seznam tchto vraz mete nalzt na
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/g
lossary.html.
4.18 Pro jsem zskal chybov hlen "ERROR: Memory exhausted in AllocSetAlloc()"?
-----------------------------------------------------------------------------------
Pravdpodobn dolo k vyerpn virtuln pami na Vaem systmu, nebo
jdro m nzk limit pro urit zdroje. Vyzkouejte ped startem
posmatera
ulimit -d 262144
limit datasize 256m
Zle na Vaem shellu, zda budou tyto pkazy spn, mly by zvit
limit datovho segmentu pro Vae procesy a umonit tak dokonen dotazu.
Tyto pkazy se aplikuj na aktuln proces a vechny synovsk procesy
vytvoen po proveden pkazu. Pokud mte problmy s SQL klientem
protoe backend vrac pli mnoho dat, zkuste zvit limity ped
startem klienta.
4.19 Jak se dozvm, kterou verzi PostgreSQL pouvm?
-----------------------------------------------------
V psql spuste
SELECT version();
4.20 Pro operace s velkmi objekty kon "invalid large obj descriptor"?
-------------------------------------------------------------------------
Vechny operace s velkmi objekty - lo_open, lo_close, ... muste
spoutt v transakci, tj. mezi pkazy BEGIN WORK a COMMIT.
PostgreSQL uvoluje handle velkch objekt pi skonen transakce. Pokud
budete pracovat s velkmi objekty mimo transakci, pravdpodobn
dostanete toto chybov hlen, protoe handle ji budou neplatn.
Pokud pouvte interface podobn ODBC muste nastavit set auto_commit
off
4.21 Jak vytvoit sloupec obsahujc implicitn aktuln datum?
---------------------------------------------------------------
Pouijte CURRENT_TIMESTAMP
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
4.22 Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
-------------------------------------------------------------
Aktuln spojujeme tabulky se sekvennm skenovnm vsledku pro kad
dek vnjho dotazu. Pokud vnoen dotaz m pouze nkolik dk a
vnj dotaz vrac hodn dek, IN je rychl. V jinch ppadech
nahrate IN EXISTS:
SELECT * FROM tab
WHERE col IN (SELECT subcol FROM subtab);
takto
SELECT * FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
Pro urychlen vytvoete index pro subcol. Tento vkonnostn problm byl
odstrann ve verzi 7.4.
4.23 Jak provst vnj spojen (outer join)?
---------------------------------------------
PostgreSQL podporuje vnj spojen tabulek standardnmi SQL pkazy.
Zde jsou dva pklady:
SELECT * FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
nebo
SELECT * FROM t1 LEFT OUTER JOIN USING (col);
Tyto identick dotazy napoj t1.col na t2.col a jet pid nepipojen
dky z t1 (kter nemaj obdoby v t2). Prav spojen (RIGHT JOIN) pid
nepipojen dky z t2. FULL JOIN vrt vechny dky, vetn
nepipojench z tbulek t1 a t2. Klov slovo OUTER je nepovinn a ve
se na LEFT, RIGHT a FULL join. Bn spojen se nazv INNER JOIN.
V dvjch verzch se vnj spojen tabulek mohlo simulovat pomoc
UNION a NOT IN. Napklad pro spojen tabulek tab1 a tab2, je
nsledujc dotaz ekvivalentn k vnjmu spojen dvou tabulek:
SELECT tab1.col2, tab2.col2 FROM tab1, tab2
WHERE tab1.col1 = tab2.col1
UNION ALL
SELECT tab1.col2, NULL FROM tab1
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1;
4.24 Jak provst dotaz nap nkolika databzemi?
--------------------------------------------------
PostgreSQL nenabz dn zpsob, jak se dotzat do jin databze ne do
aktuln. Doplnk contrib/dblink umouje dotaz do ciz databze
prostednictvm funkce. Na stran klienta nen problm si otevt vce
simultlnch pstup do rznch databz a spojovat vsledek na stran
klienta.
4.25 Me funkce vrtit vce dk nebo sloupc?
------------------------------------------------
V PostgreSQL 7.3 mete jednodue vracet vce dk nebo sloupc z
funkce, viz:
http://techdocs.postgresql.org/guides/SetReturningFunctions.
4.26 Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL funkcch?
--------------------------------------------------------------------------------
Peloen kd PL/pgSQL funkce je uloen ve vyrovnvac pamti, tj.
funkce je pekldna pouze pi zmn kdu, nikoliv ped kadm volnm
funkce. Nechtnm vedlejm efektem je, e voln funkce sele, kdy se
funkce odkazuje na doasnou tabulku, pokud tato tabulka byla od pekladu
funkce zruena (akoliv ji byla znovu vytvoena a existuje). Jedinm
eenm problmu je pstup k doasn tabulce pomoc EXECUTE, tj.
dynamick provdn dotazu. Tento pkaz zajist opakovan peklad
dotazu pi kadm voln funkce.
4.27 Jak jsou monosti replikace databz?
-------------------------------------------
Existuje nkolik dostupnch een master/slave replikac. Ty povoluj
modifikace master databze a slave databzm umouj pouze ten. Na
konci http://gborg.PostgreSQL.org/genpage?replication_research najdete
jejich seznam. Na een multi-master replikaci se pracuje na
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
4.28 Jak jsou monosti ifrovn databz?
-------------------------------------------
-
contrib/pgcrypto obsahuje ifrovac funkce pouiteln v SQL
dotazech.
-
K ifrovn penosu dat z klienta na server, mus bt server
peloen s podporou ssl a pepna sslv postgresql.conf mus bt
nastaven na hodnotu true. Klient mus mt vytvoen zznam hostssl v
pg_hba.conf a tak mt povolen reim ssl. Lze pout i jin
prostedky, nejen nativn podporu ssl v PostgreSQL, nap. stunel a
ssh.
-
Hesla uivatel databze jsou zaifrovna ponaje verz 7.3. Ve
starch verzch toto chovn muselo bt vynuceno volbou
PASSWORD_ENCRYPTION v postgresql.conf
-
Server me bet na ifrovanm souborovm systmu.
------------------------------------------------------------------------
Roziovn PostgreSQL
======================
5.1 Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
------------------------------------------------------------
Problm me bt zpsoben mnoha okolnostmi. Vyzkouejte si svoji funkci
nejdve v njak jednoduch aplikaci.
5.2 Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do PostgreSQL?
-------------------------------------------------------------------------------
Polete sv rozen do konference pgsql-hackers, a ono pak mon
skon v podadresi contrib.
5.3 Jak napsat funkci v C vracejc ntici?
------------------------------------------
Funkce vracejc tabulky jsou podporovan PostgreSQL 7.3 a vy pro
jazyky C, PL/PgSQL a SQL. Vce naleznete v The Programmer's Guide.
Pklady tchto funkc pro C naleznete v contrib/tablefunc.
5.4 Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci vzata v potaz. Pro?
---------------------------------------------------------------------------------------------
Makefile nem informace o zvislostech mezi hlavikovmi soubory. Muste
provst make clean a pak make. Pokud pouvte gcc, mete pout
pepna --enable-depend pkazu configure k automatickmu een
zvislost pekladaem.
[1] http://developer.postgresql.org/todo.php
[2] http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
[3] http://postgresql.ok.cz/PostgreSQL%20Administrator%27sGuide
...@@ -25,7 +25,7 @@ System Configuration ...@@ -25,7 +25,7 @@ System Configuration
--------------------- ---------------------
Architecture (example: Intel Pentium) : Architecture (example: Intel Pentium) :
Operating System (example: Linux 2.0.26 ELF) : Operating System (example: Linux 2.4.18) :
PostgreSQL version (example: PostgreSQL-7.5): PostgreSQL-7.5 PostgreSQL version (example: PostgreSQL-7.5): PostgreSQL-7.5
......
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<meta http-equiv="Content-language" content="cs">
<meta name="robots" content="index,FOLLOW">
<meta name="description" lang="en" content="Czech translation of FAQ for PostgreSQL">
<meta name="description" lang="cs" content="esk peklad FAQ PostgreSQL"><title>PostgreSQL FAQ cz</title>
<style type="text/css">
A {font-family:helvetica,arial,sans-serif; font-weight:normal; color:#0201FF; text-decoration:none;}
A:active {color:#0201FF;;}
A:visited {color:#0F0169;}
A:hover{text-decoration:underline; color:#020169;}
body {font-family:helvetica,arial,sans-serif; font-weight:normal;}
</style></head>
<body leftmargin="10" topmargin="10" marginwidth="10" marginheight="10" bgcolor="white">
<h1>asto kladen dotazy (FAQ) PostgreSQL</h1>
<h2>Obecn otzky</h2>
<a href="#1.1">1.1</a> Co je PostgreSQL? Jak se vyslovuje?<br>
<a href="#1.2">1.2</a> Jak je licence na PostgreSQL?<br>
<a href="#1.3">1.3</a> Na kterch Unixex lze spustit PostgreSQL?<br>
<a href="#1.4">1.4</a> Kter ne-unixov platformy jsou podporovan?<br>
<a href="#1.5">1.5</a> Kde mohu zskat PostgreSQL?<br>
<a href="#1.6">1.6</a> Kde mohu zskat podporu?<br>
<a href="#1.7">1.7</a> Kde je posledn verze?<br>
<a href="#1.8">1.8</a> Jak je dostupn dokumentace?<br>
<a href="#1.9">1.9</a> Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?<br>
<a href="#1.10">1.10</a> Jak se mohu nauit SQL?<br>
<a href="#1.11">1.11</a> Nem PostgreSQL problmy s rokem 2000?<br>
<a href="#1.12">1.12</a> Jak se pipojit k vvojskmu tmu?<br>
<a href="#1.13">1.13</a> Kam podat report o chyb?<br>
<a href="#1.14">1.14</a> Jak je na tom PostgreSQL v porovnn s jinmi databzemi?<br>
<a href="#1.15">1.15</a> Jak lze finann pomoci PostgreSQL?<br>
<h2>User client dotazy</h2>
<a href="#2.1">2.1</a> Kde naleznu ODBC ovladae pro PostgreSQL?<br>
<a href="#2.2">2.2</a> Jak nstroje lze pout pro PostgreSQL a web?<br>
<a href="#2.3">2.3</a> Existuje grafick rozhran pro PostgreSQL?<br>
<a href="#2.4">2.4</a> Kter programovac jazyky maj podporu pro PostgreSQL?<br>
<h2>Administrativn dotazy</h2>
<a href="#3.1">3.1</a> Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?<br>
<a href="#3.2">3.2</a> Pi startu postmaster, dostanu chybov hlen Bad System Call nebo
core dump. Pro?<br>
<a href="#3.3">3.3</a> Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate. Pro?<br>
<a href="#3.4">3.4</a> Pi startu postmastera dostanu hlen o chyb
IpcSemaphoreCreate. Pro?<br>
<a href="#3.5">3.5</a> Jak povolit nebo zakzat pstup z jinch stanic?<br>
<a href="#3.6">3.6</a> Jak ladit databzov stroj na lep vkon?<br>
<a href="#3.7">3.7</a> Jak jsou monosti ladn?<br>
<a href="#3.8">3.8</a> Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?<br>
<a href="#3.9">3.9</a> K emu slou adres pgsql_tmp?<br>
<a href="#3.10">3.10</a> Pro je poadovno dump a obnoven (load) databze bhem upgrade
mezi velkmi verzemi PostgreSQL?<br>
<h2>Provozn dotazy</h2>
<a href="#4.1">4.1</a> m se li binrn a normln kurzor?<br>
<a href="#4.2">4.2</a> Jak zskat pouze prvn dek dotazu? Nhodn dek?<br>
<a href="#4.3">4.3</a> Jak zskm seznam tabulek nebo jinak jak jej zsk psql?<br>
<a href="#4.4">4.4</a> Jak odstranm sloupec tabulky, jak zmnm jeho typ?<br>
<a href="#4.5">4.5</a> Jak je maximln velikost dku, tabulky a databze?<br>
<a href="#4.6">4.6</a> Kolik diskovho prostoru je poteba k uloen dat z normlnho
textovho souboru? <br>
<a href="#4.7">4.7</a> Jak zskm seznam vytvoench tabulek, index, databz?<br>
<a href="#4.8">4.8</a> Mj dotaz je pomal a nepouv vytvoen indexy. Pro?<br>
<a href="#4.9">4.9</a> Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?<br>
<a href="#4.10">4.10</a> Co to je R-tree index?<br>
<a href="#4.11">4.11</a> Co je Genetic Query Optimizer?<br>
<a href="#4.12">4.12</a> Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn?<br>
<a href="#4.13">4.13</a> Jak v dotazu detekovat, e poloka je NULL?<br>
<a href="#4.14">4.14</a> Jak jsou rozdly mezi rznmi znakovmi typy?<br>
<a href="#4.15.1">4.15.1</a> Jak vytvoit serial/auto-increment pole?<br>
<a href="#4.15.2">4.15.2</a> Jak zskat hodnotu SERIAL po vloen dku?<br>
<a href="#4.15.3">4.15.3</a> Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s jinmi uivateli?<br>
<a href="#4.15.4">4.15.4</a> Pro nen vygenerovan slo pouito pi peruen
transakce? Pro vznikaj dry v slovn vlastn sekvenc/SERIAL
sloupce?<br>
<a href="#4.16">4.16</a> Co to je OID? Co je to TID?<br>
<a href="#4.17">4.17</a> Jak je vznam nkterch vraz pouitch v PostgreSQL?<br>
<a href="#4.18">4.18</a> Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
AllocSetAlloc()"?<br>
<a href="#4.19">4.19</a> Jak se dozvm, kterou verzi PostgreSQL pouvm?<br>
<a href="#4.20">4.20</a> Pro operace s velkmi objekty kon "invalid large obj descriptor"?<br>
<a href="#4.21">4.21</a> Jak vytvoit sloupec obsahujc implicitn aktuln datum?<br>
<a href="#4.22">4.22</a> Pro jsou moje vnoen dotazy pouvajc IN tak pomal?<br>
<a href="#4.23">4.23</a> Jak provst vnj spojen (outer join)?<br>
<a href="#4.24">4.24</a> Jak provst dotaz nap nkolika databzemi?<br>
<a href="#4.25">4.25</a> Me funkce vrtit vce dk nebo sloupc?<br>
<a href="#4.26">4.26</a> Pro nelze spolehliv vytvet a ruit doasn tabulky v
PL/pgSQL funkcch?<br>
<a href="#4.27">4.27</a> Jak jsou monosti replikace databz?<br>
<a href="#4.28">4.28</a> Jak jsou monosti ifrovn databz?<br>
<h2>Roziovn PostgreSQL</h2>
<a href="#5.1">5.1</a> Napsal jsem UDF funkci, PostgreSQL vak kon dump core?<br>
<a href="#5.2">5.2</a> Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi
do PostgreSQL?<br>
<a href="#5.3">5.3</a> Jak napsat funkci v C vracejc ntici?<br>
<a href="#5.4">5.4</a> Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi
rekompilaci vzata v potaz. Pro?<br>
<hr>
<h2>Obecn otzky</h2>
<h3><a name="1.1">1.1</a> Co je PostgreSQL? Jak se vyslovuje?</h3>
<p>PostgreSQL se vyslovuje Post-Gres-Q-L.</p>
<p></p>PostgreSQL vychz z databze POSTGRES - vzkumnho prototypu DBMS
nov generace. Z postgresu byl pevzat siln datov model a bohat
soubor datovch typ a jeho dotazovac jazyk PostQuel byl nahrazen
rozenou podmnoinou jazyka SQL. PostgreSQL lze pouvat bez
omezen a jeho zdrojov kdy jsou voln k dispozici.<p></p>
<p>PostgreSQL vyvj tm vvoj pihlench do vvojsk konference
PostgreSQL. Souasnm koordintorem je Marc G. Fournier. (Odpov
1.6. - jak se zapojit). Tento tm je zodpovdn za veker vvoj
PostgreSQL.</p>
<p>Autory prvn verze PostgreSQL 1.01 byli Andrew Yu and Jolly
Chen. Do portace, testovn, ladn a
roziovn kdu se zapojilo mnoho dalch vvoj . Pvodni kd Postgresu, ze kterho PostgreSQL
vychz, je vsledkem sil mnoha student a programtor pracujcch
pod vedenm prof. Michaela Stonebrakera na University of California v
Berkley.</p>
<p>Pvodn nzev software z Berkley byl Postgres. Po pidn jazyka SQL
se nzev zmnil na Postgres95. Koncem roku 1996 byl RDBMS
pejmenovn na PostgreSQL.</p>
<h3><a name="1.2">1.2</a> Jak je licence na PostgreSQL?</h3>
<p>PostgreSQL je pedmtem nsledujcch autorskch prv:</p>
<p>Dl copyright (c) 1996-2002, PostgreSQL Global Development Group</p>
<p>Dl copyright (c) 1994-6, Regents of the University of California</p>
<p>Udluje se oprvnn k uit, rozmnoovn, provdn prav a
roziovn tohoto softwaru a dokumentace k nmu, pro jakkoli ely,
bez licennho poplatku a bez psemn licenn smlouvy, za podmnky, e
na vech jeho kopich je uvedeno oznmen o ve uvedench prvech,
jako i obsah tohoto a dvou nsledujcch odstavc.</p>
<p>THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V DNM
PPAD ODPOVDNA DN TET OSOB ZA PMOU, NEPMOU, ZVLTN,
NAHODILOU NEBO VSLEDNOU KODU, VETN ULHO ZISKU, ZPSOBENOU UITM
TOHOTO SOFTWARU A DOKUMENTACE K NMU, A TO I V PPAD, E THE
UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MONOSTI VZNIKU TAKOV KODY.</p>
<p>THE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE SPECIFICKM
ELM. NͮE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A LE" A THE
UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO DRBU, PODPORU,
AKTUALIZACI, VYLEPEN NEBO MODIFIKACI.</p>
<p>Ve uveden je BSD licence, bn licence otevenho zdroje. Nen zde
dn omezen ohledn uit kdu zdroje. Jsme s tm spokojeni a nemme v
myslu na tto skutenosti cokoli mnit.</p>
<h3><a name="1.3">1.3</a> Na kterch Unixex lze spustit PostgreSQL?</h3>
<p>PostgreSQL b na vech modernch unixovch platformch. V instalanch
instrukcch naleznete aktuln seznam vech platforem na kterch byla
testovnm ovena funkcionalita PostgreSQL.</p>
<h3><a name="1.4">1.4</a> Kter ne-unixov platformy jsou podporovan?</h3>
<h4>Klient</h4>
<p>Knihovna libpq, psql a nkter dal moduly byly peloeny pro
MS Windows. Klienta lze provozovat na MS Windows, ten prostednictvm
TCP/IP protokolu komunikuje se serverem bcm na nkter z podporovanch
Unixovch platforem. K pekladu lze pout win32.mak a
Win32 knihovny libpq a psql. K databzi PostgerSQL lze pistupovat skrze
rozhran ODBC.</p>
<h4>Server</h4>
<p>Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou Cygwin,
Cygnus Unix/NT porting library. Na nativnm portu pro MS Win NT/2000/XP
se pracuje. Existujc port pro Novell Netware 6 naleznete na
<a href="http://forge.novell.com/">http://forge.novell.com</a>. </p>
<h3><a name="1.5">1.5</a> Kde mohu zskat PostgreSQL?</h3>
<p>Primrnm anonymnm ftp serverem pro PostgreSQL je
<a href="ftp://ftp.postgresql.org/pub">ftp://ftp.PostgreSQL.org/pub</a>
. Seznam zrcadel naleznete na naich
webovch strnkch.</p><p>
</p><h3><a name="1.6">1.6</a> Kde mohu zskat podporu?</h3>
<p>Hlavnm mailov konference je pgsql-general@PostgreSQL.org. Slou
k diskuzm ohledn PostgreSQL. Pihlste se zaslnm mailu
obsahujc nsledujc dky v tle dopisu (nikoliv v zhlav - subjectu)</p>
<pre>subscribe
end
</pre>
na adresu <a href="mailto:pgsql-general-request@PostgreSQL.org">mailto:pgsql-general-request@PostgreSQL.org</a>.<p></p>
<p>Mete si vydat denn pehled (diggest), kter m zhruba 30K denn zprv.
</p><p>Konference psql-bugs je urena k zasln zprv o chybch. Pro pihlen
polete mail se stejnm obsahem jako v pedchozm ppad na adresu
<href ="mailto:pgsql-bugs-request@PostgreSQL.org">mailto:pgsql-bugs-request@PostgreSQL.org.</href></p>
<p>Do vvojsk konference se pihlste odeslnm dopisu s
ji zmiovanm obsahem na <a href="mailto:pgsql-hackers-request@PostgreSQL.org">mailto:pgsql-hackers-request@PostgreSQL.org</a>.</p>
<p>Seznam dalch konferenc naleznete na strnkch PostgreSQL
<a href="http://www.postgresql.org/">http://www.postgresql.org</a></p>
<h3><a name="1.7">1.7</a> Kde je posledn verze?</h3>
<p>Posledn verz je PostgreSQL 7.4.. Plnujeme uvolnit velkou verzi
kadch est a osm msc.</p>
<h3><a name="1.8">1.8</a> Jak je dostupn dokumentace?</h3>
<p>Rzn manuly, manulov strnky a nkolik malch testovacch pklad
jsou sousti distribuce. Podvejte se do adrese /doc. Manuly jsou
pstupn online na <a href="http://www.postgresql.org/docs">http://www.PostgreSQL.org/docs</a>.</p>
<p>Na adresch <a href="http://www.postgresql.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a> a
<a href="http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</a> naleznezte dv online knihy o
PostgreSQL. Seznam dostupn literatury je na
<a href="http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</a>. Soubor
technickch lnk s tematikou PostgresQL najdete na
<a href="http://techdocs.postgresql.org/">http://techdocs.PostgreSQL.org/</a>.</p>
<p>psql m uiten metapkaz \d slouc k zobrazen informac
o typech, opertorech, funkc, agreganch funkc atd.</p>
<p>Vce dokumentace naleznete na naich webovch strnkch.</p>
<h3><a name="1.9">1.9</a> Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?</h3>
<p>PostgreSQL podporuje rozenou podmnoinu SQL-92. V naem <a href="http://developer.postgresql.org/todo.php">TODO</a> najdete
seznam znmch chyb, chybjcch vlastnost a seznam vlastnost,
kter budou do systmu implementovny v budoucnu (vetn priorit).</p>
<h3><a name="1.10">1.10</a> Jak se mohu nauit SQL?</h3>
<p>V knize The PostgreSQL book na <a href="http://www.postgresql.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a>
je vysvtlen jazyk SQL (vyla esky). Dal dostupnou knihou je
<a href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</a>. Kvalitn nvody naleznete na
<a href="http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm</a>, na
<a href="http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">http://www.intermedia.net/support/sql/sqltut.shtm</a>,
a na <a href="http://sqlcourse.com/">http://sqlcourse.com</a>.</p>
<p>Dal je Teach Yourself SQL in 21 days, Second Edition na
<a href="http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</a>.</p>
<p>Mnoho uivatel doporuuje The Practical SQL Handbook, Bowman, Judith
S., et al., Addison-Wesley. Jin preferuj The Complete Reference SQL,
Groff et al., McGraw-Hill.</p>
<h3><a name="1.11">1.11</a> Nem PostgreSQL problmy s rokem 2000?</h3>
<p>Nem, meme pracovat s datumy po roce 2000 naeho letopotu i ped
rokem 2000 p.n.l. </p>
<h3><a name="1.12">1.12</a> Jak se pipojit k vvojskmu tmu?</h3>
<p>Nejdve si sthnte nejnovj zdroje a pette si vvojskou
dokumentaci na naem webu nebo v distribuci. Pak se pihlate do
konferenc pgsql-hackers a pgsql-patches. Kvalitn zplaty
poslejte do pgsql-patches.</p>
<p>Prvo commit m v cvs archivu asi tincti lid. Kad z nich
poslal mnoho kvalitnch zplat, take tehdej commiters mli
jistotu, e budou pedkldat jenom kvalitn zplaty a mohli jim
pedlit vt prva.</p>
<h3><a name="1.13">1.13</a> Kam podat report o chyb?</h3>
<p>Navtivte nai PostgreSQL BugTool strnku na
<a href="http://www.postgresql.org/bugs/bugs.php">http://www.PostgreSQL.org/bugs/bugs.php</a>, kter obsahuje nvod a
smrnice jak podat chybov report. </p>
<p>Ovte si na naem ftp serveru <a href="ftp://ftp.postgresql.org/pub">ftp://ftp.PostgreSQL.org/pub</a>, zda-li
mte nejnovj verzi PostgreSQL a zda-li k n neexistuj njak zplaty.</p>
<h3><a name="1.14">1.14</a> Jak je na tom PostgreSQL v porovnn s jinmi databzemi?</h3>
<p>Existuje nkolik hledisek jak porovnvat software: vlastnosti, vkon,
spolehlivost, podpora a cena.</p>
<h4>Vlastnosti</h4>
<p>PostgreSQL m hodn spolench vlastnost s velkmi komernmi
DBMS, nap. transakce, vnoen dotazy, spout, pohledy,
kontrolu referenn integrity a sofistikovan
zamykn. Podporuje nkter vlastnosti, kter tyto systmy
nemaj, uivatelem definovan typy, ddinost, pravidla, MVCC
redukujc zamykn.</p>
<h4>Vkon</h4>
<p>Vkonnostn je na tom PostgreSQL podobn jako dal komern
ale i open source databze, v nem je rychlej, jindy
pomalej. V porovnn s MySQL a podobnmi databzovmi
systmy je PostgreSQL rychlej pi vceuivatelskm
pstupu, sloitjch dotazech a zaten read/write dotazy. MySQL
je rychlej v jednoduch dotazech s malm potem
uivatel. Navc, MySQL nepodporuje mnoh vlatnosti zmnn v
sekci vlastnosti. Zapracovali jsme na spolehlivosti a podporovanch
vlastnostech, a vkon zvyujeme v kad
verzi. Zajmavou strnku porovnvajc PostgreSQL a MySQL
naleznete na
<a href="http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</a>. Za vvojem MySQL
nen Open Source komunita, ale komern spolenost, pestoe
svoje produkty distribuuje jako Open Source.</p>
<h4>Spolehlivost</h4>
<p>Jsme si vdomi, e databze mus bt spolehliv, jinak je
nepouiteln. Sname se zveejovat dobe otestovan, stabiln kd s
minimem chyb. Kad verze je vce ne msc v beta testovn,
a nae historie verz ukazuje, e meme nabdnout stabiln,
solidn verze, kter jsou pipraveny pro reln nasazen. V
tto oblasti jsme srovnateln s dalmi databzemi. </p>
<h4>Podpora</h4>
<p>Na na mailov konferenci mete kontaktovat velkou skupinu
vvoj a uivatel.problm. Nememe garantovat opravu,
nicmn komern databze tak ne vdy nabdnou opravu. Podle ohlas
je nae podpora hodnocena lpe ne u jinch DBMS a to dky
pmmu kontaktu s vvoji, velkou komunitou uivatel,
kvalitnmi manuly a pstupnm zdrojovm kdem. Pro uivatele,
kte vyaduj podporu ke konkrtnm ppadm, existuje placen podpora
(FAQ sekce 1.6).</p>
<h4>Cena</h4>
<p>PosgreSQL lze voln pouvat pro nekomern i komern
pouit. Mete do svch produkt pidat n kd bez omezen,
respektive v souladu s podmnkami na licenn smlouvy (v duchu BSD
licence).</p>
<h3><a name="1.15">1.15</a> Jak lze finann pomoci PostgreSQL?</h3>
<p>PosgreSQL m prvotdn infrastrukturu od naeho zatku v roce
1996. Vdme za to Marku Fournierovi, kter zaloil a spravoval tuto
infrastrukturu nkolik let.</p>
<p>Kvalitn infrastruktura je velice dleit pro kad open source
projekt. Pedchz nedorozumnm, kter velice zdruj pokrok v projektu.</p>
<p>Tato infrastruktura nen lacin. K jejmu zajitn je teba stle hradit urit
msn a jednorzov stky. Pokud mte Vy nebo Vae spolenost
penze, kter nm mete darovat, obrae se na <a href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</a> a darujte je.</p>
<p>Akoliv webov strnka zmiuje PostgreSQL, Inc. vklady jsou ureny
pouze k podpoe projektu PostgreSQL a nepodporuj dnou existujc
spolenost. Pokud to vyadujete, mete poslat kontrolu na nai kontaktn
adresu.</p>
<p>Pokud mte pklad spnho nasazen PostgreSQL, pihlat se na n
advocacy site na <a href="http://advocacy.postgresql.org/">http://advocacy.postgresql.org</a>.</p>
<hr>
<h2>User client dotazy</h2>
<h3><a name="2.1">2.1</a> Kde naleznu ODBC ovladae pro PostgreSQL?</h3>
<p>Pro PostgreSQL existuj dva ODBC ovladae - PsqlODBC a OpenLink ODBC.</p>
<p>PsqlODBC je ke staen na <a href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</a>.</p>
<p>OpenLink mete zskat na <a href="http://www.openlinksw.com/">http://www.openlinksw.com</a>. Spolupracuje
s jejich klientskm programovm vybavenm a je dostupn pro vechny jimi
podporovan platformy (Win, Mac, Unix, VMS).</p>
<p>Tento ovlada je uren pro ty, kte vyaduj podporu komern kvality,
nicmn freeware verze je dostupn a funkn. Dotazy zaslejte
na postgres95@openlink.co.uk.</p>
<h3><a name="2.2">2.2</a> Jak nstroje lze pout pro PostgreSQL a web?</h3>
<p>Pkn vod do databzovch technologi zabezpeujcch chod
webovch strnek najdete na <a href="http://www.webreview.com/">http://www.webreview.com</a>.</p>
<p>Pro tvorbu webu existuje excelentn rozhran PHP, kter naleznete na
<a href="http://www.php.net/">http://www.php.net</a>.</p>
<p>Pro sloitj ppady se asto pouv Perl a CGI.pm nebo mod_perl.</p>
<h3><a name="2.3">2.3</a> Existuje grafick rozhran pro PostgreSQL?</h3>
<p>Pro PostgreSQL existuje nkolik grafickch rozhran:
PgAccess (<a href="http://www.php.net/">http://www.php.net</a>), PgAdmin (<a href="http://www.php.net/">http://www.php.net</a>), RHDB
Admin (<a href="http://sources.redhat.com/rhdb/">http://sources.redhat.com/rhdb/</a>) a Rekall
(<a href="http://www.thekompany.com/products/rekall/">http://www.thekompany.com/products/rekall/</a>). Dle existuje
PHPPgAdmin (<a href="http://phppgadmin.sourceforge.net/">http://phppgadmin.sourceforge.net/</a>) rozhran
PostgreSQL zaloen na web technologii.</p>
<p>plnj seznam najdete na <a href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a>.</p>
<h3><a name="2.4">2.4</a> Kter programovac jazyky maj podporu pro PostgreSQL?</h3>
<p>Vtina programovacch jazyk obsahuje rozhran pro
PostgreSQL. Podvejte se do roziujcch modul Vaeho programovacho
jazyka.</p>
<p>Distribuce PostgreSQL obsahuje tato rozhran:
</p><ul>
<li> C (libpq)
</li><li> Embbedded C (ecpg)
</li><li> Java (jdbc)
</li><li> Python (PyGreSQL)
</li><li> TCL (libpgtcl)
</li></ul>
<p>Dal rozhran jsou dostupn na <a href="http://gborg.postgresql.org/">http://gborg.postgresql.org</a> v sekci
Drivers/Interfaces. </p>
<hr>
<h2>Administrativn dotazy</h2>
<h3><a name="3.1">3.1</a> Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?</h3>
<p>Pouijte volbu --prefix pi sputn configure</p>
<h3><a name="3.2">3.2</a> Pi startu postmaster, dostanu chybov hlen Bad System Call nebo
core dump. Pro?</h3>
<p>Dvody mohou bt rzn, ale nejprve zkontrolujte, zda V systm
podporuje System V extensions. PostgreSQL vyaduje v jde podporu
sdlen pamti a semafor.</p>
<h3><a name="3.3">3.3</a> Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate. Pro?</h3>
<p>Buto nemte sprvn nakonfigurovanou sdlenou pam v jde nebo
musite zvtit jej velikost. Potebn velikost je zvisl na
architektue a na tom, kolik pamovch buffer a backend mte povoleno
pro postmastera. Pro vtinu systm s
peddefinovanm potem backend a pamovch buffer je
minimum zhruba 1MB. V <a href="http://postgresql.ok.cz/PostgreSQL%20Administrator%27sGuide">http://www.postgresql.org/docs/view.php?version=current&amp;idoc=1&amp;file=kernel-resources.html</a>
naleznete podrobnj informace o sdlen pamti a semaforech.</p>
<h3><a name="3.4">3.4</a> Pi startu postmastera dostanu hlen o chyb
IpcSemaphoreCreate. Pro?</h3>
<p>Pokud dostane chybovou zprvu IpcSemaphoreCreate: semget failed (No
space left on device), pak vae jdro nem dost volnch semafor. PostgreSQL
vyaduje jeden semafor pro kad backend v pozad. Doasnm
eenm je start postmastera s limitem backend. Pouijte
pepna -N s hodnotou men ne 32. plnm eenm je zven hodnot
SEMMNS a SEMMNI jadra.</p>
<p>Nefunkn semafory mohou zpsobit pd bhem intenzivnch databzovch
operac.</p>
<p>Pokud se tato chyba vyskytuje jet nkde jinde, mon nemte vbec
nakonfigurovny semafory ve vaem jde. V PostgreSQL
Administrator's Guide najdete podrobnj popis poadavk na sdlenou
pamt a semafory.</p>
<h3><a name="3.5">3.5</a> Jak povolit nebo zakzat pstup z jinch stanic?</h3>
<p>Pi vchozm nastaven PostgreSQL odepe pstup z jinch stanic ne
lokln s pouitm UDP. Databze se zpstupn jinm stanicm
nastavenm pepnae -i postmastera a povolenm stanice a urenm
reimu autentifikace v $PGDATA/pg_hba.conf. Tm se povol TCP/IP
spojen. ZASTARAL</p>
<h3><a name="3.6">3.6</a> Jak ladit databzov stroj na lep vkon?</h3>
<p>Urit pomohou indexy. Pkaz EXPLAIN zobraz zpsob interpretace
Vaeho dotazu a pouit index.</p>
<p>Pi vt dvce INSERT uvaujte o nhrad pkazem COPY. Ten je
mnohem rychlej neli samotn INSERT. Kad pkaz mimo blok
BEGIN WORK/COMMIT se provd ve vlastn transakci. Zvate, zda-li by
se nedalo nkolik pkaz spojit do jedn transakce. Tm se sn
reie na transakce. Ped provedenm rozshlch zmn zrute indexy,
kter po dokonen zmn opt vytvote.</p>
<p>Mte nkolik dalch monost, jak zlepit vkon. Mete zakzat fsyn()
pi startu postmastera pepnai -o -F. Tyto pepnae zabrn
fsync(), tj. zpisu na disk po kad transakci.</p>
<p>Mete zvit velikost pamovch buffer pouitch backendy
tj. parametr -B postmasteru. Pokud ale tato hodnota bude pli
velk, tak mon nespustte postmastera jeliko doshnete limitu
sdlen pamti. Kad buffer m 8K a implicitn je 64 buffer.</p>
<p>Dle mete pout pepna -S k zven limitu pamti pro backendy
na doasn tdn. Hodnota je mnna v kilobytech a vchoz
nastaven je 512, tj. 512K. </p>
<p>Mete pout pkaz CLUSTER, kter uspod fyzicky data v
tabulkch podle indexu. Vce na manulovch strnkch pkazu
CLUSTER.</p>
<h3><a name="3.7">3.7</a> Jak jsou monosti ladn?</h3>
<p>Mte nkolik monost jak se dostat k uitenm stavovm informacm.</p>
<p>Zaprv, pi pekladu pouijte pepna --enable-cassert, tm se zapne
monitorovn a nsledn zastaven aplikace, kdy se proces v backendu
dostane do neoekvanho stavu.</p>
<p>Jak postmaster tak postgres m nkolik pepna umoujcch
ladn. Postmaster nastartujte tak, abyste si byli jisti, e je
standartn vstup a standartn chybov vstup pesmrovn do souboru
logu, napklad:</p>
<pre>cd /usr/local/pgsql
./bin/postmaster &gt; server.log 2&gt;&amp;1 &amp;
</pre>
<p>Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje
uiten informace o problmech a chybch vyskytlch se na
serveru. Postmaster m pepna -d urujc, jak podrobn maj bt
reportovan informace, tj. debug level. Pozor, pi velk hodnot debug
levelu rychle roste velikost souboru logu.</p>
<p>Pokud neb postmaster, mete spustit backend PostgreSQL z pkazov
dky a napsat svj SQL dotaz pmo v backendu (doporueno pouze pro
ladn). Dotaz je v tomto ppad ukonen novou dkou, nikoliv
stednkem. Pokud mte aplikaci peloenou s ladcmi symboly, mete
pout debbuger k monitorovn procesu. Pokud nen backend sputn
postmasterem, pak neb ve svm obvyklm prosted a tud nkter problmy
dan interakc mezi backendy nemohou bt nasimulovny.</p>
<p>Pokud b postmaster, spuse psql v jednom okn a pak si zjistte PID
procesu postgres pouitho psql. V debuggeru sepipojte k postgresql
PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v
psql. Pokud ladte startup postgresu, pak nastavte PGOPTIONS="-W n" a
spuse psql. Tento pepna zpsob pauzu n sekund, take budete mt
as se pipojit k procesu, a nastavit breakpointy a pokraovat v
startup posloupnosti.</p>
<p>Pro ladn a men vkonu mohou bt uiten pepnae -s, -A a -t
programu postgres (backend).</p>
<p>Mete provst peklad s profilac, tak abyste vidli kolik asu
zabraj jednotliv funkce. Soubory s profily backend jsou uloeny v
adresi pgsql/data/base/dbname. Profil klienta pak v jeho aktulnm
adresi. Korektn profilace v prosted Linux poaduje konfiguraci
systmu s parametrem -DLINUX_PROFILE.</p>
<h3><a name="3.8">3.8</a> Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?</h3>
<p>Zvyte limit postmastera na maximln poet souasn sputnch backend.</p>
<p>Vchoz hodnota je 32 backend. Tuto hodnotu zvte zastavenm a
optovnm sputnm postmastera s parametrem -N nebo pravou postgresql.conf.</p>
<p>Pi zven hodnoty -N nad 32 muste zvit hodnotu -B nad vchoz 64,
-B mus bt minimln dvakrt vt, nebo jet lpe vce. Pravdpodobn
zjistte, e pro velk poet proces backendu je nutn zvit nkter
parametry jdra. Jsou to pedevm maximln velikost sdlen pamti SHMMAX,
maximln poet semafr SEMMNS a SEMMNI, maximln poet proces NPROC,
maximln poet proces uivatele MAXUPRC a maximln poet otevench soubor
NFILE a NINODE. Dvod pro omezen maximlnho potu backend je fakt,
e by mohlo dojt k vyerpn zdroj Vaeho systmu.</p>
<h3><a name="3.9">3.9</a> K emu slou adres pgsql_tmp?</h3>
<p>Tento adres obsahuje doasn soubory vytvoen exekutorem
dotaz. Napklad, kdy je nutn tdn k zajitn ORDER BY a
tdn m vt nroky na prostor ne povoluje parametr -S
backendu, pak je vytvoen doasn soubor k uloen extra daj.</p>
<p>Doasn soubory jsou obvykle mazny automaticky, ale me se stt, e
bhem tdn server spadne. Zastaven a dal start postmastera zajist
odstrann soubor s tchto adres.</p>
<h3><a name="3.10">3.10</a> Pro je poadovno dump a obnoven (load) databze bhem upgrade
mezi velkmi verzemi PostgreSQL?</h3>
<p>PostgreSQL se minimln mn bhem malch verz, take nap. pi upgrade z
7.2 na 7.2.1 nen nutn dump a load databze. Ale velk verze asto mn
intern formt systmovch tabulek a datovch soubor. Tyto zmny jsou
natolik rozshl, e nelze zajistit zptnou kompatibilitu pro datov
soubory. Dump ulo data v obecnm formtu, take mohou bt natena a
pouvna v novm internm formtu.</p>
<hr>
<h2>Provozn dotazy</h2>
<h3><a name="4.1">4.1</a> m se li binrn a normln kurzor?</h3>
<p>Popis najdete v manulov strnce DECLARE</p>
<h3><a name="4.2">4.2</a> Jak zskat pouze prvn dek dotazu? Nhodn dek?</h3>
<p>Podvejte se do man. strnky pkazu FETCH, nebo pouijte SELECT ...
LIMIT ... </p>
<p>Nen nutn zpracovvat cel dotaz, kdy potebujete pouze nkolik prvnch
dk. Pokud existuje index ORDER BY, PostgreSQL je schopen peruit
zpracovn dotazu po zskn poadovanho potu dk.</p>
<p>K zskn nhodnho dku pouijte:</p>
<pre>SELECT col FROM tab
ORDER BY random() LIMIT 1;
</pre>
<h3><a name="4.3">4.3</a> Jak zskm seznam tabulek nebo jinak jak jej zsk psql?</h3>
<p>Podvejte se do zdrojovch kd psql do souboru
pgsql/src/bin/psql/describe.c. Ten obsahuje SQL pkazy, kter se
pouvaj v psql metapkazech. Dle mete spustit psql s pepnaem
-E, kter zpsob zobrazen kadho dotazu, kter zpracovn
metapkazu vyvol.</p>
<h3><a name="4.4">4.4</a> Jak odstranm sloupec tabulky, jak zmnm jeho typ?</h3>
<p>Ponaje verz 7.3 mete pout pkaz ALTER TABLE DROP COLUMN. Ve
starch verzch mete pout nsledujc postup:</p>
<pre>BEGIN;
LOCK TABLE old_table;
SELECT ... -- mimo sloupec, kter chceme odstranit
INTO TABLE new_table;
DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table;
COMMIT;
</pre>
<p>Pro zmnu typu sloupce je teba provst:</p>
<pre>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;
</pre>
<p>Pot provete VACUUM FULL tab - uvolnte tm diskov prostor zabran
nyn ji neplatnmi dky.</p>
<h3><a name="4.5">4.5</a> Jak je maximln velikost dku, tabulky a databze?</h3>
<p>PostgreSQL m tato omezen:</p>
<table>
<tbody><tr><td>Maximln velikost databze:</td><td> neomezena (existuj 32TB db)
</td></tr><tr><td>Maximln velikost tabulky:</td><td> 32 TB
</td></tr><tr><td>Maximln velikost dky:</td><td> 1.6 TB
</td></tr><tr><td>Maximln velikost poloky</td><td> 1 GB
</td></tr><tr><td>Maximln poet dk v tabulce:</td><td> neomezeno
</td></tr><tr><td>Maximln poet sloupc v tabulce:</td><td> 250-1600 podle typ
</td></tr><tr><td>Maximln poet index na tabulce:</td><td> neomezeno
</td></tr></tbody></table>
<p>Ve skutenosti nic nen neomezeno, limitem bv vdy dostupn diskov
pam nebo velikost operan pamti. Pokud mte nkterou z tchto
hodnot neobvykle velkou, me dojt ke snen vkonu.</p>
<p>Maximln velikost tabulky je 32 TB a nevyaduje podporu velkch soubor
operanm systmem. Velk tabulky se ukldaj do nkolika 1 GB soubor
take limity souborovho systmu nejsou podstatn.</p>
<p>Maximln velikost tabulky a maximln poet sloupc meme
zetynsobit nastavenm velikosti bloku na 32K.</p>
<h3><a name="4.6">4.6</a> Kolik diskovho prostoru je poteba k uloen dat z normlnho
textovho souboru? </h3>
<p>PostgreSQL vyaduje a ptinsobek diskovho prostoru k uloen dat z
textovho souboru.</p>
<p>Napklad, uvaujme soubor se 100 tisci dky obsahujc na kad
dce cel slo a textov popis. Text je v prmru dvacet byt
dlouh. Textov soubor bude 2.8 MB dlouh. Velikost
databze obsahujc odpovdajc data bude zhruba 6.4 MB.</p>
<pre> 36 byt: hlavika dku (piblin)
24 byt: jedna celoseln poloka a jedna textov
4 byty: ukazatel na strnku k ntici
------------------------------------------------------
64 byt na dek
</pre>
<p>Velikost datov strnky PostgreSQL je 8KB</p>
<pre> 8192 byt na strnce
---------------------- = 128 dek na strnku
64 byt za dek
100000 dek
-------------------- = 782 strnek (zaokrouhleno nahoru)
128 dek na strnce
782 * 8192 = 6, 406, 144 byt (6.4 MB)
</pre>
<p>Indexy nemaj tak velkou reii, ale mohou bt tak velk,
protoe obsahuj indexovan data.</p>
<p>Hodnoty NULL jsou uloeny v bitmapch, take spotebuj jen velmi mlo
diskovho prostoru.</p>
<h3><a name="4.7">4.7</a> Jak zskm seznam vytvoench tabulek, index, databz?</h3>
<p>psql m sadu metapkaz k zobrazen tchto informac. Jejich seznam
zskte pkazem \?. Dle se mete podvat na obsah systmovch
tabulek zanajcch pg_. Sputn psql s parametrem -l provede
vpis nzv vech databz.</p>
<p>Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy pistupujc
k systmovm tabulkmm.</p>
<h3><a name="4.8">4.8</a> Mj dotaz je pomal a nepouv vytvoen indexy. Pro?</h3>
<p>Kad dotaz nemus nutn pout existujc indexy. Index se pouije tehdy,
kdy je tabulka vt ne urit minimln velikost, a dotaz vybr
pouze procentuln malou st dk tabulky. To proto, e nhodn
pstup k disku dan tenm indexu me bt pomalej ne linern
ten tabulky nebo sekvenn ten,</p>
<p>PostgreSQL rozhoduje o pouit index na zklad statistiky pstup k
tabulce. Tyto statistiky se shromauj pkazy VACUUM ANALYZE nebo
ANALYZE. Dky statistikm m optimizer informaci o potu dek v
tabulce a me lpe rozhodnout o pouit index. Statistiky se uplatn
pi uren optimlnho poad a metody spojen tabulek. Statistiky by
se mli aktualizovat opakovan, tak jak se mn obsah tabulek.</p>
<p>Indexy nejsou obyejn pouity pro setdn nebo spojen
tabulek. Sekvenn zpracovn nsledovan explicitnm tdnm je
obyejn rychlej ne indexn ten na velk tabulce.</p>
<p>Jinak je tomu v ppad pouit LIMIT a ORDER BY, pi kterm se
vtinou index pouije, vsledkem je pouze mal st tabulky. Funkce
MAX() a MIN() nepouvaj indexy, ale je mon tut hodnotu zskat </p>
<pre>SELECT col FROM tab
ORDER BY col [ DESC ] LIMIT 1;
</pre>
<p>Pokud si myslte, e optimizer myln zvolil sekvenn prohledvn
tabulky, pouijte pkaz SET enable_seqscan TO 'off' a zkuste zda je
indexn prohledvn rychlej.</p>
<p>Pi vyhledvn na zklad vzoru jako je nap. opertor LIKE nebo ~ se
indexy pouj pouze za uritch skutenost:</p>
<ul>
<li> zatek hledanho vzoru mus bt ukotven k zatku, tj.
<ul>
<li>vzor LIKE nesm zanat %
</li><li>regulrn vraz mus zanat ^
</li></ul>
</li><li>vzor nesm zanat intervalem, nap. [a-e]
</li><li>vyhledvan, kter nen Case sensitiv nepouv indexy. Mete ale
pout funkcionln indexy, kter jsou posny v sekci 4.12
</li><li>pi inicializaci databze (initdb) mus bt pouito C locale
(pozn. pekladatele - tud v naich podmnkch nepouiteln,
nepracovalo by esk tdn).
</li></ul>
<h3><a name="4.9">4.9</a> Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?</h3>
<p>Podvejte se do manulov strnky pkazu EXPLAIN.</p>
<h3><a name="4.10">4.10</a> Co to je R-tree index?</h3>
<p>R-tree index se pouv pro indexovn prostorovch dat. Hash index
neme obslouit prohledvn oblast. B-tree index me dit
vyhledn oblast v jedn dimenzi. R-tree index me podporovat hledn v
multidimenzionlnch datech. Pouijeme-li napklad R-tree index na
atributy typu point, pak systm me efektivn odpovdt na dotaz -
vyber vechny body uvnit obdlnk.</p>
<p>Pvodn nvrh R-tree je Guttman, A. "R-trees: A Dynamic Index
Structure for Spatial Searching." Proceedings of the 1984 ACM SIGMOD
Int'l Conf on Mgmt of Data, 45-57</p>
<p>Tyto materily naleznete v Stonebraker's "Readings in Database Systems".</p>
<p>Vestavn R-tree me slouit k indexaci polygon a
oblast. Teoreticky meme R-tree pout i pro vce dimenz (jin ne 3D).
Ve skutenosti ale takov rozen R-tree vyaduje trochu prce a
ve souastnosti chyb dokumentace jak na to.</p>
<h3><a name="4.11">4.11</a> Co je Genetic Query Optimizer?</h3>
<p>GEQO modul urychluje optimalizaci dotaz pi spojovn mnostv
tabulek metodou Genetickch algoritm (GA). To umouje zskat
velkho mnostv variant spojen pi neplnm prohledvnm.</p>
<h3><a name="4.12">4.12</a> Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn?</h3>
<p>Opertor ~ slou k porovn s regulrnm vrazem, jeho modifikace *~
pedstavuje case insensitive vyhledvn. Jedn se o obdobu LIKE a
ILIKE.</p>
<p>Pro vyhledvn bez ohledu na velk mal psmena pouijeme</p>
<pre>SELECT * FROM tab
WHERE lower(col) = 'abc';
</pre>
<p>V tomto ppad se nepouije standardn index. Nicmn, pouije se
funkcionln index, pokud jej vytvote </p>
<pre>CREATE INDEX tabindex ON tab (lower(col));
</pre>
<h3><a name="4.13">4.13</a> Jak v dotazu detekovat, e poloka je NULL?</h3>
<p>Urte pomoc IS NULL nebo IS NOT NULL</p>
<h3><a name="4.14">4.14</a> Jak jsou rozdly mezi rznmi znakovmi typy?</h3>
<pre>Typ Intern nzev Poznmka
--------------------------------------------------------------------------
VARCHAR(n) varchar omezeno maximln dlkou, bez doplnn mezerami
CHAR(n) bpchar etzec je doplnn mezerami do dan dlky
TEXT text bez hornho limitu na dlku
BYTEA bytea pole byt (bezpen lze uloit i znak NULL)
"char" char jeden znak
</pre>
<p>S internmi nzvy se setkte v systmovm katalogu a v nkterch
chybovch hlench.</p>
<p>Prvn tyi uveden typy jsou tzv. varlena typy (tj. prvn tyi byty
na disku nesou daj o dlce, nsleduj samotn data). Proto skuten
pouit prostor je vdy o nco mlo vt ne deklarovan dlka. Naopak,
tyto datov typy jsou komprimovnty TOASTem, take prostor na disku
me bt ni ne je oekvno.</p>
<p>VARCHAR(n) je vhodn pro ukldn text prommn dlky s pevn
stanovenou maximln dlkou. TEXT je pro etzce bez omezen dlky s
maximem jeden gigabajt.</p>
<p>CHAR(n) slou k ukldn etzc stejn dlky. CHAR(n) dopln przdn
znaky do specifikovan dlky, zatmco VARCHAR(n) ulo pouze pedan
znaky. BYTEA je ureno pro ukldn binrnch dat, vetn NULL
byte. Vechny zde popsan typy maj podobn vkonnostn
charakteristiky.</p>
<h3><a name="4.15.1">4.15.1</a> Jak vytvoit serial/auto-increment pole?</h3>
<p>PostgreSQL podporuje typ SERIAL. Pi jeho pouit se automaticky
vytvo SEQUENCE a index na sloupci (Pro vy verze to neplat
OVIT). Napklad:</p>
<pre>CREATE TABLE person (
id SERIAL,
name TEXT
);
</pre>
je automaticky pevedeno do
<pre>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);
</pre>
<p>Viz dokumentace create_sequence v manulovch strnkch. Dle mete pout
uniktn hodnotu OID kadho dku. Potom ale muste spoutt pg_dump
s pepnaem -o, tak aby zstaly zachovny hodnoty OID (u pkazu
copy COPY WITH OIDS).</p>
<h3><a name="4.15.2">4.15.2</a> Jak zskat hodnotu SERIAL po vloen dku?</h3>
<p>Jednou z monost je zskat budouc hodnotu SERIAL funkc nextval ped
samotnm vloenm a pak ji vloit explicitn. Napklad v jakmsi
pseudojazyku</p>
<pre>newid = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
</pre>
<p>Mete pak jet pout hodnotu newid v dalch dotazech, nap. jako
hodnotu cizho kle. Nzev automaticky vytvoen sekvence je
tabulka_sloupec_seq.</p>
<p>Alternativn mete zskat hodnotu posledn generovou sekvenc funkc
currval() po vloen</p>
<pre>execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')");
</pre>
<p>Konen mete pout OID hodnotu vrcenou pkazem INSERT, ale to je
pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI
modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme
$sth-&gt;{pg_oid_status} po kadm $sth-&gt;execute().</p>
<h3><a name="4.15.3">4.15.3</a> Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s jinmi uivateli?</h3>
<p>Nikoliv, currval() vrac hodnotu naposledy generovanou ve vaem
backendu, a ta tud nen spolen vem uivatelm.</p>
<h3><a name="4.15.4">4.15.4</a> Pro nen vygenerovan slo pouito pi peruen
transakce? Pro vznikaj dry v slovn vlastn sekvenc/SERIAL
sloupce?</h3>
<p>K zajitn efektivnosti soubhu, jsou hodnoty posloupnosti, kdy se o n
pod, a sekvence nen zamena do ukonen transakce. To zpsobuje
dry v slovn ze zruench transakc.</p>
<h3><a name="4.16">4.16</a> Co to je OID? Co je to TID?</h3>
<p>Kad dek vytvoen v PostgreSQL zsk jedinen OID. Vechna OID
generovan bhem inicializace databze jsou men ne 16384
(include/access/transam.h). Vechna OID generovan na poadavek
uivatele jsou rovna nebo vy tto hodnot. Normln, vechna OID
jsou jedinen nejen uvnit tabulky nebo databze, ale v rmci cel
instalace PostgreSQL</p>
<p>PostgreSQL pouv OID ve svm internm systmu tabulek k vytvoen
relac. Tato OID mohou bt pouita k identifikaci konkrtnho
uivatele a pouita v spojen. Pro OID hodnoty je doporuen typ
OID. Nad tmto sloupcem mete vytvoit index pro urychlen pstupu.</p>
<p>OID jsou dna vem dkm z centrln oblasti a jsou pouita v kad
databzi. Pokud potebujete zmnit OID, nebo chcete zkoprovat tabulku
s pvodnmi OID, lze pout</p>
<pre>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';
</pre>
<p>OID jsou uloena jako 4bajtov integer a peteou po tyech
miliardch. Nebylo hleno, e by se tak nkdy stalo, pesto ale plnujeme
odstranit tento limit dv ne se tak stane.</p>
<p>TID se pouvaj i identifikaci fyzickch dk s hodnotou bloku a
offsetu. TIDs se mn modifikac dk (pouv se jako ukazatel
indexu fyzickho dku).</p>
<h3><a name="4.17">4.17</a> Jak je vznam nkterch vraz pouitch v PostgreSQL?</h3>
<p>V nkterch zdrojovch kdech nebo star dokumentaci se mete setkat
s nsledujcmi vrazy, kter maj ir vznam. Zde je pklad
nekterch:</p>
<ul>
<li>tabulka, relace, tda (table, relation, class)
</li><li>dek, zznam, ntice (row, record, tuple)
</li><li>sloupec, poloka, atribut (column, field, attribute)
</li><li>vyhledn, vbr (retrieve, select)
</li><li>nhrada, prava (replace, update)
</li><li>pidn, vkldn (append, insert)
</li><li>OID, serial value (OID, serial value)
</li><li>portal, kurzor (portal, cursor)
</li><li>range variable, jmno tabulky, alias tabulky (range variable, table name, table alias)
</li></ul>
<p>seznam tchto vraz mete nalzt na
<a href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</a>.</p>
<h3><a name="4.18">4.18</a> Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
AllocSetAlloc()"?</h3>
<p>Pravdpodobn dolo k vyerpn virtuln pami na Vaem systmu, nebo
jdro m nzk limit pro urit zdroje. Vyzkouejte ped startem
posmatera</p>
<pre>ulimit -d 262144
limit datasize 256m
</pre>
<p>Zle na Vaem shellu, zda budou tyto pkazy spn, mly by zvit
limit datovho segmentu pro Vae procesy a umonit tak dokonen
dotazu. Tyto pkazy se aplikuj na aktuln proces a vechny synovsk
procesy vytvoen po proveden pkazu. Pokud mte problmy s SQL
klientem protoe backend vrac pli mnoho dat, zkuste zvit limity
ped startem klienta.</p>
<h3><a name="4.19">4.19</a> Jak se dozvm, kterou verzi PostgreSQL pouvm?</h3>
<p>V psql spuste</p>
<pre>SELECT version();
</pre>
<h3><a name="4.20">4.20</a> Pro operace s velkmi objekty kon "invalid large obj descriptor"?</h3>
<p>Vechny operace s velkmi objekty - lo_open, lo_close, ... muste
spoutt v transakci, tj. mezi pkazy BEGIN WORK a COMMIT.</p>
<p>PostgreSQL uvoluje handle velkch objekt pi skonen transakce. Pokud
budete pracovat s velkmi objekty mimo transakci, pravdpodobn dostanete
toto chybov hlen, protoe handle ji budou neplatn.</p>
<p>Pokud pouvte interface podobn ODBC muste nastavit set auto_commit off</p>
<h3><a name="4.21">4.21</a> Jak vytvoit sloupec obsahujc implicitn aktuln datum?</h3>
<p>Pouijte CURRENT_TIMESTAMP</p>
<pre>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
</pre>
<h3><a name="4.22">4.22</a> Pro jsou moje vnoen dotazy pouvajc IN tak pomal?</h3>
<p>Aktuln spojujeme tabulky se sekvennm skenovnm vsledku pro kad
dek vnjho dotazu. Pokud vnoen dotaz m pouze nkolik dk a
vnj dotaz vrac hodn dek, IN je rychl. V jinch ppadech
nahrate IN EXISTS:</p>
<pre>SELECT * FROM tab
WHERE col IN (SELECT subcol FROM subtab);
</pre>
takto
<pre>SELECT * FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
</pre>
<p>Pro urychlen vytvoete index pro subcol. Tento vkonnostn problm
byl odstrann ve verzi 7.4.</p>
<h3><a name="4.23">4.23</a> Jak provst vnj spojen (outer join)?</h3>
<p>PostgreSQL podporuje vnj spojen tabulek standardnmi SQL
pkazy. Zde jsou dva pklady:</p>
<pre>SELECT * FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
</pre>
nebo
<pre>SELECT * FROM t1 LEFT OUTER JOIN USING (col);
</pre>
<p>Tyto identick dotazy napoj t1.col na t2.col a jet pid
nepipojen dky z t1 (kter nemaj obdoby v t2). Prav spojen
(RIGHT JOIN) pid nepipojen dky z t2. FULL JOIN vrt vechny
dky, vetn nepipojench z tbulek t1 a t2. Klov slovo OUTER je
nepovinn a ve se na LEFT, RIGHT a FULL join. Bn spojen se
nazv INNER JOIN.</p>
<p>V dvjch verzch se vnj spojen tabulek mohlo simulovat pomoc
UNION a NOT IN. Napklad pro spojen tabulek tab1 a tab2, je
nsledujc dotaz ekvivalentn k vnjmu spojen dvou tabulek:</p>
<pre>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;
</pre>
<h3><a name="4.24">4.24</a> Jak provst dotaz nap nkolika databzemi?</h3>
<p>PostgreSQL nenabz dn zpsob, jak se dotzat do jin databze ne
do aktuln. Doplnk contrib/dblink umouje dotaz do ciz databze
prostednictvm funkce. Na stran klienta nen problm si otevt vce
simultlnch pstup do rznch databz a spojovat vsledek na
stran klienta.</p>
<h3><a name="4.25">4.25</a> Me funkce vrtit vce dk nebo sloupc?</h3>
<p>V PostgreSQL 7.3 mete jednodue vracet vce dk nebo sloupc z
funkce, viz:
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.</p>
<h3><a name="4.26">4.26</a> Pro nelze spolehliv vytvet a ruit doasn tabulky v
PL/pgSQL funkcch?</h3>
Peloen kd PL/pgSQL funkce je uloen ve vyrovnvac pamti, tj. funkce
je pekldna pouze pi zmn kdu, nikoliv ped kadm volnm funkce.
Nechtnm vedlejm efektem je, e voln funkce sele, kdy se funkce
odkazuje na doasnou tabulku, pokud tato tabulka byla od pekladu funkce
zruena (akoliv ji byla znovu vytvoena a existuje).
Jedinm eenm problmu je pstup k doasn tabulce pomoc
EXECUTE, tj. dynamick provdn dotazu. Tento pkaz zajist opakovan
peklad dotazu pi kadm voln funkce.<p></p>
<h3><a name="4.27">4.27</a> Jak jsou monosti replikace databz?</h3>
<p>Existuje nkolik dostupnch een master/slave replikac. Ty povoluj
modifikace master databze a slave databzm umouj pouze ten. Na
konci <a href="http://gborg.postgresql.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</a>
najdete jejich seznam. Na een multi-master replikaci se pracuje na
<a href="http://gborg.postgresql.org/project/pgreplication/projdisplay.php">http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</a>.</p>
<h3><a name="4.28">4.28</a> Jak jsou monosti ifrovn databz?</h3>
<ul>
<li><p>contrib/pgcrypto obsahuje ifrovac funkce pouiteln v SQL
dotazech.</p>
</li><li><p>K ifrovn penosu dat z klienta na server, mus bt
server peloen s podporou ssl a pepna sslv postgresql.conf mus
bt nastaven na hodnotu true. Klient mus mt vytvoen zznam
hostssl v pg_hba.conf a tak mt povolen reim ssl. Lze pout i jin
prostedky, nejen nativn podporu ssl v PostgreSQL, nap. stunel a ssh.</p>
</li><li><p>Hesla uivatel databze jsou zaifrovna ponaje verz 7.3. Ve
starch verzch toto chovn muselo bt vynuceno volbou
PASSWORD_ENCRYPTION v postgresql.conf</p>
</li><li><p>Server me bet na ifrovanm souborovm systmu.</p>
</li></ul>
<hr>
<h2>Roziovn PostgreSQL</h2>
<h3><a name="5.1">5.1</a> Napsal jsem UDF funkci, PostgreSQL vak kon dump core?</h3>
<p>Problm me bt zpsoben mnoha okolnostmi. Vyzkouejte si svoji
funkci nejdve v njak jednoduch aplikaci.</p>
<h3><a name="5.2">5.2</a> Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi
do PostgreSQL?</h3>
<p>Polete sv rozen do konference pgsql-hackers, a ono pak mon
skon v podadresi contrib.</p>
<h3><a name="5.3">5.3</a> Jak napsat funkci v C vracejc ntici?</h3>
<p>Funkce vracejc tabulky jsou podporovan PostgreSQL 7.3 a vy pro
jazyky C, PL/PgSQL a SQL. Vce naleznete v The Programmer's
Guide. Pklady tchto funkc pro C naleznete v contrib/tablefunc.</p>
<h3><a name="5.4">5.4</a> Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi
rekompilaci vzata v potaz. Pro?</h3>
<p>Makefile nem informace o zvislostech mezi hlavikovmi soubory. Muste
provst make clean a pak make. Pokud pouvte gcc, mete pout
pepna --enable-depend pkazu configure k automatickmu een
zvislost pekladaem.</p>
</body></html>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment