~ubuntu-branches/ubuntu/lucid/postgresql-8.4/lucid-proposed

« back to all changes in this revision

Viewing changes to doc/src/FAQ/FAQ_czech.html

  • Committer: Bazaar Package Importer
  • Author(s): Martin Pitt
  • Date: 2009-09-06 14:11:13 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20090906141113-qf5f3hkw7n036jfy
Tags: 8.4.1-1
* Urgency medium due to security fix.
* New upstream security/bug fix release:
  - Disallow "RESET ROLE" and "RESET SESSION AUTHORIZATION" inside
    security-definer functions. This covers a case that was missed in the
    previous patch that disallowed "SET ROLE" and "SET SESSION
    AUTHORIZATION" inside security-definer functions. [CVE-2007-6600]
  - Fix WAL page header initialization at the end of archive recovery.
    This could lead to failure to process the WAL in a subsequent archive
    recovery.
  - Fix "cannot make new WAL entries during recovery" error.
  - Fix problem that could make expired rows visible after a crash.
    This bug involved a page status bit potentially not being set
    correctly after a server crash.
  - Make "LOAD" of an already-loaded loadable module into a no-op.
    Formerly, "LOAD" would attempt to unload and re-load the module,
    but this is unsafe and not all that useful.
  - Make window function PARTITION BY and ORDER BY items always be
    interpreted as simple expressions.
    In 8.4.0 these lists were parsed following the rules used for
    top-level GROUP BY and ORDER BY lists. But this was not correct per
    the SQL standard, and it led to possible circularity.
  - Fix several errors in planning of semi-joins. These led to wrong query
    results in some cases where IN or EXISTS was used together with another
    join.
  - Fix handling of whole-row references to subqueries that are within
    an outer join. An example is SELECT COUNT(ss.-) FROM ... LEFT JOIN
    (SELECT ...) ss ON .... Here, ss.- would be treated as
    ROW(NULL,NULL,...) for null-extended join rows, which is not the same as
    a simple NULL.  Now it is treated as a simple NULL.
  - Fix locale handling with plperl. This bug could cause the server's
    locale setting to change when a plperl function is called, leading to
    data corruption.
  - Fix handling of reloptions to ensure setting one option doesn't
    force default values for others.
  - Ensure that a "fast shutdown" request will forcibly terminate open
    sessions, even if a "smart shutdown" was already in progress.
  - Avoid memory leak for array_agg() in GROUP BY queries.
  - Treat to_char(..., 'TH') as an uppercase ordinal suffix with
    'HH'/'HH12'.  It was previously handled as 'th'.
  - Include the fractional part in the result of EXTRACT(second) and
    EXTRACT(milliseconds) for time and time with time zone inputs.
    This has always worked for floating-point datetime configurations,
    but was broken in the integer datetime code.
  - Fix overflow for INTERVAL 'x ms' when "x" is more than 2 million
    and integer datetimes are in use.
  - Improve performance when processing toasted values in index scans.
    This is particularly useful for PostGIS.
  - Fix a typo that disabled commit_delay.
  - Output early-startup messages to "postmaster.log" if the server is
    started in silent mode. Previously such error messages were discarded,
    leading to difficulty in debugging.
  - Remove translated FAQs. They are now on the wiki. The main FAQ was moved
    to the wiki some time ago.
  - Fix pg_ctl to not go into an infinite loop if "postgresql.conf" is
    empty.
  - Fix several errors in pg_dump's --binary-upgrade mode. pg_dump
    --binary-upgrade is used by pg_migrator.
  - Fix "contrib/xml2"'s xslt_process() to properly handle the maximum
    number of parameters (twenty).
  - Improve robustness of libpq's code to recover from errors during
    "COPY FROM STDIN".
  - Avoid including conflicting readline and editline header files when
    both libraries are installed.
  - Work around gcc bug that causes "floating-point exception" instead
    of "division by zero" on some platforms.
* debian/control: Bump Standards-Version to 3.8.3 (no changes necessary).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2
 
<html>
3
 
<head>
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">
9
 
</head>
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>
13
 
</p>
14
 
<p>Poslední aktualizace: 29. října 2007 (aktualizováno pro PostgreSQL 8.3)
15
 
</p>
16
 
<p>Současný správce: Bruce Momjian (bruce@momjian.us)
17
 
</p>
18
 
<p>Přeložil: Pavel Stěhule (pavel.stehule@gmail.com)
19
 
</p>
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> 
22
 
</p>
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>.
25
 
</p>
26
 
<hr>
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>
79
 
<hr>
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>.
85
 
</p>
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
89
 
volně dostupné.
90
 
</p>
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> .
94
 
</p>
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>.
101
 
</p>
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:
104
 
</p>
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
107
 
</p>
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ů.
113
 
</p>
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É
119
 
ŠKODY.
120
 
</p>
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.
126
 
</p>
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.
130
 
</p>
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.
133
 
</p>
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.
135
 
</p>
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> .
137
 
</p>
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>.
140
 
</p>
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
143
 
</p>
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.
145
 
</p>
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.
148
 
</p>
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.
150
 
</p>
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>.
152
 
</p>
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.
155
 
</p>
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:
157
 
</p>
158
 
<ul><li> Nejedná se o chybu, a proč
159
 
</li>
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>
161
 
</li>
162
 
<li> Tato chyba byla opravena v aktuální verzi
163
 
</li>
164
 
<li> Tato chyba byla již opravena ve verzi, která zatím nebyla oficiálně uvolněna
165
 
</li>
166
 
<li> Požadavek na další doplňující informace:
167
 
<ul><li> Operační systém
168
 
</li>
169
 
<li> Verze PostgreSQL
170
 
</li>
171
 
<li> Test reprodukující chybu
172
 
</li>
173
 
<li> Ladící informace
174
 
</li>
175
 
<li> Backtrace výstup debuggeru
176
 
</li>
177
 
</ul>
178
 
</li>
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
181
 
</li>
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>
183
 
</li>
184
 
</ul>
185
 
</li>
186
 
</ul>
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.
189
 
</p>
190
 
<p>Odezva na požadavek na novou vlastnost PostgreSQL je obvykle:
191
 
</p>
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>
193
 
</li>
194
 
<li> Požadovaná funkce není chtěná protože
195
 
<ul><li> Duplikuje již existující funkci, která respektuje SQL standard
196
 
</li>
197
 
<li> Implementací funkce by se příliš zkomplikoval kód bez relevantního přínosu
198
 
</li>
199
 
<li> Funkce by mohla být nebezpečná nebo nespolehlivá
200
 
</li>
201
 
</ul>
202
 
</li>
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>
204
 
</li>
205
 
</ul>
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.
207
 
</p>
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>.
210
 
</p>
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>.
212
 
</p>
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ů.
214
 
</p>
215
 
<p>Další dokumentaci najdete na našem webu.
216
 
</p>
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.
219
 
</p>
220
 
<p>Další online tutoriály jsou dostupné na adresách:
221
 
</p>
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>
223
 
</li>
224
 
<li> <a href="http://sqlcourse.com" title="http://sqlcourse.com">http://sqlcourse.com</a>
225
 
</li>
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>
227
 
</li>
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>
229
 
</li>
230
 
</ul>
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>.
233
 
</p>
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.
236
 
</p>
237
 
<script></script>
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.
240
 
</p>
241
 
<h4> Výkon </h4>
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. 
243
 
</p>
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.
246
 
</p>
247
 
<h4> Podpora </h4>
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.)
250
 
</p>
251
 
<h4> Cena </h4>
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).
253
 
</p>
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.
256
 
</p>
257
 
<hr>
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.
261
 
</p>
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.
263
 
</p>
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>.
266
 
</p>
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ů.
268
 
</p>
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).
270
 
</p>
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>.
274
 
</p>
275
 
<hr>
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
279
 
</p>
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.
282
 
</p>
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:
285
 
</p>
286
 
<h4> Změny dotazu </h4>
287
 
<ul><li> Použitím indexů včetně částečných a funkcionálních
288
 
</li>
289
 
<li> Použitím COPY místo opakovaných INSERTů
290
 
</li>
291
 
<li> Sloučením mnoha SQL příkazů do jedné transakce snížením režie na commit
292
 
</li>
293
 
<li> Používáním CLUSTERU, pokud načítáte větší počet řádek podle indexu
294
 
</li>
295
 
<li> Použitím klauzule LIMIT v poddotazech
296
 
</li>
297
 
<li> Použitím předpřipravených dotazů
298
 
</li>
299
 
<li> Používáním ANALYZE. Tento příkaz aktualizuje statistiky, které se používají při optimalizaci dotazu
300
 
</li>
301
 
<li> Pravidelné použití VACUUM nebo používání pg_autovacuum
302
 
</li>
303
 
<li> Odstraněním indexů před rozsáhlými změnami v datech
304
 
</li>
305
 
</ul>
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>.
308
 
</p>
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>.
311
 
</p>
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.
314
 
</p>
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.
317
 
</p>
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>.
320
 
</p>
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.
323
 
</p>
324
 
<hr>
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.
331
 
</p>
332
 
<p>Pro výběr náhodného řádku použijte příkaz ve tvaru:
333
 
</p>
334
 
<pre>
335
 
SELECT col
336
 
FROM tab
337
 
ORDER BY random()
338
 
LIMIT 1;
339
 
</pre>
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.
342
 
</p>
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.
344
 
</p>
345
 
<p>Seznam všech databází získáte příkazem psql -l
346
 
</p>
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.
348
 
</p>
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:
351
 
</p>
352
 
<pre>
353
 
ALTER TABLE ALTER COLUMN TYPE
354
 
</pre><p>V starších verzích:
355
 
</p>
356
 
<pre>
357
 
BEGIN;
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;
361
 
COMMIT;
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.
363
 
</p>
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í:
366
 
</p>
367
 
<table border="0">
368
 
<tr><td>    Maximální velikost databáze: </td><td>           neomezena (existují 32TB db)
369
 
</td></tr>
370
 
<tr><td>    Maximální velikost tabulky: </td><td>           32 TB
371
 
</td></tr>
372
 
<tr><td>    Maximální velikost řádky: </td><td>             480GB
373
 
</td></tr>
374
 
<tr><td>    Maximální velikost položky </td><td>            1 GB
375
 
</td></tr>
376
 
<tr><td>    Maximální počet řádků v tabulce:  </td><td>     neomezeno
377
 
</td></tr>
378
 
<tr><td>    Maximální počet sloupců v tabulce:  </td><td>   250-1600 podle typů
379
 
</td></tr>
380
 
<tr><td>    Maximální počet indexů na tabulce:  </td><td>   neomezeno
381
 
</td></tr>
382
 
</table>
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.
386
 
</p>
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é.
390
 
</p>
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.
393
 
</p>
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.
395
 
</p>
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
398
 
textového souboru.
399
 
</p>
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.
404
 
</p>
405
 
<pre>
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
 
   ------------------------------------------------------
410
 
    52 bytů na řádek
411
 
</pre><p>Velikost datové stránky PostgreSQL je 8192 bytů (8KB)
412
 
</p>
413
 
<pre>
414
 
 8192 bytů na stránce
415
 
---------------------- = 158 řádek na stránku
416
 
  52 bytů za řádek
417
 
 
418
 
100000 řádek
419
 
----------------------- = 633 stránek (zaokrouhleno nahoru)
420
 
   158 řádek na stránce
421
 
 
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.
425
 
</p>
426
 
<p>Hodnoty NULL jsou uloženy v bitmapách, takže zabírají jen velmi málo
427
 
diskového prostoru.
428
 
</p>
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í.
435
 
</p>
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.
442
 
</p>
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.
446
 
</p>
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.
449
 
</p>
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ší.
453
 
</p>
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í:
456
 
</p>
457
 
<ul><li> začátek hledaného vzoru musí být ukotven k začátku, tj.
458
 
<ul><li> vzor LIKE nesmí začínat %
459
 
</li>
460
 
<li> ~ regulární výraz musí začínat ^
461
 
</li>
462
 
</ul>
463
 
</li>
464
 
<li> vzor nesmí začínat intervalem, např. [a-e]
465
 
</li>
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
467
 
</li>
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.
469
 
</li>
470
 
</ul>
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.
473
 
</p>
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.
476
 
</p>
477
 
<p>Case-insensitive vyhledání se řeší:
478
 
</p>
479
 
<pre>
480
 
SELECT *
481
 
FROM tab
482
 
WHERE lower(col) = 'abc';
483
 
</pre><p>Tento dotaz nepoužije standardní index. Musíte použít tzv. funkcionální index:
484
 
</p>
485
 
<pre>
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.
488
 
</p>
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:
491
 
</p>
492
 
<pre>
493
 
   SELECT *
494
 
   FROM tab
495
 
   WHERE col IS NULL;
496
 
</pre><p>K spojení řetězců, které mohou obsahovat hodnotu NULL, používejte funkci COALESCE(), např.:
497
 
</p>
498
 
<pre>
499
 
   SELECT COALESCE(col1, '') || COALESCE(col2, '')
500
 
   FROM tab
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:
502
 
</p>
503
 
<pre>
504
 
   SELECT *
505
 
   FROM tab
506
 
   ORDER BY (col IS NOT NULL)
507
 
</pre><p>tak záznamy s NULL budou na začátku setříděných dat.
508
 
</p>
509
 
<h3><a name="item4.10">4.10</a>) Jaké jsou rozdíly mezi různými znakovými typy?</h3>
510
 
<table border="0">
511
 
<tr><td>Typ </td><td> Interní název </td><td> Poznámky
512
 
</td></tr>
513
 
<tr><td> VARCHAR(n)</td><td> varchar</td><td> n určuje maximální délku
514
 
</td></tr>
515
 
<tr><td> CHAR(n)</td><td> bpchar </td><td> řetězec je do dané délky rozšířen mezerami
516
 
</td></tr>
517
 
<tr><td> TEXT</td><td> text</td><td> bez omezení délky
518
 
</td></tr>
519
 
<tr><td> BYTEA</td><td> bytea</td><td> pole bytů nespecifikované délky
520
 
</td></tr>
521
 
<tr><td> "char"</td><td> char</td><td> jeden znak
522
 
</td></tr>
523
 
</table>
524
 
<p>Na interní názvy můžete narazit v systémovém katalogu nebo v některých chybových hlášeních.
525
 
</p>
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á.
527
 
</p>
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).
529
 
</p>
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.
531
 
</p>
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.
534
 
Například:
535
 
</p>
536
 
<pre>
537
 
CREATE TABLE person (
538
 
  id   SERIAL,
539
 
  name TEXT
540
 
);
541
 
</pre><p>je automaticky transformováno na:
542
 
</p>
543
 
<pre>
544
 
CREATE SEQUENCE person_id_seq;
545
 
CREATE TABLE person (
546
 
  id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
547
 
  name TEXT
548
 
);
549
 
</pre><p>Podrobnější informace najdete v manuálu v popisu příkazu create_sequence.
550
 
</p>
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:
553
 
</p>
554
 
<pre>
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.
557
 
</p>
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.
560
 
</p>
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í.
563
 
</p>
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.
566
 
</p>
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.
568
 
</p>
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ů.
570
 
</p>
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:
574
 
</p>
575
 
<pre>
576
 
ulimit -d 262144
577
 
limit datasize 256m
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.
584
 
</p>
585
 
<h3><a name="item4.14">4.14</a>) Jak zjistím, kterou verzi PostgreSQL používám?</h3>
586
 
<p>V psql napište:
587
 
</p>
588
 
<pre>
589
 
SELECT version();
590
 
</pre>
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:
593
 
</p>
594
 
<pre>
595
 
CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
596
 
</pre>
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 
599
 
dva příklady:
600
 
</p>
601
 
<pre>
602
 
SELECT *
603
 
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
604
 
</pre><p>nebo
605
 
</p>
606
 
<pre>
607
 
SELECT *
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í.
610
 
</p>
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.
613
 
</p>
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.
615
 
</p>
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>.
619
 
</p>
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).
622
 
</p>
623
 
<p>Tento problém by se neměl vyskytovat u PostgreSQL verze 8.3 a vyšších verzích.
624
 
</p>
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.
627
 
</p>
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>.
629
 
</p>
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>.
631
 
</p>
632
 
<p>Ještě existuje několik komerčních a hardware řešení replikací podporujících různé modely replikace.
633
 
</p>
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:
636
 
</p>
637
 
<ul><li> nepoužívat uvozovky v příkazu CREATE TABLE
638
 
</li>
639
 
<li> v identifikátoru použít pouze malá písmena
640
 
</li>
641
 
<li> v dotazech vkládat identifikátory do uvozovek
642
 
</li>
643
 
</ul>
644
 
</body>
645
 
</htm>