-
Bruce Momjian authoredBruce Momjian authored
FAQ_czech 35.91 KiB
Frequently Asked Questions
Casto kladen dotazy (FAQ) PostgreSQL
Posledn aktualizace: 29. rjna 2007 (aktualizovno pro PostgreSQL
8.3)
Soucasn sprvce: Bruce Momjian (bruce@momjian.us)
Prelozil: Pavel Stehule (pavel.stehule@gmail.com)
Nejaktulnejs verzi tohoto dokumentu naleznete na adrese
http://www.postgresql.org/files/documentation/faqs/FAQ.html
Odpovedi na otzky vzan na konkrtn platformy naleznete na adrese
http://www.postgresql.org/docs/faq/.
_________________________________________________________________
Obecn otzky
1.1) Co je to PostgreSQL? Jak je sprvn vslovnost slova PostgreSQL?
1.2) Kdo rd vvoj PostgreSQL?
1.3) Pod jakou licenc je PostgreSQL?
1.4) Na kterch platformch lze provozovat PostgreSQL?
1.5) Kde mohu zskat PostgreSQL?
1.6) Jak je posledn verze?
1.7) Kde mohu zskat podporu?
1.8) Jak a kam hlsit chyby?
1.9) Kde najdu informace o znmch chybch nebo nepodporovanch
vlastnostech?
1.10) Jak je dostupn dokumentace?
1.11) Jak se mohu naucit SQL?
1.12) Jak se mohu pripojit k tmu vvojru?
1.13) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
1.14) Je PostgreSQL pripraven na aktuln zavden letnho casu v
nekterch zemch?
Dotazy na klientsk rozhran
2.1) Kter rozhran jsou pouziteln pro PostgreSQL?
2.2) Jak nstroje lze pouzt pro PostgreSQL a web?
2.3) Existuje grafick rozhran pro PostgreSQL?
Administrativn dotazy
3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
3.2) Jak nastavit pravidla pro prstup z jinch stanic?
3.3) Jak vyladit databzi na vyss vkon?
3.4) Jak mm ladc prostredky?
3.5) Co znamen "Sorry, too many clients", kdyz se zkousm pripojit?
3.6) Proc je nutn dump a obnoven (load) databze pri upgradu
PostgreSQL?
3.7) Jak hardware bych mel pouzvat?
Provozn dotazy
4.1) Jak zskat pouze prvn rdek dotazu? Nhodn rdek?
4.2) Jak zskm seznam tabulek, indexu, databz, a definovanch
uzivatelu. Mohu videt dotazy, kter pouzv psql pro zobrazen techto
informac?
4.3) Jak zmenit datov typ sloupce?
4.4) Jak je maximln velikost rdku, tabulky a databze?
4.5) Kolik diskovho prostoru je potreba k ulozen dat z normlnho
textovho souboru?
4.6) Muj dotaz je pomal a nepouzv vytvoren indexy. Proc?
4.7) Jak zjistm, jak se vyhodnocuje muj dotaz?
4.8) Jak pouzt case-(in)sensitive regulrn vraz? Jak pouzt index
pro case insensitive hledn?
4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit
dva retezce, pokud mohou obsahovat NULL? Lze trdit podle toho, jestli
je polozka NULL nebo ne?
4.10) Jak jsou rozdly mezi ruznmi znakovmi typy?
4.11.1) Jak vytvorit serial/auto-increment polozku?
4.11.2) Jak zskat hodnotu SERIAL po vlozen rdku?
4.11.3) Nezpusob currval() a nextval() problmy ve vce uzivatelskm
prostred?
4.11.4) Proc nen vygenerovan cslo pouzito pri prerusen
transakce?Proc vznikaj dry v cslovn prostrednictvm sekvence nebo
typu SERIAL?
4.12) Co to je OID? Co je to CTID?
4.13) Co znamen chybov hlsen "ERROR: Memory exhausted in
AllocSetAlloc()"?
4.14) Jak zjistm, kterou verzi PostgreSQL pouzvm?
4.15) Jak vytvorit sloupec, kter bude implicitne obsahovat aktuln
cas?
4.16) Jak provst vnejs spojen (outer join)?
4.17) Jak provst dotaz naprc nekolika databzemi?
4.18) Muze funkce vrtit vce rdku nebo sloupcu?
4.19) Co je prcinou chyby "relation with OID xxxxx does not exist"?
4.20) Jak jsou moznosti replikace databz?
4.21) Proc v dotazu nejsou rozpoznny nzvy mch tabulek nebo funkc?
Proc jsou velk psmena v nzvech automaticky prevedena na mal
psmena?
_________________________________________________________________
Obecn otzky
1.1) Co je to PostgreSQL? Jak je sprvn vslovnost slova PostgreSQL?
Vslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres .
V rade jazyku je slovo PostgreSQL obtzne vysloviteln, proto se v
hovoru casto pouzv zjednodusen forma nzvu. Pro ty, kter by si
rdi poslechli vslovnost, je k dispozici audiozznam v MP3 formtu.
PostgreSQL je relacn databze s nektermi objektovmi rysy, kter m
moznosti tradicnch komercnch databzovch systmu s nekolika
rozsrenmi, kter lze najt v DBMS systmech prst generace.
Pouzvn PostgreSQL nen omezen a vesker zdrojov kdy jsou volne
dostupn.
Za vvojem PostgreSQL je mezinrodn skupina nezvislch vvojru
navzjem komunikujcch prostrednictvm internetu. Tento projekt nen
rzen zdnou obchodn organizac. Pokud se chcete pridat k projektu,
prectete si vvojrsk FAQ na adrese
http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html .
1.2) Kdo rd vvoj PostgreSQL?
Pokud budete hledat organizaci rdc vvoj PostgreSQL, budete
zklamni. Nic takovho neexistuje. Existuj pouze "core" a CVS skupiny
uzivatelu, ale ty existuj vce z administrtorskch duvodu nez z
organizacnch. Projekt je smerovn komunitou vvojru a uzivatelu, ke
kter se kdokoliv muze pripojit. Jedin co potrebuje, je prihlsit se
do elektronick konference. Vce ve vvojrskm FAQ.
1.3) Pod jakou licenc je PostgreSQL?
PostgreSQL je predmetem nsledujcch autorskch prv:
Dlc Copyright (c) 1996-2009, PostgreSQL Global Development Group
Dlc Copyright (c) 1994-6, Regents of the University of California
Udeluje se oprvnen k uzit, rozmnozovn, provden prav a
rozsirovn tohoto softwaru a dokumentace k nemu, pro jakkoli cely,
bez licencnho poplatku a bez psemn licencn smlouvy, za podmnky,
ze na vsech jeho kopich je uvedeno oznmen o vse uvedench prvech,
jakoz i obsah tohoto a dvou nsledujcch odstavcu.
THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V ZDNM
PRPADE ODPOVEDNA ZDN TRET OSOBE ZA PRMOU, NEPRMOU, ZVLSTN,
NAHODILOU NEBO VSLEDNOU SKODU, VCETNE USLHO ZISKU, ZPUSOBENOU UZITM
TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRPADE, ZE THE
UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MOZNOSTI VZNIKU TAKOV
SKODY.
THE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE
SPECIFICKM CELUM. NZE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A
LEZ" A THE UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO
DRZBU, PODPORU, AKTUALIZACI, VYLEPSEN NEBO MODIFIKACI.
Vse uveden je BSD licence, bezn licence otevrenho zdroje. Nen zde
zdn omezen ohledne uzit kdu zdroje. Jsme s tm spokojeni a nemme
v myslu na tto skutecnosti cokoli menit.
1.4) Na kterch platformch lze provozovat PostgreSQL?
Strucne receno, PostgreSQL bez na vsech modernch unixovch
systmech. Seznam tech, u kterch probehlo testovn, naleznete v
instalacnch instrukcch.
PostreSQL tak bez nativne na vsech Microsof Windows systmech
odvozench z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP
a Windows2003. Instalacn balcek naleznete na adrese
http://pgfoundry.org/projects/pginstaller. Na starsch systmech s
jeste MS-DOS jdrem lze spustit PostgreSQL s emulacnm programem
Cygwin.
Dle existuje port pro Novell Netware 6 port na adrese
http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
SQL&stype=all&sort=type&dir=%2F .
1.5) Kde mohu zskat PostgreSQL?
Pomoc webovho klienta z adresy http://www.postgresql.org/ftp/ nebo
klienta ftp z adresy ftp://ftp.postgresql.org/pub/.
1.6) Jak je posledn verze?
Nejnovejs verz PostgreSQL je verze 8.2.5
V plnu je uvolnovat kazdorocne jednu velkou verzi a kazdch nekolik
mescu mal verze.
1.7) Kde mohu zskat podporu?
Nejcastejs forma podpory uzivatelum PostgreSQL komunitou je
prostrednictvm e-mailu. Na nasem webovm serveru naleznete odkaz na
strnky,kde se muzete prihlsit do elektronick konference. Pro
zactek jsou doporucen konference general nebo bugs.
Dals cestou je IRC kanl #postgresql na Freenode (irc.freenode.net).
K pripojen pouzijte Unixov prkaz irc -x '#postgresql' "$USER"
irc.freenode.net nebo jakkoholiv jinho IRC klienta. V tto sti
existuje jeste spanelsk (#postgresql-es) a francouzsk
(#postgresqlfr) verze. Dals PostgreSQL kanl naleznete na EFNet.
Seznam spolecnost poskytujc komercn podporu naleznete na adrese
http://techdocs.postgresql.org/companies.php.
1.8) Jak a kam hlsit chyby?
Vyplnte formulr na adrese
http://www.postgresql.org/support/submitbug. Na nasem ftp serveru
ftp://ftp.postgresql.org/pub/ si overte, ze pouzvte aktuln verzi
PostreSQL.
Chyby reportovan prostrednictvm chybovho formulre nebo zaslnm
mailu do PostgreSQL konference obvykle generuje nsledujc odezvu:
* Nejedn se o chybu, a proc
* Jedn se o znmou chybu, kter je jiz v seznamu kolu TODO
* Tato chyba byla opravena v aktuln verzi
* Tato chyba byla jiz opravena ve verzi, kter zatm nebyla
oficilne uvolnena
* Pozadavek na dals doplnujc informace:
+ Operacn systm
+ Verze PostgreSQL
+ Test reprodukujc chybu
+ Ladc informace
+ Backtrace vstup debuggeru
* Jedn se o zatm nezjistenou chybu, pak muzete cekat
+ Zplatu odstranujc chybu, kter bude vlozena do dals velk
nebo mal verze
+ Informaci, ze se jedn o chybu, kterou nelze okamzite resit a
je proto pridna do TODO
1.9) Kde najdu informace o znmch chybch nebo nepodporovanch vlastnostech?
PostgreSQL podporuje rozsrenou podmnozinu SQL:2003. V nasem TODO
naleznete seznam znmch chyb, chybejcch vlastnost, a plny do
budoucna.
Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle:
* Pozadavek je jiz v TODO
* Pozadovan funkce nen chten protoze
+ Duplikuje jiz existujc funkci, kter respektuje SQL
standard
+ Implementac funkce by se prlis zkomplikoval kd bez
relevantnho prnosu
+ Funkce by mohla bt nebezpecn nebo nespolehliv
* Pozadavek je pridn do TODO
PostgreSQL nepozv systm pro sledovn chyb, protoze jsme zjistili,
ze je efektivnejs prmo reagovat na maily a udrzovat aktuln TODO. V
praxi je snaha o co nejrychlejs resen chyb, a chyby, kter by se
mohly projevit u mnoha uzivatelu jsou opravovny velice rychle. Jedin
msto, kde lze dohledat vsechny zmeny, rozsren a opravy v PostgreSQL
je CVS log. Poznmky k verzi "Release notes" nezachycuj vsechny
zmeny, k nemz doslo.
1.10) Jak je dostupn dokumentace?
PostgreSQL obsahuje vynikajc dokumentaci zahrnujc manul,
manulov strnky a testovac prklady. Podvejte se do adresre /doc.
Manul je prstupn online na http://www.postgresql.org/docs.
K dispozici jsou zdarma dve online knihy na adresch
http://www.postgresql.org/docs/books/awbook.html a
http://www.commandprompt.com/ppbook/. Dals literaturu lze zakoupit.
Nejpopulrnejs je od Kerryho Douglase. Seznam dostupn literatury je
na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je
kolekce technicky orientovanch clnku tematicky spojench s
PostgreSQL na adrese http://techdocs.postgresql.org/.
Rdkov klient psql m \d prkazy pro zobrazen informac o typech,
opertorech, funkcch, agregacnch funkc, atd. Pouzijte \? pro
zobrazen dostupnch prkazu.
Dals dokumentaci najdete na nasem webu.
1.11) Jak se mohu naucit SQL?
Podvejte se do vse uveden dokumentace. Dals online knihou je
"Teach Yourself SQL in 21 Days, Second Edition" na adrese
http://members.tripod.com/er4ebus/sql/index.htm. Mnoho nasich
uzivatelu doporucuje knihu The Practical SQL Handbook, Bowman, Judith
S., et al., Addison-Wesley. Dals The Complete Reference SQL, Groff et
al., McGraw-Hill.
Dals online tutorily jsou dostupn na adresch:
* http://www.intermedia.net/support/sql/sqltut.shtm
* http://sqlcourse.com
* http://www.w3schools.com/sql/default.asp
* http://mysite.verizon.net/Graeme_Birchall/id1.html
1.12) Jak se mohu pripojit k tmu vvojru?
Prostudujte si Developer's FAQ.
1.13) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
Software muzeme porovnvat z nekolika ruznch pohledu: vlastnosti,
vkon, spolehlivost, podpora a cena.
Vlastnosti
PostgreSQL nabz vetsinu funkc funkcionality velkch komercnch DBMS
systmu jako jsou: transakce, vnoren dotazy, spouste, referencn
integrita a sofistikovan systm zamykn. Poskytujeme urcit funkce,
kter ostatn systmy bezne nepodporuj. Napr. uzivatelem definovan
typy, dedicnost, pravidla (rules), a MVCC architekturu.
Vkon
Vkon PostgreSQL je srovnateln s ostatnmi komercnmi nebo Open
Source databzemi. V nekterch prpadech je rychlejs, jindy
pomalejs. Ns vkon je obvykle +/-10% vuci ostatnm databzm.
Spolehlivost
Uvedomujeme si, ze databze mus bt stoprocentne spolehliv, jinak je
nepouziteln. Snazme se, aby kazd verze byla dobre otestovna a
obsahovala minimum chyb. Kazd verze je minimlne nekolik mescu v
beta testovacm rezimu. Do produkcnho rezimu se dostane, az kdyz
nedochz k dalsm zmenm nebo opravm. Verme, ze jsem vce nez
srovnateln s ostatnmi databzemi v tto oblasti.
Podpora
Na nasich internetovch konferencch se setkv velk skupina vvojru
a uzivatelu pri resen vyskytujcch se problmu. Nase internetov
konference umoznuj kontakt velk skupiny vvojru a uzivatelu.
Nemuzeme garantovat opravu chyby, ale komercn DBMSs tak vzdy
negarantuj resen problmu. Verme ale, ze dky prmmu kontaktu na
vvojre, nasi uzivatelskou komunitu, manulum, a dostupnm zdrojovm
kdum mme leps podporu nez ostatn DBMSs. Pro ty, kter preferuj
komercn "per-incident" podporu, existuje spolecnost, kter ji
nabzej (FAQ sekce 1.7.)
Cena
PostgreSQL lze pouzvat bezplatne (a to i pro komercn pouzit). Tak
muzete neomezene pouzvat ns kd ve svch produktech s vjimkami
specifikovanmi v nas licenci (prebrme BSD licenci).
1.14) Je PostgreSQL pripraven na aktuln zavden letnho casu v nekterch
zemch?
Pocnaje verz 8.0.[4+] podporuje PostgreSQL letn cas tak pro USA.
Podpora letnho casu (daylight saving time) pro Kanadu a Zpadn
Austrlii je obsazena ve verzch 8.0.[10+] a 8.1.[6+] a vsech
nsledujcch verzch. Stars verze pouzvaly systmovou databzi
casovch zn obsahujc, krome jinho, informaci o tom, zda se pro
danou casovou znu rozlisuje mezi letnm a zimnm casem.
_________________________________________________________________
Dotazy na klientsk rozhran
2.1) Kter rozhran jsou pouziteln pro PostgreSQL?
PostgreSQL se distribuuje pouze s rozhranm pro jazyk C a embedded C.
Vsechna dals rozhran predstavuj nezvisl projekty, kter je treba
sthnout z internetu samostatne. Osamostatnen techto projektu
umoznuje nezvislost vvojovch tmu a moznost vydvat nov verze bez
ohledu na vydn nov verze PostgreSQL.
Nekter programovac jazyky jako je napr. PHP obsahuj rozhran pro
PostgreSQL. Rozhran pro jazyky jako je Perl, Tcl, Python a mnoho
dalsch jsou dostupn na adrese: http://gborg.postgresql.org v sekci
Drivers/Interfaces.
2.2) Jak nstroje lze pouzt pro PostgreSQL a web?
Dobrm vodem do problematiky databz v prostred webovch strnek
muze bt web http://www.webreview.com.
PHP (http://www.php.net) je vynikajcm rozhranm pro tvorbu webu.
Pro slozitejs lohy se casto pouzv Perl a jeho BDB:Pg rozhran s
podporou CGI - CGI.pm nebo mod_perl(u).
2.3) Existuje grafick rozhran pro PostgreSQL?
K dispozici je rada grafickch nstroju podporujcch PostgreSQL a to
od komercnch nebo open source vvojru. Podrobn seznam naleznete na
adrese http://www.postgresql.org/docs/techdocs.54.
_________________________________________________________________
Administrativn dotazy
3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
Pri spousten configure nastavte parametr --prefix
3.2) Jak nastavit pravidla pro prstup z jinch stanic?
Ve vchoz konfiguraci, PostgreSQL umoznuje pouze pripojen z
loklnho uzivatele prostrednictvm Unix domain sockets nebo TCP/IP
spojen. Bez modifikace listen_addresses v souboru postgresql.conf, a
povolen adresy v souboru $PGDATA/pg_hba.conf se nelze pripojit k
PostgreSQL z ostatnch stanic. Zmena vse zmnench parametru vyzaduje
restart databzovho serveru.
3.3) Jak vyladit databzi na vyss vkon?
Vkon systmu muzete ovlivnit ve trech oblastech:
Zmeny dotazu
* Pouzitm indexu vcetne cstecnch a funkcionlnch
* Pouzitm COPY msto opakovanch INSERTu
* Sloucenm mnoha SQL prkazu do jedn transakce snzenm rezie na
commit
* Pouzvnm CLUSTERU, pokud nactte vets pocet rdek podle indexu
* Pouzitm klauzule LIMIT v poddotazech
* Pouzitm predpripravench dotazu
* Pouzvnm ANALYZE. Tento prkaz aktualizuje statistiky, kter se
pouzvaj pri optimalizaci dotazu
* Pravideln pouzit VACUUM nebo pouzvn pg_autovacuum
* Odstranenm indexu pred rozshlmi zmenami v datech
Konfigurace serveru
Urcit parametry v souboru postgresql.conf maj vliv na vkon serveru.
Detaily naleznete v prrucce Administrtora v Server Run-time
Environment/Run-time Configuration. Dals komentre naleznete v
http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht
ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
Vber hardware
Vliv hardware na vkon serveru je popsn v dokumentech
http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html
a http://www.powerpostgresql.com/PerfList/.
3.4) Jak mm ladc prostredky?
Nastavenm log_* promennch v konfiguraci serveru si vynutte logovn
dotazu a procesnch statistik, kter Vm mohou pomoci pri laden a
optimalizaci vkonu.
3.5) Co znamen "Sorry, too many clients", kdyz se zkousm pripojit?
Prekrocil jste vchoz limit, kter je 100 soucasne pripojench
uzivatelu. V konfiguraci serveru v postgresql.conf tuto hodnotu muzete
zvetsit zmenou hodnoty max_connection. Nezapomente restartovat server.
3.6) Proc je nutn dump a obnoven (load) databze pri upgradu PostgreSQL?
Zpusob cslovn je popsn v dokumentaci na
http://www.postgresql.org/support/versioning. Instrukce k proveden
migrace na vyss verzi jsou taktz v dokumentaci na adrese
http://www.postgresql.org/docs/current/static/install-upgrading.html.
3.7) Jak hardware bych mel pouzvat?
Jelikoz PC jsou vetsinou kompatibiln, lid maj tendence verit, ze
vsechna PC jsou stejne kvalitn. Coz nen pravda. Pameti ECC, SCSI a
kvalitn zkladn desky jsou mnohem spolehlivejs a vkonnejs nez
lacinejs hardware. PostgreSQL pobez na vetsine hardwaru, nicmne
pokud je pro Vs spolehlivost a vkon systmu dulezit, je dobr
venovat cas nalezen vhodn hardwarov konfigurace. Na nasich
elektronickch konferencch muzete diskutovat o vhodnch konfiguracch
a znackch.
_________________________________________________________________
Provozn dotazy
4.1) Jak zskat pouze prvn rdek dotazu? Nhodn rdek?
Pokud potrebujete pouze nekolik rdku a pokud vte kolik, pouzijte
SELECT LIMIT. Pokud bude mozn pouzt index shodujc se s ORDER BY,
je mozn, ze se nebude provdet cel dotaz. Pokud neznte pocet
zznamu, pouzijte kurzor a prkaz FETCH.
Pro vber nhodnho rdku pouzijte prkaz ve tvaru:
SELECT col
FROM tab
ORDER BY random()
LIMIT 1;
4.2) Jak zskm seznam tabulek, indexu, databz, a definovanch uzivatelu.
Mohu videt dotazy, kter pouzv psql pro zobrazen techto informac?
V psql prkazem \dt zskte seznam tabulek. pln seznam prkazu psql
zskte prkazem \?. Alternativne si muzete prostudovat zdrojov kd
psql - soubor pgsql/src/bin/psql/describe.c, kter obsahuje SQL
prkazy, kter jsou generovny pro zskn vstupu psql "backslash"
prkazu. Tak muzete nastartovat psql s parametrem -E, kter zpusob
zobrazen vsech SQL prkazu, kter se odeslaj na server. PostgreSQL
tak podporuje SQL standard INFORMACN SCHMATA (standardn systmov
tabulky). Klasickm dotazem do systmovch tabulek zskte pozadovan
informace o strukture databze.
Systmov tabulky PostgreSQL (mimo rmec SQL standardu) pouzvaj
prefix pg_. Pro zjisten struktury databze je muzete pouzt tak, i
kdyz preferovny jsou dotazy do informacnho schmatu.
Seznam vsech databz zskte prkazem psql -l
Dals inspiraci najdete v souboru pgsql/src/tutorial/syscat.source.
Obsahuje ilustracn SELECTy potrebn k zskn informac z systmovch
tabulek databze.
4.3) Jak zmenit datov typ sloupce?
Ve verzch 8.0 a pozdejsch jednoduse:
ALTER TABLE ALTER COLUMN TYPE
V starsch verzch:
BEGIN;
ALTER TABLE tab ADD COLUMN new_col new_data_type;
UPDATE tab SET new_col = CAST(old_col AS new_data_type);
ALTER TABLE tab DROP COLUMN old_col;
COMMIT;
Po zmene spustte prkaz VACUUM FULL, aby doslo k uvolnen diskovho
prostoru pouzitho v tu chvli jiz neplatnmi zznamy.
4.4) Jak je maximln velikost rdku, tabulky a databze?
PostgreSQL m tato omezen:
Maximln velikost databze: neomezena (existuj 32TB db)
Maximln velikost tabulky: 32 TB
Maximln velikost rdky: 480GB
Maximln velikost polozky 1 GB
Maximln pocet rdku v tabulce: neomezeno
Maximln pocet sloupcu v tabulce: 250-1600 podle typu
Maximln pocet indexu na tabulce: neomezeno
Ve skutecnosti nic nen neomezeno, limitem bv vzdy dostupn diskov
pamet nebo velikost operacn pameti. Pokud mte nekterou z techto
hodnot neobvykle velkou, muze dojt ke snzen vkonu.
Maximln velikost tabulky je 32 TB a nevyzaduje podporu velkch
souboru operacnm systmem. Velk tabulky se ukldaj do nekolika 1 GB
souboru takze limity souborovho systmu nejsou podstatn.
Maximln velikost tabulky a maximln pocet sloupcu muzeme
zectyrnsobit nastavenm velikosti bloku na 32K.
Indexy jsou povolen pouze na sloupcch jejichz dlka je mens nez
2000 znaku. Pokud tuto dlku prekrocme a index potrebujeme pro
zajisten jednoznacnosti, je vhodnejs pouzt funkcionln index nad
MD5 funkc nebo fulltextov index.
4.5) Kolik diskovho prostoru je potreba k ulozen dat z normlnho textovho
souboru?
PostgreSQL vyzaduje az petinsobek diskovho prostoru k ulozen dat z
textovho souboru.
Naprklad, uvazujme soubor se 100 tisci rdky obsahujc na kazd
rdce cel cslo a textov popis. Text je v prumerne dvacet bytu
dlouh. Textov soubor bude 2.8 MB dlouh. Velikost databze
obsahujc odpovdajc data bude zhruba 5.2 MB.
24 bytu: hlavicka rdku (priblizne)
24 bytu: jedna celocseln polozka a jedna textov
+ 4 byty: ukazatel na strnku k entici
------------------------------------------------------
52 bytu na rdek
Velikost datov strnky PostgreSQL je 8192 bytu (8KB)
8192 bytu na strnce
---------------------- = 158 rdek na strnku
52 bytu za rdek
100000 rdek
----------------------- = 633 strnek (zaokrouhleno nahoru)
158 rdek na strnce
633 datovch strnek * 8192 bytu na kazdou strnku = 5,185,536 bytu (5.2 MB)
Indexy nemaj tak velkou rezii, ale mohou bt tak velk, protoze
obsahuj indexovan data.
Hodnoty NULL jsou ulozeny v bitmapch, takze zabraj jen velmi mlo
diskovho prostoru.
4.6) Muj dotaz je pomal a nepouzv vytvoren indexy. Proc?
Kazd dotaz nemus nutne pouzt existujc indexy. Index se pouzije
tehdy, kdyz je tabulka vets nez urcit minimln velikost, a dotaz
vybr pouze procentulne malou cst rdku tabulky. To proto, ze
nhodn prstup k disku dan ctenm indexu muze bt pomalejs nez
linern cten tabulky nebo sekvencn cten.
PostgreSQL rozhoduje o pouzit indexu na zklade statistiky prstupu k
tabulce. Tyto statistiky se shromazduj prkazy VACUUM ANALYZE nebo
ANALYZE. Dky statistikm m optimizer informaci o poctu rdek v
tabulce a muze lpe rozhodnout o pouzit indexu. Statistiky se uplatn
pri urcen optimlnho porad a metody spojen tabulek. Statistiky by
se meli aktualizovat opakovane, tak jak se men obsah tabulek.
Indexy nejsou obycejne pouzity pro setrden nebo spojen tabulek.
Sekvencn zpracovn nsledovan explicitnm trdenm je obycejne
rychlejs nez pouzit indexu na velk tabulce.
Jinak je tomu v prpade pouzit LIMIT a ORDER BY, pri kterm se
vetsinou index pouzije, jelikoz je vsledkem pouze mal cst tabulky.
Pokud si myslte, ze optimizer mylne zvolil sekvencn prohledvn
tabulky, pouzijte prkaz SET enable_seqscan TO 'off' a zkuste zda je
prohledvn s indexem rychlejs.
Pri vyhledvn na zklade vzoru jako je napr. opertor LIKE nebo ~ se
indexy pouzij pouze za urcitch skutecnost:
* zactek hledanho vzoru mus bt ukotven k zactku, tj.
+ vzor LIKE nesm zacnat %
+ ~ regulrn vraz mus zacnat ^
* vzor nesm zacnat intervalem, napr. [a-e]
* vyhledvan, kter nen Case sensitiv jako je ILIKE nebo ~*
nepouzv indexy. Muzete ale pouzt funkcionln indexy, kter
jsou popsny v sekci 4.8
* pri inicializaci databze (initdb) mus bt pouzito C locale nebo
vytvorte speciln text_pattern_index, kter umozn, pri
respektovn zmnench podmnek pouzit indexu operac LIKE. Pro
vyhledvn celch slov je mozn a vhodn pouzt fulltext.
4.7) Jak zjistm, jak se vyhodnocuje muj dotaz?
Podvejte se do npovedy k prkazu EXPLAIN.
4.8) Jak pouzt case-(in)sensitive regulrn vraz? Jak pouzt index pro case
insensitive hledn?
Vyhledvn prostrednictvm regulrnch vzoru zajistuje opertor ~,
kter je case-sensitive. Jeho case-insensitive varianta je opertor
~*. Case-insensitive variac opertoru LIKE je opertor ILIKE.
Case-insensitive vyhledn se res:
SELECT *
FROM tab
WHERE lower(col) = 'abc';
Tento dotaz nepouzije standardn index. Muste pouzt tzv.
funkcionln index:
CREATE INDEX tabindex ON tab (lower(col));
Pokud index vytvorme jako uniktn, tak muzeme ukldat retezce
obsahujc mal i velk psmena, ale nikoliv retezce, kter se od sebe
odlisuj jen v malch a velkch psmenech. K zajisten zpisu retezce
obsahujc pouze mal nebo pouze velk psmena pouzijte CHECK kontroly
nebo triggery.
4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit dva
retezce, pokud mohou obsahovat NULL? Lze trdit podle toho, jestli je polozka
NULL nebo ne?
Pokud chcete testovat hodnotu NULL pouzijte opertor IS:
SELECT *
FROM tab
WHERE col IS NULL;
K spojen retezcu, kter mohou obsahovat hodnotu NULL, pouzvejte
funkci COALESCE(), napr.:
SELECT COALESCE(col1, '') || COALESCE(col2, '')
FROM tab
Pokud chcete trdit podle hodnoty NULL, pouzijte vraz IS NULL nebo IS
NOT NULL v klauzuli ORDER. Hodnota pravda m prednost pred hodnotou
false a tedy pokud pouzijete:
SELECT *
FROM tab
ORDER BY (col IS NOT NULL)
tak zznamy s NULL budou na zactku setrdench dat.
4.10) Jak jsou rozdly mezi ruznmi znakovmi typy?
Typ Intern nzev Poznmky
VARCHAR(n) varchar n urcuje maximln dlku
CHAR(n) bpchar retezec je do dan dlky rozsren mezerami
TEXT text bez omezen dlky
BYTEA bytea pole bytu nespecifikovan dlky
"char" char jeden znak
Na intern nzvy muzete narazit v systmovm katalogu nebo v nekterch
chybovch hlsench.
Ctyri prvn typy jsou tzv. varlena typy (prvn ctyri byty na disku
jsou obsahuj dlku, ostatn obsahuj vlastn data). Skutecne obsazen
prostor je tedy o neco mlo vets nez deklarovan velikost. Na druhou
stranu, dels retezce jsou komprimovny, takze obsazen prostor na
disku muze bt mens nez se cek.
VARCHAR(n) je vhodn pro ukldn ruzne dlouhch retezcu u kterch
znme dlkov omezen, TEXT pro retezce bez omezen dlky (maximum je
jeden gigabyte).
CHAR(n) se pouzv pro ulozen stejne dlouhch retezcu. CHAR(n) dopln
mezerami na specifikovanou dlku, VARCHAR(n) hodnoty se ukldaj tak
jak jsou. BYTEA je pro ukldn binrnch dat - non ASCII hodnot.
Vsechny zmnen typy maj podobn vkonov charakteristiky.
4.11.1) Jak vytvorit serial/auto-increment polozku?
V PostgreSQL muzete pouzt datov typ SERIAL. Jeho pouzitm se
automaticky vytvor sekvence. Naprklad:
CREATE TABLE person (
id SERIAL,
name TEXT
);
je automaticky transformovno na:
CREATE SEQUENCE person_id_seq;
CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT
);
Podrobnejs informace najdete v manulu v popisu prkazu
create_sequence.
4.11.2) Jak zskat hodnotu SERIAL po vlozen rdku?
Nejjednodussm zpusob, jak zskat vygenerovanou hodnotu typu SERIAL,
je vyuzt klauzuli RETURNING. Pro tabulku z 4.11.1 vypad takto:
INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
Tak muzete pouzt funkci nextvall() a jej vsledek pouzt v prkazu
INSERT, nebo zavolat currval() po proveden prkazu INSERT.
4.11.3) Nezpusob currval() a nextval() problmy ve vce uzivatelskm
prostred?
Ne, currval vrac vzdy hodnotu, kter byla vygenerovna pro vs.
4.11.4) Proc nen vygenerovan cslo pouzito pri prerusen transakce?Proc
vznikaj dry v cslovn prostrednictvm sekvence nebo typu SERIAL?
Pot co sekvence vygeneruje nov cslo, tak se nedochz k zamcen
sekvence a necek se na spesn nebo nespesn dokoncen transakce.
Odvolnm transakce, kter si vyzdala csla sekvence se tato csla
nenvratne ztrat.
4.12) Co to je OID? Co je to CTID?
V prpade, ze tabulku nezalozme s atributem WITHOUT OIDS, tak m
kazd rdek uniktn identifikacn cslo OID. Toto cslo je 4 bajtov
cel cslo, kter je jedinecn v cel instalaci. Pretece po 4
miliardch rdku. PostgreSQL pouzv OIDs jako intern linky v
internch systmovch tabulkch.
K zskn uniktnho csla v nesystmovch tabulkch je vhodnejs
pouzit typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzv pouze
pro jednu tabulku a je tudz mne nchyln na pretecen. Pokud byste
se toho obvali, pouzijte typ SERIAL8.
CTID se pouzv k identifikaci konkrtnho fyzickho rdku. CTID se
men pokud je rdek modifikovn nebo znovu nacten. Pouzvaj ho indexy
jako adresaci fyzickch rdku.
4.13) Co znamen chybov hlsen "ERROR: Memory exhausted in
AllocSetAlloc()"?
Pravdepodobne jste vycerpal dostupnou virtuln pamet, nebo tvuj
kernel m prlis nzk limity u urcitch zdroju. Pred startem
PostgreSQL vyzkousejte:
ulimit -d 262144
limit datasize 256m
Mozn, ze se projde pouze jeden prkaz - zlez to na vasem shellu.
Mel by zvednout limity datovch segmentu vasich procesu na dostatecne
velkou hodnotu a snad umoznit dokoncen dotazu. Zmena limitu se bude
aplikovat pouze na aktuln proces a na vsechny nove vytvoren
procesy. Jestlize mte problm s SQL klientem, protoze vm server
vrtil prlis dat, zkuste to pred startem klienta.
4.14) Jak zjistm, kterou verzi PostgreSQL pouzvm?
V psql napiste:
SELECT version();
4.15) Jak vytvorit sloupec, kter bude implicitne obsahovat aktuln cas?
Pouzijte CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
4.16) Jak provst vnejs spojen (outer join)?
PostgreSQL podporuje standardn SQL syntaxi pro vnejs spojen. Zde
jsou dva prklady:
SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
nebo
SELECT *
FROM t1 LEFT OUTER JOIN t2 USING (col);
Tyto identick dotazy spoj sloupec t1.col k sloupci t2.col, a jeste
vrt vsechny nesprovan rdky t2 (ty, kter nedohled v t2). RIGHT
JOIN by pripojil vsechny nesprovan rdky z t2. FULL JOIN vrt
vsechny sprovan rdky i vsechny zbvajc rdky z obou tabulek.
Klcov slovo OUTER je voliteln. Bezn operace JOIN se tak oznacuje
jako vnitrn spojen.
4.17) Jak provst dotaz naprc nekolika databzemi?
Neexistuje zdn zpusob, jak se v dotazu odkazovat na tabulky z jin
nez aktuln databze. A to protoze m systmov tabulky ulozen
nezvisle v kazd databzi a nen tak plne zrejm, jak by se dotaz
proveden naprc databzemi mel chovat.
Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomoc
funkc. Druh zpusob je simultln pripojen klienta ke vsem
relevantnm databzm a sloucen vsledku na strane klienta.
4.18) Muze funkce vrtit vce rdku nebo sloupcu?
Jde to jednoduse pomoc set-returning funkce. Vce na
http://www.postgresql.org/docs/techdocs.17.
4.19) Co je prcinou chyby "relation with OID xxxxx does not exist"?
Nechtenm vedlejsm efektem kesovn SQL dotazu v PL/pgSQL funkci je
problm s neplatnmi odkazy na docasn tabulky, kter byly od prvnho
spusten funkce zruseny a znovu vytvoreny pred dalsm spustenm
PL/pgSQL funkce. Resenm je pouzt prkaz EXECUTE a to proto, ze
provdec pln SQL prkazu spoustenho prkazem EXECUTE se vytvr
pokazd znovu (neukld se do cache).
Tento problm by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssch
verzch.
4.20) Jak jsou moznosti replikace databz?
Replikaci databze umoznuje nekolik technoligi. Kazd m urcit
vhody a nevhody.
Master/Slave replikaci podporuje jeden hlavn server, kter prijm
pozadavky na zpis a cten, a nekolik podrzench serveru, kter
umoznuj pouze cten (SELECT). Nejrozsrenejsm volne dostupnm
resenm tohoto typu je Slony-I.
Replikace typu Multi-master podporuje existenci nekolika serveru s
povolenm zpisem na vce replikovanch serverech. Toto resen zvysuje
ztez serveru, protoze je nutn synchronizace serveru.
Nejrozsrenejsm volne dostupnm resenm je PGCluster.
Jeste existuje nekolik komercnch a hardware resen replikac
podporujcch ruzn modely replikace.
4.21) Proc v dotazu nejsou rozpoznny nzvy mch tabulek nebo funkc? Proc
jsou velk psmena v nzvech automaticky prevedena na mal psmena?
Nejcastejsm duvodem nerozpoznn nzvu objektu bylo pouzit vlozen
nzvu sloupce nebo tabulky mezi uvozovky pri zakldn tabulky. Pokud
se nzev zapse mezi uvozovky, pak je case sensitive, a v dusledku
toho je nutn nzvy techto sloupcu nebo tabulek v SQL prkazech tak
vkldat mezi uvozovky (pokud obsahuj velk psmena). Nekter
programy, jako je naprklad pgAdmin, automaticky pouzvaj uvozovky.
Takze pokud chcete, aby systm identifikoval identifiktor, muste:
* nepouzvat uvozovky v prkazu CREATE TABLE
* v identifiktoru pouzt pouze mal psmena
* v dotazech vkldat identifiktory do uvozovek