1 <!DOCTYPE HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN">
4 <title>PostgreSQL FAQ
</title>
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=utf-8" />
6 <meta http-equiv=
"Content-language" content=
"cs">
7 <meta name=
"description" lang=
"en" content=
"Czech translation of FAQ for PostgreSQL">
8 <meta name=
"description" lang=
"cs" content=
"Český překlad FAQ PostgreSQL">
10 <body bgcolor=
"#ffffff" text=
"#000000" link=
"#ff0000" vlink=
"#a00000" alink=
"#0000ff">
11 <h1>Frequently Asked Questions
</h1>
12 <p><i>Často kladené dotazy (FAQ) PostgreSQL
</i>
14 <p>Poslední aktualizace:
29. října
2007 (aktualizováno pro PostgreSQL
8.3)
16 <p>Současný správce: Bruce Momjian (bruce@momjian.us)
18 <p>Přeložil: Pavel Stěhule (pavel.stehule@gmail.com)
20 <p>Nejaktuálnější verzi tohoto dokumentu naleznete na adrese
21 <a href=
"http://www.postgresql.org/files/documentation/faqs/FAQ.html" title=
"http://www.postgresql.org/files/documentation/faqs/FAQ.html">http://www.postgresql.org/files/documentation/faqs/FAQ.html
</a>
23 <p>Odpovědi na otázky vázané na konkrétní platformy naleznete na
24 adrese
<a href=
"http://www.postgresql.org/docs/faq/" title=
"http://www.postgresql.org/docs/faq/">http://www.postgresql.org/docs/faq/
</a>.
27 <h2 align=
"center">Obecné otázky
</h2>
28 <a href=
"#item1.1">1.1</a>) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
<br>
29 <a href=
"#item1.2">1.2</a>) Kdo řídí vývoj PostgreSQL?
<br>
30 <a href=
"#item1.3">1.3</a>) Pod jakou licencí je PostgreSQL?
<br>
31 <a href=
"#item1.4">1.4</a>) Na kterých platformách lze provozovat PostgreSQL?
<br>
32 <a href=
"#item1.5">1.5</a>) Kde mohu získat PostgreSQL?
<br>
33 <a href=
"#item1.6">1.6</a>) Jaká je poslední verze?
<br>
34 <a href=
"#item1.7">1.7</a>) Kde mohu získat podporu?
<br>
35 <a href=
"#item1.8">1.8</a>) Jak a kam hlásit chyby?
<br>
36 <a href=
"#item1.9">1.9</a>) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?
<br>
37 <a href=
"#item1.10">1.10</a>) Jaká je dostupná dokumentace?
<br>
38 <a href=
"#item1.11">1.11</a>) Jak se mohu naučit SQL?
<br>
39 <a href=
"#item1.12">1.12</a>) Jak se mohu připojit k týmu vývojářů?
<br>
40 <a href=
"#item1.13">1.13</a>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
<br>
41 <a href=
"#item1.14">1.14</a>) Je PostgreSQL připraven na aktuální zavádění letního času v některých zemích?
<br>
42 <h2 align=
"center">Dotazy na klientská rozhraní
</h2>
43 <a href=
"#item2.1">2.1</a>) Která rozhraní jsou použitelná pro PostgreSQL?
<br>
44 <a href=
"#item2.2">2.2</a>) Jaké nástroje lze použít pro PostgreSQL a web?
<br>
45 <a href=
"#item2.3">2.3</a>) Existuje grafické rozhraní pro PostgreSQL?
<br>
46 <h2 align=
"center">Administrativní dotazy
</h2>
47 <a href=
"#item3.1">3.1</a>) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?
<br>
48 <a href=
"#item3.2">3.2</a>) Jak nastavit pravidla pro přístup z jiných stanic?
<br>
49 <a href=
"#item3.3">3.3</a>) Jak vyladit databázi na vyšší výkon?
<br>
50 <a href=
"#item3.4">3.4</a>) Jaké mám ladící prostředky?
<br>
51 <a href=
"#item3.5">3.5</a>) Co znamená
"Sorry, too many clients", když se zkouším připojit?
<br>
52 <a href=
"#item3.6">3.6</a>) Proč je nutný dump a obnovení (load) databáze při upgradu PostgreSQL?
<br>
53 <a href=
"#item3.7">3.7</a>) Jaký hardware bych měl používat?
<br>
54 <h2 align=
"center">Provozní dotazy
</h2>
55 <a href=
"#item4.1">4.1</a>) Jak získat pouze první řádek dotazu? Náhodný řádek?
<br>
56 <a href=
"#item4.2">4.2</a>) Jak získám seznam tabulek, indexů, databází, a definovaných uživatelů. Mohu vidět dotazy, které používá psql pro zobrazení těchto informací?
<br>
57 <a href=
"#item4.3">4.3</a>) Jak změnit datový typ sloupce?
<br>
58 <a href=
"#item4.4">4.4</a>) Jaká je maximální velikost řádku, tabulky a databáze?
<br>
59 <a href=
"#item4.5">4.5</a>) Kolik diskového prostoru je potřeba k uložení dat z normálního textového souboru?
<br>
60 <a href=
"#item4.6">4.6</a>) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?
<br>
61 <a href=
"#item4.7">4.7</a>) Jak zjistím, jak se vyhodnocuje můj dotaz?
<br>
62 <a href=
"#item4.8">4.8</a>) Jak použít case-(in)sensitive regulární výraz? Jak použít index pro case insensitive hledání?
<br>
63 <a href=
"#item4.9">4.9</a>) Jak v dotazu detekovat, že položka je NULL? Jak bezpečně spojit dva řetězce, pokud mohou obsahovat NULL? Lze třídit podle toho, jestli je položka NULL nebo ne?
<br>
64 <a href=
"#item4.10">4.10</a>) Jaké jsou rozdíly mezi různými znakovými typy?
<br>
65 <a href=
"#item4.11.1">4.11.1</a>) Jak vytvořit serial/auto-increment položku?
<br>
66 <a href=
"#item4.11.2">4.11.2</a>) Jak získat hodnotu SERIAL po vložení řádku?
<br>
67 <a href=
"#item4.11.3">4.11.3</a>) Nezpůsobí currval() a nextval() problémy ve více uživatelském prostředí?
<br>
68 <a href=
"#item4.11.4">4.11.4</a>) Proč není vygenerované číslo použito při přerušení transakce?Proč vznikají díry v číslování prostřednictvím sekvence nebo typu SERIAL?
<br>
69 <a href=
"#item4.12">4.12</a>) Co to je OID? Co je to CTID?
<br>
70 <a href=
"#item4.13">4.13</a>) Co znamená chybové hlášení
"ERROR: Memory exhausted in AllocSetAlloc()"?
<br>
71 <a href=
"#item4.14">4.14</a>) Jak zjistím, kterou verzi PostgreSQL používám?
<br>
72 <a href=
"#item4.15">4.15</a>) Jak vytvořit sloupec, který bude implicitně obsahovat aktuální čas?
<br>
73 <a href=
"#item4.16">4.16</a>) Jak provést vnější spojení (outer join)?
<br>
74 <a href=
"#item4.17">4.17</a>) Jak provést dotaz napříč několika databázemi?
<br>
75 <a href=
"#item4.18">4.18</a>) Může funkce vrátit více řádků nebo sloupců?
<br>
76 <a href=
"#item4.19">4.19</a>) Co je příčinou chyby
"relation with OID xxxxx does not exist"?
<br>
77 <a href=
"#item4.20">4.20</a>) Jaké jsou možnosti replikace databází?
<br>
78 <a href=
"#item4.21">4.21</a>) Proč v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proč jsou velká písmena v názvech automaticky převedena na malá písmena?
<br>
80 <h2 align=
"center">Obecné otázky
</h2>
81 <h3><a name=
"item1.1">1.1</a>) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
</h3>
82 <p>Výslovnost PostgreSQL je
<i>Post-Gres-Q-L
</i>
83 , nebo zjednodušeně
<i>Postgres
</i>
84 . V řadě jazyků je slovo PostgreSQL obtížně vyslovitelný, proto se v hovoru často používá zjednodušená forma názvu. Pro ty, kteří by si rádi poslechli výslovnost, je k dispozici audiozáznam v
<a href=
"http://www.postgresql.org/files/postgresql.mp3" title=
"http://www.postgresql.org/files/postgresql.mp3">MP3 formátu
</a>.
86 <p>PostgreSQL je relační databáze s některými objektovými rysy, která má možnosti tradičních
87 komerčních databázových systémů s několika rozšířeními, které lze najít v DBMS
88 systémech příští generace. Používání PostgreSQL není omezené a veškeré zdrojové kódy jsou
91 <p>Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojářů navzájem komunikujících
92 prostřednictvím internetu. Tento projekt není řízen žádnou obchodní organizací. Pokud se chcete
93 přidat k projektu, přečtěte si vývojářské FAQ na adrese
<a href=
"http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html" title=
"http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html
</a> .
95 <h3><a name=
"item1.2">1.2</a>) Kdo řídí vývoj PostgreSQL?
</h3>
96 <p>Pokud budete hledat organizaci řídící vývoj PostgreSQL, budete zklamáni. Nic takového
97 neexistuje. Existují pouze
"core" a CVS skupiny uživatelů, ale ty existují více z administrátorských
98 důvodů než z organizačních. Projekt je směrován komunitou vývojářů a uživatelů, ke které se
99 kdokoliv může připojit. Jediné co potřebuje, je přihlásit se do elektronické konference. Více ve
100 <a href=
"http://www.postgresql.org/docs/faqs.FAQ_DEV.html" title=
"http://www.postgresql.org/docs/faqs.FAQ_DEV.html">vývojářském FAQ
</a>.
102 <h3><a name=
"item1.3">1.3</a>) Pod jakou licencí je PostgreSQL?
</h3>
103 <p>PostgreSQL je předmětem následujících autorských práv:
105 <p>Dílčí Copyright (c)
1996-
2009, PostgreSQL Global Development Group
<br>
106 Dílčí Copyright (c)
1994-
6, Regents of the University of California
108 <p>Uděluje se oprávnění k užití, rozmnožování, provádění úprav a
109 rozšiřování tohoto softwaru a dokumentace k němu, pro jakékoli účely,
110 bez licenčního poplatku a bez písemné licenční smlouvy, za podmínky,
111 že na všech jeho kopiích je uvedeno oznámení o výše uvedených právech,
112 jakož i obsah tohoto a dvou následujících odstavců.
114 <p>THE UNIVERSITY OF CALIFORNIA (
"KALIFORNSKÁ UNIVERZITA") NENÍ V ŽÁDNÉM
115 PŘÍPADĚ ODPOVĚDNA ŽÁDNÉ TŘETÍ OSOBĚ ZA PŘÍMOU, NEPŘÍMOU, ZVLÁŠTNÍ,
116 NAHODILOU NEBO VÝSLEDNOU ŠKODU, VČETNĚ UŠLÉHO ZISKU, ZPŮSOBENOU UŽITÍM
117 TOHOTO SOFTWARU A DOKUMENTACE K NĚMU, A TO I V PŘÍPADĚ, ŽE THE
118 UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOŽNOSTI VZNIKU TAKOVÉ
121 <p>THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO
122 NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÝROBKU KE
123 SPECIFICKÝM ÚČELŮM. NÍŽE UVEDENÝ SOFTWARE JE POSKYTNUT
"JAK STOJÍ A
124 LEŽÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO
125 ÚDRŽBU, PODPORU, AKTUALIZACI, VYLEPŠENÍ NEBO MODIFIKACI.
127 <p>Výše uvedené je BSD licence, běžná licence otevřeného zdroje. Není zde
128 žádné omezení ohledně užití kódu zdroje. Jsme s tím spokojeni a nemáme
129 v úmyslu na této skutečnosti cokoli měnit.
131 <h3><a name=
"item1.4">1.4</a>) Na kterých platformách lze provozovat PostgreSQL?
</h3>
132 <p>Stručně řečeno, PostgreSQL běží na všech moderních unixových systémech. Seznam těch, u kterých proběhlo testování, naleznete v instalačních instrukcích.
134 <p>PostreSQL také běží nativně na všech Microsof Windows systémech odvozených z Microsoft Windows NT jako jsou Windows
2000SP4, WindowsXP a Windows2003. Instalační balíček naleznete na adrese
<a href=
"http://pgfoundry.org/projects/pginstaller" title=
"http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller
</a>. Na starších systémech s ještě MS-DOS jádrem lze spustit PostgreSQL s emulačním programem Cygwin.
136 <p>Dále existuje port pro Novell Netware
6 port na adrese
<a href=
"http://forge.novell.com" title=
"http://forge.novell.com">http://forge.novell.com
</a>, a pro OS/
2 verze (eComStation) na adrese
<a href=
"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F" title=
"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=
1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%
2F
</a> .
138 <h3><a name=
"item1.5">1.5</a>) Kde mohu získat PostgreSQL?
</h3>
139 <p>Pomocí webového klienta z adresy
<a href=
"http://www.postgresql.org/ftp/" title=
"http://www.postgresql.org/ftp/">http://www.postgresql.org/ftp/
</a> nebo klienta ftp z adresy
<a href=
"ftp://ftp.postgresql.org/pub/" title=
"ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/
</a>.
141 <h3><a name=
"item1.6">1.6</a>) Jaká je poslední verze?
</h3>
142 <p>Nejnovější verzí PostgreSQL je verze
8.2.5
144 <p>V plánu je uvolňovat každoročně jednu velkou verzi a každých několik měsíců malé verze.
146 <h3><a name=
"item1.7">1.7</a>) Kde mohu získat podporu?
</h3>
147 <p>Nejčastější forma podpory uživatelům PostgreSQL komunitou je prostřednictvím e-mailů. Na našem webovém serveru naleznete
<a href=
"http://www.postgresql.org/community/lists/" title=
"http://www.postgresql.org/community/lists/">odkaz
</a> na stránky,kde se můžete přihlásit do elektronické konference. Pro začátek jsou doporučené konference general nebo bugs.
149 <p>Další cestou je IRC kanál #postgresql na Freenode (irc.freenode.net). K připojení použijte Unixový příkaz irc -x '#postgresql'
"$USER" irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti existuje ještě španělská (#postgresql-es) a francouzská (#postgresqlfr) verze. Další PostgreSQL kanál naleznete na EFNet.
151 <p>Seznam společností poskytující komerční podporu naleznete na adrese
<a href=
"http://techdocs.postgresql.org/companies.php" title=
"http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php
</a>.
153 <h3><a name=
"item1.8">1.8</a>) Jak a kam hlásit chyby?
</h3>
154 <p>Vyplňte formulář na adrese
<a href=
"http://www.postgresql.org/support/submitbug" title=
"http://www.postgresql.org/support/submitbug">http://www.postgresql.org/support/submitbug
</a>. Na našem ftp serveru
<a href=
"ftp://ftp.postgresql.org/pub/" title=
"ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/
</a> si ověřte, že používáte aktuální verzi PostreSQL.
156 <p>Chyby reportované prostřednictvím chybového formuláře nebo zasláním mailu do PostgreSQL konference obvykle generuje následující odezvu:
158 <ul><li> Nejedná se o chybu, a proč
160 <li> Jedná se o známou chybu, která je již v seznamu úkolů
<a href=
"http://www.postgresql.org/docs/faqs.TODO.html" title=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</a>
162 <li> Tato chyba byla opravena v aktuální verzi
164 <li> Tato chyba byla již opravena ve verzi, která zatím nebyla oficiálně uvolněna
166 <li> Požadavek na další doplňující informace:
167 <ul><li> Operační systém
169 <li> Verze PostgreSQL
171 <li> Test reprodukující chybu
173 <li> Ladící informace
175 <li> Backtrace výstup debuggeru
179 <li> Jedná se o zatím nezjištěnou chybu, pak můžete čekat
180 <ul><li> Záplatu odstraňující chybu, která bude vložena do další velké nebo malé verze
182 <li> Informaci, že se jedná o chybu, kterou nelze okamžitě řešit a je proto přidána do
<a href=
"http://www.postgresql.org/docs/faqs.TODO.html" title=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</a>
187 <h3><a name=
"item1.9">1.9</a>) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?
</h3>
188 <p>PostgreSQL podporuje rozšířenou podmnožinu SQL:
2003. V našem
<a href=
"http://www.postgresql.org/docs/faqs.TODO.html" title=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</a> naleznete seznam známých chyb, chybějících vlastností, a plány do budoucna.
190 <p>Odezva na požadavek na novou vlastnost PostgreSQL je obvykle:
192 <ul><li> Požadavek je již v
<a href=
"http://www.postgresql.org/docs/faqs.TODO.html" title=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</a>
194 <li> Požadovaná funkce není chtěná protože
195 <ul><li> Duplikuje již existující funkci, která respektuje SQL standard
197 <li> Implementací funkce by se příliš zkomplikoval kód bez relevantního přínosu
199 <li> Funkce by mohla být nebezpečná nebo nespolehlivá
203 <li> Požadavek je přidán do
<a href=
"http://www.postgresql.org/docs/faqs.TODO.html" title=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</a>
206 <p>PostgreSQL nepožívá systém pro sledování chyb, protože jsme zjistili, že je efektivnější přímo reagovat na maily a udržovat aktuální
<a href=
"http://www.postgresql.org/docs/faqs.TODO.html" title=
"http://www.postgresql.org/docs/faqs.TODO.html">TODO
</a>. V praxi je snaha o co nejrychlejší řešení chyb, a chyby, které by se mohly projevit u mnoha uživatelů jsou opravovány velice rychle. Jediné místo, kde lze dohledat všechny změny, rozšíření a opravy v PostgreSQL je CVS log. Poznámky k verzi
"Release notes" nezachycují všechny změny, k němž došlo.
208 <h3><a name=
"item1.10">1.10</a>) Jaká je dostupná dokumentace?
</h3>
209 <p>PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál, manuálové stránky a testovací příklady. Podívejte se do adresáře /doc. Manuál je přístupný online na
<a href=
"http://www.postgresql.org/docs" title=
"http://www.postgresql.org/docs">http://www.postgresql.org/docs
</a>.
211 <p>K dispozici jsou zdarma dvě online knihy na adresách
<a href=
"http://www.postgresql.org/docs/books/awbook.html" title=
"http://www.postgresql.org/docs/books/awbook.html">http://www.postgresql.org/docs/books/awbook.html
</a> a
<a href=
"http://www.commandprompt.com/ppbook/" title=
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/
</a>. Další literaturu lze zakoupit. Nejpopulárnější je od Kerryho Douglase. Seznam dostupné literatury je na
<a href=
"http://techdocs.postgresql.org/techdocs/bookreviews.php" title=
"http://techdocs.postgresql.org/techdocs/bookreviews.php">http://techdocs.postgresql.org/techdocs/bookreviews.php
</a>. Ještě je kolekce technicky orientovaných článků tematicky spojených s PostgreSQL na adrese
<a href=
"http://techdocs.postgresql.org/" title=
"http://techdocs.postgresql.org/">http://techdocs.postgresql.org/
</a>.
213 <p>Řádkový klient psql má \d příkazy pro zobrazení informací o typech, operátorech, funkcích, agregačních funkcí, atd. Použijte \? pro zobrazení dostupných příkazů.
215 <p>Další dokumentaci najdete na našem webu.
217 <h3><a name=
"item1.11">1.11</a>) Jak se mohu naučit SQL?
</h3>
218 <p>Podívejte se do výše uvedené dokumentace. Další online knihou je
"Teach Yourself SQL in 21 Days, Second Edition" na adrese
<a href=
"http://members.tripod.com/er4ebus/sql/index.htm" title=
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm
</a>. Mnoho našich uživatelů doporučuje knihu The Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. Další The Complete Reference SQL, Groff et al., McGraw-Hill.
220 <p>Další online tutoriály jsou dostupné na adresách:
222 <ul><li> <a href=
"http://www.intermedia.net/support/sql/sqltut.shtm" title=
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm
</a>
224 <li> <a href=
"http://sqlcourse.com" title=
"http://sqlcourse.com">http://sqlcourse.com
</a>
226 <li> <a href=
"http://www.w3schools.com/sql/default.asp" title=
"http://www.w3schools.com/sql/default.asp">http://www.w3schools.com/sql/default.asp
</a>
228 <li> <a href=
"http://mysite.verizon.net/Graeme_Birchall/id1.html" title=
"http://mysite.verizon.net/Graeme_Birchall/id1.html">http://mysite.verizon.net/Graeme_Birchall/id1.html
</a>
231 <h3><a name=
"item1.12">1.12</a>) Jak se mohu připojit k týmu vývojářů?
</h3>
232 <p>Prostudujte si
<a href=
"http://www.postgresql.org/docs/faqs.FAQ_DEV.html" title=
"http://www.postgresql.org/docs/faqs.FAQ_DEV.html">Developer's FAQ
</a>.
234 <h3><a name=
"item1.13">1.13</a>) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
</h3>
235 <p>Software můžeme porovnávat z několika různých pohledů: vlastnosti, výkon, spolehlivost, podpora a cena.
238 <h4> Vlastnosti
</h4>
239 <p>PostgreSQL nabízí většinu funkcí funkcionality velkých komerčních DBMS systémů jako jsou: transakce, vnořené dotazy, spouště, referenční integrita a sofistikovaný systém zamykání. Poskytujeme určité funkce, které ostatní systémy běžně nepodporují. Např. uživatelem definované typy, dědičnost, pravidla (rules), a MVCC architekturu.
242 <p>Výkon PostgreSQL je srovnatelný s ostatními komerčními nebo Open Source databázemi. V některých případech je rychlejší, jindy pomalejší. Náš výkon je obvykle +/-
10% vůči ostatním databázím.
244 <h4> Spolehlivost
</h4>
245 <p>Uvědomujeme si, že databáze musí být stoprocentně spolehlivá, jinak je nepoužitelná. Snažíme se, aby každá verze byla dobře otestována a obsahovala minimum chyb. Každá verze je minimálně několik měsíců v beta testovacím režimu. Do produkčního režimu se dostane, až když nedochází k dalším změnám nebo opravám. Věříme, že jsem více než srovnatelní s ostatními databázemi v této oblasti.
248 <p>Na našich internetových konferencích se setkává velká skupina vývojářů a uživatelů při řešení vyskytujících se problémů.
249 Naše internetové konference umožňují kontakt velké skupiny vývojářů a uživatelů. Nemůžeme garantovat opravu chyby, ale komerční DBMSs také vždy negarantují řešení problémů. Věříme ale, že díky přímému kontaktu na vývojáře, naši uživatelskou komunitu, manuálům, a dostupným zdrojovým kódům máme lepší podporu než ostatní DBMSs. Pro ty, kteří preferují komerční
"per-incident" podporu, existuje společností, kteří ji nabízejí (FAQ sekce
1.7.)
252 <p>PostgreSQL lze používat bezplatně (a to i pro komerční použití). Také můžete neomezeně používat náš kód ve svých produktech s výjimkami specifikovanými v naší licenci (přebíráme BSD licenci).
254 <h3><a name=
"item1.14">1.14</a>) Je PostgreSQL připraven na aktuální zavádění letního času v některých zemích?
</h3>
255 <p>Počínaje verzí
8.0.[
4+] podporuje PostgreSQL letní čas také pro USA. Podpora letního času (daylight saving time) pro Kanadu a Západní Austrálii je obsažena ve verzích
8.0.[
10+] a
8.1.[
6+] a všech následujících verzích. Starší verze používaly systémovou databázi časových zón obsahující, kromě jiného, informaci o tom, zda se pro danou časovou zónu rozlišuje mezi letním a zimním časem.
258 <h2 align=
"center">Dotazy na klientská rozhraní
</h2>
259 <h3><a name=
"item2.1">2.1</a>) Která rozhraní jsou použitelná pro PostgreSQL?
</h3>
260 <p>PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C. Všechna další rozhraní představují nezávislé projekty, které je třeba stáhnout z internetu samostatně. Osamostatnění těchto projektů umožňuje nezávislost vývojových týmů a možnost vydávat nové verze bez ohledu na vydání nové verze PostgreSQL.
262 <p>Některé programovací jazyky jako je např. PHP obsahují rozhraní pro PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho dalších jsou dostupné na adrese:
<a href=
"http://gborg.postgresql.org" title=
"http://gborg.postgresql.org">http://gborg.postgresql.org
</a> v sekci Drivers/Interfaces.
264 <h3><a name=
"item2.2">2.2</a>) Jaké nástroje lze použít pro PostgreSQL a web?
</h3>
265 <p>Dobrým úvodem do problematiky databází v prostředí webových stránek může být web
<a href=
"http://www.webreview.com" title=
"http://www.webreview.com">http://www.webreview.com
</a>.
267 <p>PHP (
<a href=
"http://www.php.net" title=
"http://www.php.net">http://www.php.net
</a>) je vynikajícím rozhraním pro tvorbu webů.
269 <p>Pro složitější úlohy se často používá Perl a jeho BDB:Pg rozhraní s podporou CGI - CGI.pm nebo mod_perl(u).
271 <h3><a name=
"item2.3">2.3</a>) Existuje grafické rozhraní pro PostgreSQL?
</h3>
272 <p>K dispozici je řada grafických nástrojů podporujících PostgreSQL a to od komerčních nebo open source vývojářů. Podrobný seznam naleznete na adrese
273 <a href=
"http://www.postgresql.org/docs/techdocs.54" title=
"http://www.postgresql.org/docs/techdocs.54">http://www.postgresql.org/docs/techdocs
.54</a>.
276 <h2 align=
"center">Administrativní dotazy
</h2>
277 <h3><a name=
"item3.1">3.1</a>) Jak nainstalovat PostgreSQL jinam než do /usr/local/pgsql?
</h3>
278 <p>Při spouštění configure nastavte parametr --prefix
280 <h3><a name=
"item3.2">3.2</a>) Jak nastavit pravidla pro přístup z jiných stanic?
</h3>
281 <p>Ve výchozí konfiguraci, PostgreSQL umožňuje pouze připojení z lokálního uživatele prostřednictvím 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 připojit k PostgreSQL z ostatních stanic. Změna výše zmíněných parametrů vyžaduje restart databázového serveru.
283 <h3><a name=
"item3.3">3.3</a>) Jak vyladit databázi na vyšší výkon?
</h3>
284 <p>Výkon systému můžete ovlivnit ve třech oblastech:
286 <h4> Změny dotazu
</h4>
287 <ul><li> Použitím indexů včetně částečných a funkcionálních
289 <li> Použitím COPY místo opakovaných INSERTů
291 <li> Sloučením mnoha SQL příkazů do jedné transakce snížením režie na commit
293 <li> Používáním CLUSTERU, pokud načítáte větší počet řádek podle indexu
295 <li> Použitím klauzule LIMIT v poddotazech
297 <li> Použitím předpřipravených dotazů
299 <li> Používáním ANALYZE. Tento příkaz aktualizuje statistiky, které se používají při optimalizaci dotazu
301 <li> Pravidelné použití VACUUM nebo používání pg_autovacuum
303 <li> Odstraněním indexů před rozsáhlými změnami v datech
306 <h4> Konfigurace serveru
</h4>
307 <p>Určité parametry v souboru postgresql.conf mají vliv na výkon serveru. Detaily naleznete v příručce Administrátora v Server Run-time Environment/Run-time Configuration. Další komentáře naleznete v
<a href=
"http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html" title=
"http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html
</a> a
<a href=
"http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html" title=
"http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html">http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html
</a>.
309 <h4> Výběr hardware
</h4>
310 <p>Vliv hardware na výkon serveru je popsán v dokumentech
<a href=
"http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html" title=
"http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html">http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html
</a> a
<a href=
"http://www.powerpostgresql.com/PerfList/" title=
"http://www.powerpostgresql.com/PerfList/">http://www.powerpostgresql.com/PerfList/
</a>.
312 <h3><a name=
"item3.4">3.4</a>) Jaké mám ladící prostředky?
</h3>
313 <p>Nastavením log_* proměnných v konfiguraci serveru si vynutíte logování dotazů a procesních statistik, které Vám mohou pomoci při ladění a optimalizaci výkonu.
315 <h3><a name=
"item3.5">3.5</a>) Co znamená
"Sorry, too many clients", když se zkouším připojit?
</h3>
316 <p>Překročil jste výchozí limit, který je
100 současně připojených uživatelů. V konfiguraci serveru v postgresql.conf tuto hodnotu můžete zvětšit změnou hodnoty max_connection. Nezapomeňte restartovat server.
318 <h3><a name=
"item3.6">3.6</a>) Proč je nutný dump a obnovení (load) databáze při upgradu PostgreSQL?
</h3>
319 <p>Způsob číslování je popsán v dokumentaci na
<a href=
"http://www.postgresql.org/support/versioning" title=
"http://www.postgresql.org/support/versioning">http://www.postgresql.org/support/versioning
</a>. Instrukce k provedení migrace na vyšší verzi jsou taktéž v dokumentaci na adrese
<a href=
"http://www.postgresql.org/docs/current/static/install-upgrading.html" title=
"http://www.postgresql.org/docs/current/static/install-upgrading.html">http://www.postgresql.org/docs/current/static/install-upgrading.html
</a>.
321 <h3><a name=
"item3.7">3.7</a>) Jaký hardware bych měl používat?
</h3>
322 <p>Jelikož PC jsou většinou kompatibilní, lidé mají tendence věřit, že všechna PC jsou stejně kvalitní. Což není pravda. Paměti ECC, SCSI a kvalitní základní desky jsou mnohem spolehlivější a výkonnější než lacinější hardware. PostgreSQL poběží na většině hardwaru, nicméně pokud je pro Vás spolehlivost a výkon systému důležitá, je dobré věnovat čas nalezení vhodné hardwarové konfigurace. Na našich elektronických konferencích můžete diskutovat o vhodných konfiguracích a značkách.
325 <h2 align=
"center">Provozní dotazy
</h2>
326 <h3><a name=
"item4.1">4.1</a>) Jak získat pouze první řádek dotazu? Náhodný řádek?
</h3>
327 <p>Pokud potřebujete pouze několik řádků a pokud víte kolik, použijte
328 SELECT LIMIT. Pokud bude možné použít index shodující se s ORDER BY,
329 je možné, že se nebude provádět celý dotaz. Pokud neznáte počet záznamů,
330 použijte kurzor a příkaz FETCH.
332 <p>Pro výběr náhodného řádku použijte příkaz ve tvaru:
340 <h3><a name=
"item4.2">4.2</a>) Jak získám seznam tabulek, indexů, databází, a definovaných uživatelů. Mohu vidět dotazy, které používá psql pro zobrazení těchto informací?
</h3>
341 <p>V psql příkazem \dt získáte seznam tabulek. Úplný seznam příkazů psql získáte příkazem \?. Alternativně si můžete prostudovat zdrojový kód psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL příkazy, které jsou generovány pro získání výstupu psql
"backslash" příkazů. Také můžete nastartovat psql s parametrem -E, který způsobí zobrazení všech SQL příkazů, které se odesílají na server. PostgreSQL také podporuje SQL standard INFORMAČNÍ SCHÉMATA (standardní systémové tabulky). Klasickým dotazem do systémových tabulek získáte požadované informace o struktuře databáze.
343 <p>Systémové tabulky PostgreSQL (mimo rámec SQL standardů) používají prefix pg_. Pro zjištění struktury databáze je můžete použít také, i když preferovány jsou dotazy do informačního schématu.
345 <p>Seznam všech databází získáte příkazem psql -l
347 <p>Další inspiraci najdete v souboru pgsql/src/tutorial/syscat.source. Obsahuje ilustrační SELECTy potřebné k získání informací z systémových tabulek databáze.
349 <h3><a name=
"item4.3">4.3</a>) Jak změnit datový typ sloupce?
</h3>
350 <p>Ve verzích
8.0 a pozdějších jednoduše:
353 ALTER TABLE ALTER COLUMN TYPE
354 </pre><p>V starších verzích:
358 ALTER TABLE tab ADD COLUMN new_col new_data_type;
359 UPDATE tab SET new_col = CAST(old_col AS new_data_type);
360 ALTER TABLE tab DROP COLUMN old_col;
362 </pre><p>Po změně spusťte příkaz VACUUM FULL, aby došlo k uvolnění diskového prostoru použitého v tu chvíli již neplatnými záznamy.
364 <h3><a name=
"item4.4">4.4</a>) Jaká je maximální velikost řádku, tabulky a databáze?
</h3>
365 <p>PostgreSQL má tato omezení:
368 <tr><td> Maximální velikost databáze:
</td><td> neomezena (existují
32TB db)
370 <tr><td> Maximální velikost tabulky:
</td><td> 32 TB
372 <tr><td> Maximální velikost řádky:
</td><td> 480GB
374 <tr><td> Maximální velikost položky
</td><td> 1 GB
376 <tr><td> Maximální počet řádků v tabulce:
</td><td> neomezeno
378 <tr><td> Maximální počet sloupců v tabulce:
</td><td> 250-
1600 podle typů
380 <tr><td> Maximální počet indexů na tabulce:
</td><td> neomezeno
383 <p>Ve skutečnosti nic není neomezeno, limitem bývá vždy dostupná disková
384 paměť nebo velikost operační paměti. Pokud máte některou z těchto
385 hodnot neobvykle velkou, může dojít ke snížení výkonu.
387 <p>Maximální velikost tabulky je
32 TB a nevyžaduje podporu velkých
388 souborů operačním systémem. Velké tabulky se ukládají do několika
1 GB
389 souborů takže limity souborového systému nejsou podstatné.
391 <p>Maximální velikost tabulky a maximální počet sloupců můžeme
392 zečtyřnásobit nastavením velikosti bloku na
32K.
394 <p>Indexy jsou povolené pouze na sloupcích jejichž délka je menší než
2000 znaků. Pokud tuto délku překročíme a index potřebujeme pro zajištění jednoznačnosti, je vhodnější použít funkcionální index nad MD5 funkcí nebo fulltextový index.
396 <h3><a name=
"item4.5">4.5</a>) Kolik diskového prostoru je potřeba k uložení dat z normálního textového souboru?
</h3>
397 <p>PostgreSQL vyžaduje až pětinásobek diskového prostoru k uložení dat z
400 <p>Například, uvažujme soubor se
100 tisíci řádky obsahující na každé
401 řádce celé číslo a textový popis. Text je v průměrně dvacet bytů
402 dlouhý. Textový soubor bude
2.8 MB dlouhý. Velikost databáze
403 obsahující odpovídající data bude zhruba
5.2 MB.
406 24 bytů: hlavička řádku (přibližně)
407 24 bytů: jedna celočíselná položka a jedna textová
408 +
4 byty: ukazatel na stránku k entici
409 ------------------------------------------------------
411 </pre><p>Velikost datové stránky PostgreSQL je
8192 bytů (
8KB)
415 ---------------------- =
158 řádek na stránku
419 ----------------------- =
633 stránek (zaokrouhleno nahoru)
422 633 datových stránek *
8192 bytů na každou stránku =
5,
185,
536 bytů (
5.2 MB)
423 </pre><p>Indexy nemají tak velkou režii, ale mohou být také velké, protože
424 obsahují indexovaná data.
426 <p>Hodnoty NULL jsou uloženy v bitmapách, takže zabírají jen velmi málo
429 <h3><a name=
"item4.6">4.6</a>) Můj dotaz je pomalý a nepoužívá vytvořené indexy. Proč?
</h3>
430 <p>Každý dotaz nemusí nutně použít existující indexy. Index se použije
431 tehdy, když je tabulka větší než určitá minimální velikost, a dotaz
432 vybírá pouze procentuálně malou část řádků tabulky. To proto, že
433 náhodný přístup k disku daný čtením indexu může být pomalejší než
434 lineární čtení tabulky nebo sekvenční čtení.
436 <p>PostgreSQL rozhoduje o použití indexů na základě statistiky přístupů k
437 tabulce. Tyto statistiky se shromažďují příkazy VACUUM ANALYZE nebo
438 ANALYZE. Díky statistikám má optimizer informaci o počtu řádek v
439 tabulce a může lépe rozhodnout o použití indexů. Statistiky se uplatní
440 při určení optimálního pořadí a metody spojení tabulek. Statistiky by
441 se měli aktualizovat opakovaně, tak jak se mění obsah tabulek.
443 <p>Indexy nejsou obyčejně použity pro setřídění nebo spojení tabulek.
444 Sekvenční zpracování následované explicitním tříděním je obyčejně
445 rychlejší než použití indexu na velké tabulce.
447 <p>Jinak je tomu v případě použití LIMIT a ORDER BY, při kterém se
448 většinou index použije, jelikož je výsledkem pouze malá část tabulky.
450 <p>Pokud si myslíte, že optimizer mylně zvolil sekvenční prohledávání
451 tabulky, použijte příkaz SET enable_seqscan TO 'off' a zkuste zda je
452 prohledávání s indexem rychlejší.
454 <p>Při vyhledávání na základě vzoru jako je např. operátor LIKE nebo ~ se
455 indexy použijí pouze za určitých skutečností:
457 <ul><li> začátek hledaného vzoru musí být ukotven k začátku, tj.
458 <ul><li> vzor LIKE nesmí začínat %
460 <li> ~ regulární výraz musí začínat ^
464 <li> vzor nesmí začínat intervalem, např. [a-e]
466 <li> vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~* nepoužívá indexy. Můžete ale použít funkcionální indexy, které jsou popsány v sekci
4.8
468 <li> při inicializaci databáze (initdb) musí být použito C locale nebo vytvořte speciální text_pattern_index, který umožní, při respektování zmíněných podmínek použití indexu operací LIKE. Pro vyhledávání celých slov je možné a výhodné použít fulltext.
471 <h3><a name=
"item4.7">4.7</a>) Jak zjistím, jak se vyhodnocuje můj dotaz?
</h3>
472 <p>Podívejte se do nápovědy k příkazu EXPLAIN.
474 <h3><a name=
"item4.8">4.8</a>) Jak použít case-(in)sensitive regulární výraz? Jak použít index pro case insensitive hledání?
</h3>
475 <p>Vyhledávání prostřednictvím regulárních vzorů zajišťuje operátor ~, který je case-sensitive. Jeho case-insensitive varianta je operátor ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE.
477 <p>Case-insensitive vyhledání se řeší:
482 WHERE lower(col) = 'abc';
483 </pre><p>Tento dotaz nepoužije standardní index. Musíte použít tzv. funkcionální index:
486 CREATE INDEX tabindex ON tab (lower(col));
487 </pre><p>Pokud index vytvoříme jako unikátní, tak můžeme ukládat řetězce obsahující malá i velká písmena, ale nikoliv řetězce, které se od sebe odlišují jen v malých a velkých písmenech. K zajištění zápisu řetězce obsahující pouze malá nebo pouze velká písmena použijte CHECK kontroly nebo triggery.
489 <h3><a name=
"item4.9">4.9</a>) Jak v dotazu detekovat, že položka je NULL? Jak bezpečně spojit dva řetězce, pokud mohou obsahovat NULL? Lze třídit podle toho, jestli je položka NULL nebo ne?
</h3>
490 <p>Pokud chcete testovat hodnotu NULL použijte operátor IS:
496 </pre><p>K spojení řetězců, které mohou obsahovat hodnotu NULL, používejte funkci COALESCE(), např.:
499 SELECT COALESCE(col1, '') || COALESCE(col2, '')
501 </pre><p>Pokud chcete třídit podle hodnoty NULL, použijte výraz IS NULL nebo IS NOT NULL v klauzuli ORDER. Hodnota pravda má přednost před hodnotou false a tedy pokud použijete:
506 ORDER BY (col IS NOT NULL)
507 </pre><p>tak záznamy s NULL budou na začátku setříděných dat.
509 <h3><a name=
"item4.10">4.10</a>) Jaké jsou rozdíly mezi různými znakovými typy?
</h3>
511 <tr><td>Typ
</td><td> Interní název
</td><td> Poznámky
513 <tr><td> VARCHAR(n)
</td><td> varchar
</td><td> n určuje maximální délku
515 <tr><td> CHAR(n)
</td><td> bpchar
</td><td> řetězec je do dané délky rozšířen mezerami
517 <tr><td> TEXT
</td><td> text
</td><td> bez omezení délky
519 <tr><td> BYTEA
</td><td> bytea
</td><td> pole bytů nespecifikované délky
521 <tr><td> "char"</td><td> char
</td><td> jeden znak
524 <p>Na interní názvy můžete narazit v systémovém katalogu nebo v některých chybových hlášeních.
526 <p>Čtyři první typy jsou tzv. varlena typy (první čtyři byty na disku jsou obsahují délku, ostatní obsahují vlastní data). Skutečně obsazený prostor je tedy o něco málo větší než deklarovaná velikost. Na druhou stranu, delší řetězce jsou komprimovány, takže obsazený prostor na disku může být menší než se čeká.
528 <p>VARCHAR(n) je vhodný pro ukládání různě dlouhých řetězců u kterých známe délkové omezení, TEXT pro řetězce bez omezení délky (maximum je jeden gigabyte).
530 <p>CHAR(n) se používá pro uložení stejně dlouhých řetězců. CHAR(n) doplní mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot. Všechny zmíněné typy mají podobné výkonové charakteristiky.
532 <h3><a name=
"item4.11.1">4.11.1</a>) Jak vytvořit serial/auto-increment položku?
</h3>
533 <p>V PostgreSQL můžete použít datový typ SERIAL. Jeho použitím se automaticky vytvoří sekvence.
537 CREATE TABLE person (
541 </pre><p>je automaticky transformováno na:
544 CREATE SEQUENCE person_id_seq;
545 CREATE TABLE person (
546 id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
549 </pre><p>Podrobnější informace najdete v manuálu v popisu příkazu create_sequence.
551 <h3><a name=
"item4.11.2">4.11.2</a>) Jak získat hodnotu SERIAL po vložení řádku?
</h3>
552 <p>Nejjednodušším způsob, jak získat vygenerovanou hodnotu typu SERIAL, je využít klauzuli RETURNING. Pro tabulku z
4.11.1 vypadá takto:
555 INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
556 </pre><p>Také můžete použít funkci nextvall() a její výsledek použít v příkazu INSERT, nebo zavolat currval() po provedení příkazu INSERT.
558 <h3><a name=
"item4.11.3">4.11.3</a>) Nezpůsobí currval() a nextval() problémy ve více uživatelském prostředí?
</h3>
559 <p>Ne, currval vrací vždy hodnotu, která byla vygenerována pro vás.
561 <h3><a name=
"item4.11.4">4.11.4</a>) Proč není vygenerované číslo použito při přerušení transakce?Proč vznikají díry v číslování prostřednictvím sekvence nebo typu SERIAL?
</h3>
562 <p>Poté co sekvence vygeneruje nové číslo, tak se nedochází k zamčení sekvence a nečeká se na úspěšné nebo neúspěšné dokončení transakce. Odvoláním transakce, která si vyžádala čísla sekvence se tato čísla nenávratně ztratí.
564 <h3><a name=
"item4.12">4.12</a>) Co to je OID? Co je to CTID?
</h3>
565 <p>V případě, že tabulku nezaložíme s atributem WITHOUT OIDS, tak má každý řádek unikátní identifikační číslo OID. Toto číslo je
4 bajtové celé číslo, které je jedinečné v celé instalaci. Přeteče po
4 miliardách řádků. PostgreSQL používá OIDs jako interní linky v interních systémových tabulkách.
567 <p>K získání unikátního čísla v nesystémových tabulkách je vhodnější použití typu SERIAL než OID, jelikož sekvence SERIAL se používá pouze pro jednu tabulku a je tudíž méně náchylná na přetečení. Pokud byste se toho obávali, použijte typ SERIAL8.
569 <p>CTID se používá k identifikaci konkrétního fyzického řádku. CTID se mění pokud je řádek modifikován nebo znovu načten. Používají ho indexy jako adresaci fyzických řádků.
571 <h3><a name=
"item4.13">4.13</a>) Co znamená chybové hlášení
"ERROR: Memory exhausted in AllocSetAlloc()"?
</h3>
572 <p>Pravděpodobně jste vyčerpal dostupnou virtuální paměť, nebo tvůj kernel
573 má příliš nízké limity u určitých zdrojů. Před startem PostgreSQL vyzkoušejte:
578 </pre><p>Možná, že se projde pouze jeden příkaz - záleží to na vašem shellu.
579 Měl by zvednout limity datových segmentů vašich procesů na dostatečně velkou
580 hodnotu a snad umožnit dokončení dotazu. Změna limitů se bude aplikovat
581 pouze na aktuální proces a na všechny nově vytvořené procesy. Jestliže máte
582 problém s SQL klientem, protože vám server vrátil příliš dat, zkuste to
583 před startem klienta.
585 <h3><a name=
"item4.14">4.14</a>) Jak zjistím, kterou verzi PostgreSQL používám?
</h3>
591 <h3><a name=
"item4.15">4.15</a>) Jak vytvořit sloupec, který bude implicitně obsahovat aktuální čas?
</h3>
592 <p>Použijte CURRENT_TIMESTAMP:
595 CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
597 <h3><a name=
"item4.16">4.16</a>) Jak provést vnější spojení (outer join)?
</h3>
598 <p>PostgreSQL podporuje standardní SQL syntaxi pro vnější spojení. Zde jsou
603 FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
608 FROM t1 LEFT OUTER JOIN t2 USING (col);
609 </pre><p>Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a ještě vrátí všechny nespárované řádky t2 (ty, které nedohledá v t2). RIGHT JOIN by připojil všechny nespárované řádky z t2. FULL JOIN vrátí všechny spárované řádky i všechny zbývající řádky z obou tabulek. Klíčové slovo OUTER je volitelné. Běžná operace JOIN se také označuje jako vnitřní spojení.
611 <h3><a name=
"item4.17">4.17</a>) Jak provést dotaz napříč několika databázemi?
</h3>
612 <p>Neexistuje žádný způsob, jak se v dotazu odkazovat na tabulky z jiné než aktuální databáze. A to protože má systémové tabulky uložené nezávisle v každé databázi a není tak úplně zřejmé, jak by se dotaz provedený napříč databázemi měl chovat.
614 <p>Jeden z doplňků dblink umožňuje dotaz nad několika tabulkami pomocí funkcí. Druhý způsob je simultální připojení klienta ke všem relevantním databázím a sloučení výsledku na straně klienta.
616 <h3><a name=
"item4.18">4.18</a>) Může funkce vrátit více řádků nebo sloupců?
</h3>
617 <p>Jde to jednoduše pomocí set-returning funkce. Více na
618 <a href=
"http://www.postgresql.org/docs/techdocs.17" title=
"http://www.postgresql.org/docs/techdocs.17">http://www.postgresql.org/docs/techdocs
.17</a>.
620 <h3><a name=
"item4.19">4.19</a>) Co je příčinou chyby
"relation with OID xxxxx does not exist"?
</h3>
621 <p>Nechtěným vedlejším efektem kešování SQL dotazů v PL/pgSQL funkci je problém s neplatnými odkazy na dočasné tabulky, které byly od prvního spuštění funkce zrušeny a znovu vytvořeny před dalším spuštěním PL/pgSQL funkce. Řešením je použít příkaz EXECUTE a to proto, že prováděcí plán SQL příkazu spouštěného příkazem EXECUTE se vytváří pokaždé znovu (neukládá se do cache).
623 <p>Tento problém by se neměl vyskytovat u PostgreSQL verze
8.3 a vyšších verzích.
625 <h3><a name=
"item4.20">4.20</a>) Jaké jsou možnosti replikace databází?
</h3>
626 <p>Replikaci databáze umožňuje několik technoligií. Každá má určité výhody a nevýhody.
628 <p>Master/Slave replikaci podporuje jeden hlavní server, který přijímá požadavky na zápis a čtení, a několik podřízených serverů, které umožňují pouze čtení (SELECT). Nejrozšířenějším volně dostupným řešením tohoto typu je
<a href=
"http://main.slony.info/" title=
"http://main.slony.info/">Slony-I
</a>.
630 <p>Replikace typu Multi-master podporuje existenci několika serverů s povoleným zápisem na více replikovaných serverech. Toto řešení zvyšuje zátěž serverů, protože je nutná synchronizace serverů. Nejrozšířenějším volně dostupným řešením je
<a href=
"http://pgfoundry.org/projects/pgcluster/" title=
"http://pgfoundry.org/projects/pgcluster/">PGCluster
</a>.
632 <p>Ještě existuje několik komerčních a hardware řešení replikací podporujících různé modely replikace.
634 <h3><a name=
"item4.21">4.21</a>) Proč v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proč jsou velká písmena v názvech automaticky převedena na malá písmena?
</h3>
635 <p>Nejčastějším důvodem nerozpoznání názvu objektu bylo použití vložení názvu sloupce nebo tabulky mezi uvozovky při zakládání tabulky. Pokud se název zapíše mezi uvozovky, pak je case sensitive, a v důsledku toho je nutné názvy těchto sloupců nebo tabulek v SQL příkazech také vkládat mezi uvozovky (pokud obsahují velká písmena). Některé programy, jako je například pgAdmin, automaticky používají uvozovky. Takže pokud chcete, aby systém identifikoval identifikátor, musíte:
637 <ul><li> nepoužívat uvozovky v příkazu CREATE TABLE
639 <li> v identifikátoru použít pouze malá písmena
641 <li> v dotazech vkládat identifikátory do uvozovek