~vcs-imports/mammoth-replicator/trunk

« back to all changes in this revision

Viewing changes to doc/FAQ_polish

  • Committer: alvherre
  • Date: 2005-12-16 21:24:52 UTC
  • Revision ID: svn-v4:db760fc0-0f08-0410-9d63-cc6633f64896:trunk:1
Initial import of the REL8_0_3 sources from the Pgsql CVS repository.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
 
 
2
                 Frequently Asked Questions (FAQ) o PostgreSQL
 
3
                                       
 
4
   Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004
 
5
   
 
6
   Ostatnia aktualizacja tl/umaczenia: Piatek Marzec 5 19:31:12 EST 2004
 
7
   
 
8
   Obecny maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
 
9
   
 
10
   Tl/umaczenie: Marcin Mazurek (m.mazurek@netsync.pl)
 
11
   
 
12
   Najbardziej aktualna wersje tego dokumentu mozna znalezc pod adresem:
 
13
   http://www.PostgreSQL.org/docs/faqs/FAQ.html.
 
14
   
 
15
   Odpowiedzi na pytania dotyczace konkretnych system�w operacyjnych
 
16
   mozna znalezc pod adresem: http://www.PostgreSQL.org/docs/index.html.
 
17
     _________________________________________________________________
 
18
   
 
19
                               Pytania og�lne
 
20
                                      
 
21
   1.1) Co to jest PostgreSQL? Jak to wymawiac?
 
22
   1.2) Jaka licencja chroniony jest PostgreSQL?
 
23
   1.3) Na jakich systemach Unixowych dzial/a PostreSQL?
 
24
   1.4) Na jakich nie-Unixowych systemach dzial/a PostgreSQL?
 
25
   1.5) Skad moge sciagnac PostgreSQL?
 
26
   1.6) Gdzie mozna szukac wsparcia technicznego?
 
27
   1.7) Jaka jest ostatnia dostepna wersja?
 
28
   1.8) Jaka dokumentacja jest dostepna?
 
29
   1.9) Gdzie moge znalezc informacje o znanych bl/edach czy brakujacych
 
30
   rozwiazanich?
 
31
   1.10) Jak moge sie nauczyc SQL?
 
32
   1.11) Czy PostgreSQL ma rozwiazany problem Y2K?
 
33
   1.12) Jak moge sie przyl/aczyc do grupy os�b bezposrednio pracujacych
 
34
   nad rozwojem PostgreSQL?
 
35
   1.13) Jak moge zgl/aszac bl/edy?
 
36
   1.14) Jak mozna por�wnac PostgreSQL w stosunku do innych DBMS?
 
37
   1.15) W jaki spos�b moge wesprzec finansowo PostgreSQL?
 
38
   
 
39
                            Pytania uzytkownik�w
 
40
                                      
 
41
   2.1) Czy sa jakies driwery ODBC dla PostgreSQL?
 
42
   2.2) Jakie istnieja narzedzia pozwalajace na dostep do PostgreSQL
 
43
   przez www?
 
44
   2.3) Czy istnieje jakies GUI dla PostgreSQL?
 
45
   2.4) Za pomoca jakich jezyk�w programowania mozna sie komunikowac z
 
46
   PostgreSQL?
 
47
   
 
48
                      Pytania dotyczace administracji
 
49
                                      
 
50
   3.1) Jak moge zainstalowac PostgreSQL w innej lokalizacji niz
 
51
   /usr/local/pgsql?
 
52
   3.2) Podczas startu postmaster'a, otrzymuje komunikat: Bad System Call
 
53
   lub "core dumped". Dlaczego?
 
54
   3.3) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie:
 
55
   IpcMemoryCreate. Dlaczego?
 
56
   3.4) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie:
 
57
   IpcSemaphoreCreate. Dlaczego?
 
58
   3.5) W jaki spos�b moge kontrolowac pol/aczenia z innych host�w?
 
59
   3.6) Jak powinienem skonfigurowac system baz danych aby uzyskac lepsza
 
60
   wydajnosc?
 
61
   3.7) Jakie sa mozliwosci wyszukiwania bl/ed�w?
 
62
   3.8) Skad sie bierze komunikat: "Sorry, too many clients" podczas
 
63
   pr�by pol/aczenia sie z baza danych?
 
64
   3.9) Jakie pliki znajduja sie w pg_temp?
 
65
   3.10) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze
 
66
   skrypt�w dump i restore?
 
67
   
 
68
                       Pytania dotyczace uzytkowania
 
69
                                      
 
70
   4.1) Jaka jest r�znica pomiedzy kursorami binarnymi (binary cursors) i
 
71
   zwykl/ymi kursorami (normal cursors)?
 
72
   4.2) Jak moge pobrac za pomoca SELECT jedynie kilka pierwszych wynik�w
 
73
   zapytania?
 
74
   4.3) Jak moge uzyskac liste wszystkich tabel czy innych rzeczy pod
 
75
   psql?
 
76
   4.4) Jak usunac kolumne z tabeli lub zmienic jej typ?
 
77
   4.5) Jaki jest maksymalny rozmiar dla rzedu, tabeli i bazy danych?
 
78
   4.6) Jak duzo miejsca w bazie danych jest potrzebne aby przechowac
 
79
   dane ze zwyczajnego pliku tekstowego?
 
80
   4.7) Jak moge sprawdzic jakie tabele, klucze, bazy danych i
 
81
   uzytkownicy sa utworzeni?
 
82
   4.8) Moje zapytania sa wolne lub nie uzywaja kluczy. Dlaczego?
 
83
   4.9) Jak moge sprawdzic w jakis spos�b "query optimizer" wykonuje moje
 
84
   zapytanie?
 
85
   4.10) Co to jest "R-tree index"?
 
86
   4.11) Co to jest "Genetic Query Optimizer"?
 
87
   4.12) Jak moge uzywac wyrazen regularnych w zapytaniach i zapytan
 
88
   case-insensitive w wyrazeniach regularnych? Jak korzystac z indeks�w
 
89
   dla zapytan case-insensitive?
 
90
   4.13) Jak sprawdzic w zapytaniu czy pole ma wartosc NULL?
 
91
   4.14) Jaka jest r�znica pomiedzy r�znymi typami tekstowymi (character
 
92
   types)?
 
93
   4.15.1) Jak moge utworzyc pole typu int, kt�re samo zwieksza swoja
 
94
   wartosc?
 
95
   4.15.2) Jak pobrac wartosc pola typu SERIAL po wykonaniu insert'u?
 
96
   4.15.3) Czy uzycie currval() i nextval() nie doprowadzi do "race
 
97
   condition" z innymi uzytkownikami?
 
98
   4.15.4) Dlaczego numery sekwencji nie sa ponownie uzywane przy
 
99
   przerwaniu transakcji? Skad sie biora luki w numerowaniu kolumny
 
100
   tabeli sekwencjami/SERIALem?
 
101
   4.16) Co to jest OID? Co to jest TID?
 
102
   4.17) Jakie jest znaczenie niekt�rych termin�w w PostgreSQL?
 
103
   4.18) Skad bierze sie ten bl/ad: "ERROR: Memory exhausted in
 
104
   AllocSetAlloc()"?
 
105
   4.19) Jak sprawdzic jakiej wersji PostgreSQL uzywam?
 
106
   4.20) Dlaczego operacje, kt�re wykonuje na duzych obiektach
 
107
   "large-object" zwracaja komunikat: "invalid large obj descriptor"?
 
108
   4.21) Jak stworzyc kolumne kt�rej domyslna wartoscia bedzie biezacy
 
109
   czas?
 
110
   4.22) Dlaczego zapytania uzywajace IN sa takie wolne?
 
111
   4.23) Jak wykonac "outer join"?
 
112
   4.24) Jak wykonywac zapytanie uzywajace kilku baz danych jednoczesnie?
 
113
   4.25) Jak zwr�cic w funkcji wiele rzed�w lub kolumn?
 
114
   4.26) Dlaczego nie moge w spos�b pewny tworzyc/usuwac tabel
 
115
   tymczasowych w funkcjach PL/PgSQL?
 
116
   4.27) Jakie sa mozliwosci replikacji w PostgreSQL?
 
117
   4.28) Jakie mozliwosci szyfrowania oferuje PostgreSQL?
 
118
   
 
119
                           Rozwijanie PostgreSQL
 
120
                                      
 
121
   5.1) Napisal/em wl/asna funkcje. Kiedy uzyje jej w psql, program
 
122
   zrzuca pamiec (dump core)?
 
123
   5.2) Jak moge dodac/zgl/osic nowe typy czy funkcje do PostgreSQL?
 
124
   5.3) Jak napisac funkcje C zwracajaca krotke (tuple)?
 
125
   5.4) Zmienil/em plik zr�dl/owy. Dlaczego po rekompilacji nie widac
 
126
   zmiany?
 
127
     _________________________________________________________________
 
128
   
 
129
                               Pytania og�lne
 
130
                                      
 
131
    1.1) Co to jest PostgreSQL? Jak to wymawiac?
 
132
    
 
133
   PostgreSQL wymawia sie Post-Gres-kju-el. Czesto podczas rozm�w uzywany
 
134
   jest termin "Postgres"
 
135
   
 
136
   PostgreSQL jest rozszerzeniem systemu zarzadzania bazami danych -
 
137
   POSTGRES, kolejna generacja rozwojowego prototypu DBMS. Mimo, ze
 
138
   PostgreSQL zachowal/ bardzo dobrze zbudowany model danych (data model)
 
139
   i bogaty zestaw typ�w danych POSTGRES'a, zastapil/ PostQuel'owy jezyk
 
140
   zapytan z rozbudowanym podzbiorem jezyka SQL. PostgreSQL jest
 
141
   oprogramowaniem darmowym z dostepnymi cal/ymi zr�dl/ami.
 
142
   
 
143
   Rozw�j PostgreSQL jest prowadzony przez grupe ludzi z Internetu,
 
144
   komunikujacych sie poprzez mailowe listy dyskusyjne PostgreSQL.
 
145
   Obecnym koordynatorem jest Marc G. Fournier (scrappy@PostgreSQL.org).
 
146
   (Zobacz pytanie 1.6 jak sie przyl/aczyc). Ta grupa ludzi jest
 
147
   odpowiedzialna za cal/y rozw�j PostgreSQL. PostgreSQL jest projektem
 
148
   nie kontrolowanym przez zadna firme, aby wziac udzial/ w jego rozwoju
 
149
   sprawdz, http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html
 
150
   
 
151
   Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Wiele innych
 
152
   os�b pomogl/o przy portowaniu, testowaniu, debugowaniu i rozwijaniu
 
153
   kodu. Oryginalny kod Postgresa, na kt�rym zostal/ oparty PostgreSQL,
 
154
   byl/ wysil/kiem student�w oraz pracownik�w pracujacych pod
 
155
   kierownictwem profesora Michael'a Stonebraker'a z University of
 
156
   California w Berkeley.
 
157
   
 
158
   Oryginalna nazwa oprogramowania w Berkeley byl/ Postgres. Po dodaniu
 
159
   obsl/ugi SQL w 1995, nazwa zostal/a zmieniona na Postgres95. Pod
 
160
   koniec roku 1996 nazwa zostal/a zmieniona na PostgreSQL.
 
161
   
 
162
    1.2) Jaka licencja chroniony jest PostgreSQL?
 
163
    
 
164
   PostgreSQL objety jest nastepujaca licencja:
 
165
   
 
166
   PostgreSQL Data Base Management System
 
167
   
 
168
   Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
 
169
   Portions Copyright (c) 1994-6 Regents of the University of California
 
170
   
 
171
   Permission to use, copy, modify, and distribute this software and its
 
172
   documentation for any purpose, without fee, and without a written
 
173
   agreement is hereby granted, provided that the above copyright notice
 
174
   and this paragraph and the following two paragraphs appear in all
 
175
   copies.
 
176
   
 
177
   IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
 
178
   FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
 
179
   INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
 
180
   ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
 
181
   ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
182
   
 
183
   THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
 
184
   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 
185
   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
 
186
   PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
 
187
   CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
 
188
   UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 
189
   
 
190
   Tekst powyzej, jest klasyczna licencja BSD. Nie posiada ona zadnych
 
191
   restrykcji co do uzywania kodu zr�dl/owego. Podoba nam sie i nie
 
192
   zamierzamy jej zmieniac.
 
193
   
 
194
    1.3) Na jakich systemach Unixowych dzial/a PostreSQL?
 
195
    
 
196
   PostgreSQL powinien dzial/ac na wszystkich nowych Unix-podobnych
 
197
   systemach. Platformy, kt�re zostal/y szczeg�l/owo przetestowane
 
198
   podczas publikowania PostgreSQL sa wymienione w dokumentacji
 
199
   opisujacej instalacje.
 
200
   
 
201
    1.4) Na jakich nie-Unixowych systemach dzial/a PostgreSQL?
 
202
    
 
203
   Klient
 
204
   
 
205
   Mozliwa jest kompilacja bibliteki C libpq, psql oraz innych
 
206
   interfejs�w i uruchamianie ich na platformie MS Windows. W tym wypadku
 
207
   klient jest uruchamiany na MS Windows a z serwerem komunikuje sie
 
208
   poprzez TCP/IP. Serwer moze dzial/ac na dowolnej wspieranej platformie
 
209
   Unixowej. Plik win32.mak jest dol/aczony do zr�del/, aby mozna byl/o
 
210
   stworzyc biblioteke libpq oraz program psql dzial/ajace w srodowisku
 
211
   Win32. PostgreSQL moze sie takze komunikowac z klientami ODBC.
 
212
   
 
213
   Serwer
 
214
   
 
215
   Serwer moze byc uruchamiany na Windows NT i Win2k uzywajac bibliotek
 
216
   Cygwin, Cygnus Unix/NT. W pliku pgsql/doc/FAQ_MSWIN znajdujacym sie w
 
217
   zr�dl/ach lub pod adresem:
 
218
   http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN na naszych
 
219
   stronach.
 
220
   
 
221
   Obecnie prowadzone sa prace nad stworzeniem wersji dla MS Win
 
222
   NT/200/XP. Jesli chcesz sie dowiedziec o obecnym statusie tych prac
 
223
   zobacz http://techdocs.postgresql.org/guides/Windows and
 
224
   http://momjian.postgresql.org/main/writings/pgsql/win32.html.
 
225
   
 
226
   Istnieje takze port pod Novell Netware 6 dostepny pod adresem
 
227
   http://forge.novell.com.
 
228
   
 
229
    1.5) Skad mozna sciagnac PostgreSQL?
 
230
    
 
231
   Gl/�wny serwer ftp z dostepem "anonymous" dla PostgreSQL znajduje sie
 
232
   ftp://ftp.PostgreSQL.org/pub. jesli szukasz mirror�w sprawdz nasza
 
233
   gl/�wna strone www.
 
234
   
 
235
    1.6) Gdzie mozna szukac wsparcia technicznego?
 
236
    
 
237
   Adres gl/�wnej listy mailowej: pgsql-general@PostgreSQL.org. Jest ona
 
238
   przeznaczona dyskusjom dotyczacym spraw zwiazanych z PostgreSQL. Zeby
 
239
   zapisac sie na liste, wyslij email z nastepujacymi liniami w tresci
 
240
   maila (nie w temacie):
 
241
    subscribe
 
242
    end
 
243
 
 
244
   na adres: pgsql-general-request@PostgreSQL.org.
 
245
   
 
246
   Dostepna jest takze lista wysyl/ajaca digesty. Aby zapisac sie na nia,
 
247
   wyslij email na adres: pgsql-general-digest-request@PostgreSQL.org z
 
248
   trescia maila zawierajaca:
 
249
    subscribe
 
250
    end
 
251
 
 
252
   Digesty sa wysyl/ane do czl/onk�w listy, kiedy na gl/�wna liste dotrze
 
253
   ok 30k wiadomosci.
 
254
   
 
255
   Dostepna jest takze lista poswiecona bl/edom znalezionym w PostgreSQL.
 
256
   Aby zapisac sie na nia wyslij email na adres:
 
257
   pgsql-bugs-request@PostgreSQL.org z trescia maila zawierajaca:
 
258
    subscribe
 
259
    end
 
260
 
 
261
   Lista poswiecona dyskusjom developer�w jest dostepna pod adresem:
 
262
   pgsql-hackers-request@PostgreSQL.org Aby sie na nia zapisac wyslij na
 
263
   jej adres mail z trescia:
 
264
    subscribe
 
265
    end
 
266
 
 
267
   Dodatkowe informacje o listach mailowych dotyczacych PostgreSQL mozna
 
268
   znalezc na stronach WWW PostgreSQL pod adresem:
 
269
   
 
270
     http://www.PostgreSQL.org
 
271
     
 
272
   W sieci EFNet istnieje kanal/ IRC #PostgreSQL. Ja, do pol/aczenia sie
 
273
   z kanal/em uzywam Unixowego polecenia irc -c '#PostgreSQL' "$USER"
 
274
   irc.phoenix.net.
 
275
   
 
276
   Lista firm oferujacych wsparcie na zasadach komercyjnych znajduje sie
 
277
   pod adresem: http://techdocs.postgresql.org/companies.php.
 
278
   
 
279
    1.7) Jaka jest ostatnia dostepna wersja?
 
280
    
 
281
   Ostatnia dostepna wersja PostgreSQL to 7.4.1.
 
282
   
 
283
   Planujemy publikowanie kolejnych wersji co szesc do osmiu miesiecy.
 
284
   
 
285
    1.8) Jaka dokumentacja jest dostepna?
 
286
    
 
287
   Kilka manuali, stron podecznika man, oraz kilka przykl/ad�w do
 
288
   testowania sa zal/aczone w samej dystrybucji. Znajduja sie one w
 
289
   katalogu /doc. Manual moze byc takze przegladany poprzez strony www
 
290
   pod adresem http://www.PostgreSQL.org/docs.
 
291
   
 
292
   Istnieja takze dwie ksiazki dostepne online pod adresami
 
293
   http://www.PostgreSQL.org/docs/awbook.html i
 
294
   http://www.commandprompt.com/ppbook/. Lista ksiazek o PostgreSQL,
 
295
   kt�re mozna kupic znajduje sie pod adresem
 
296
   http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Zbi�r
 
297
   technicznych artykul/�w o PostgreSQL znajduje sie pod adresem
 
298
   http://techdocs.postgresql.org/.
 
299
   
 
300
   psql posiada kilka wbudowanych polecen \d, za pomoca kt�rych mozna
 
301
   sprawdzic informacje dotyczace typ�w, operator�w, funkcji, agregat�w
 
302
   itd.
 
303
   
 
304
   Na naszej stronie mozna znalezc duzo wiecej dokumentacji.
 
305
   
 
306
    1.9) Gdzie mozna znalezc informacje o znanych bl/edach czy brakujacych
 
307
    rozwiazanich?
 
308
    
 
309
   PostgreSQL wspiera rozszerzony podzbi�r standardu SQL-92. Sprawdz
 
310
   nasza liste TODO aby znalezc informacje o znanych problemach,
 
311
   brakujacych rozwiazaniach czy przyszl/ych planach.
 
312
   
 
313
    1.10) Jak moge sie nauczyc SQL?
 
314
    
 
315
   Ksiazka o PostgreSQL http://www.PostgreSQL.org/docs/awbook.html uczy
 
316
   SQL. Jest jeszcze inna ksiazka o PostgreSQL dostepna pod adresem:
 
317
   http://www.commandprompt.com/ppbook. Dobry tutorial mozesz znalezc pod
 
318
   adresem: http://www.intermedia.net/support/sql/sqltut.shtm, oraz
 
319
   http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
 
320
   i http://sqlcourse.com.
 
321
   
 
322
   Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition" pod
 
323
   adresem: http://members.tripod.com/er4ebus/sql/index.htm
 
324
   
 
325
   Wielu z naszych uzytkownik�w poleca The Practical SQL Handbook,
 
326
   Bowman, Judith S., et al., Addison-Wesley. Inni polecaja The Complete
 
327
   Reference SQL, Groff et al., McGraw-Hill.
 
328
   
 
329
    1.11) Czy PostgreSQL ma rozwiazany problem Y2K?
 
330
    
 
331
   Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz przed
 
332
   rokiem 2000 BC.
 
333
   
 
334
    1.12) Jak moge sie przyl/aczyc do grupy os�b bezposrednio pracujacych nad
 
335
    rozwojem PostgreSQL?
 
336
    
 
337
   Przede wszystkim sciagnij ostatnie dostepne zr�dl/a i przeczytaj
 
338
   dokumentacje przeznaczona dla developer�w na naszej stronie www lub
 
339
   dostepna takze w zr�dl/ach PostgreSQL. Nastepnie zapisz sie na listy
 
340
   mailowe pgsql-hackers i pgsql-patches. I na koniec, wysyl/aj nam
 
341
   wysokiej jakosci patch'e na liste pgsql-patches.
 
342
   
 
343
   Jest okol/o 12 os�b, kt�re maja uprawnienia do commit'owania w CVS
 
344
   PostgreSQL'a. Kazdy z nich submitowal/ tak wiele wysokiej jakosci
 
345
   patchy, ze stal/o sie niemozliwe dla obecnych commiter�w byc z nimi na
 
346
   biezaco, wiec musielismy im ufac i miec pewnosc, ze ich poprawki sa
 
347
   wysokiej jakosci.
 
348
   
 
349
    1.13) Jak moge zgl/aszac bl/edy?
 
350
    
 
351
   Zajrzyj na strone PostgreSQL BugTool, na kt�rej opisane sa wskaz�wki
 
352
   jak zgl/aszac informacje o bl/edach.
 
353
   
 
354
   Zajrzyj takze na nasz ftp ftp://ftp.PostgreSQL.org/pub, aby sprawdzic
 
355
   czy nie ma nowszych wersji PostgreSQL czy patchy.
 
356
   
 
357
    1.14) Jak mozna por�wnac PostgreSQL w stosunku do innych DBMS?
 
358
    
 
359
   Jest kilka sposob�w oceny softwaru: mozliwosci, wydajnosc, stabilnosc,
 
360
   wsparcie i cena.
 
361
   
 
362
   Mozliwosci
 
363
          PostgreSQL posiada mozliwosci dostepne w duzych, komercyjnych
 
364
          systemach DBMS, takie jak transakcje, podzapytania
 
365
          (subselects), triggery, widoki, klucze obce, referential
 
366
          integrity, oraz wyrafinowany system blokowania. Mamy takze
 
367
          wl/asciowsci kt�rych inni nie posiadaja, jak typy definiowane
 
368
          przez uzytkownika, dziedziczenie, rules, multi-version
 
369
          concurrency control, kt�ra redukuje problemy z blokowaniem
 
370
          (lock contention).
 
371
          
 
372
   Wydajnosc
 
373
          Wydajnosc PostgreSQL jest podobna do innych komercyjnych i open
 
374
          source baz danych. W niekt�rych sytuacjach jest szybszy w
 
375
          niekt�rych wolniejszy. W por�wnianiu do MySQL lub mniejszych
 
376
          baz danych jestesmy szybsi przy wielu uzytkownikach,
 
377
          skomplikowaych zapytaniach i duzym obciazeniu podczas. MySQL
 
378
          jest szybszy dla prostych SELECT�w wykonywanych przez niewielu
 
379
          uzytkownik�w. Spowodowane jest to narzutem, kt�ry sie pojawia
 
380
          przy transakcjach. Oczywiscie MySQL nie ma wiekszosci z
 
381
          rozwiazan opisanych powyzej w sekcji Mozliwosci . PostgreSQL
 
382
          zostal/ stworzony z mysla o stabilnosci, oraz szerokiej gamie
 
383
          mozliwosci, ale mimo to staramy sie w kazdej wersji poprawiac
 
384
          jego wydajnosc. Ciekawe por�wnanie PostgreSQL i MySQL mozna
 
385
          znalezc pod adresem
 
386
          http://openacs.org/philosophy/why-not-mysql.html Dodatkowo,
 
387
          MySQL jest firma, kt�ra dystrybuuje jej produkty poprzez zasade
 
388
          Open Source i wymaga wykupienia licencji w przypadku tworzenia
 
389
          close-source software, co ie ma miejsca w przypadku PostgreSQL.
 
390
          
 
391
   Stabilnosc
 
392
          Zdajemy sobie sprawe, ze DBMS musi byc stabilny, w przeciwnym
 
393
          wypadku jest bez wartosci. Staramy sie publikowac kod stabilny,
 
394
          dobrze przetestowany, z minimum mozliwych bl/ed�w. Kazde
 
395
          wydanie poprzedza co najmniej miesiac test�w wersji beta.
 
396
          Patrzac na historie wydan PostgreSQL widac, ze dostarczamy
 
397
          stabilne, dobrze sprawdzone wersje, kt�re sa gotowe do uzycia w
 
398
          srodowisku produkcyjnym. Myslimy, ze proces publikowania
 
399
          kolejnych wersji opracowany przez nas jest jednym z lepszych
 
400
          wsr�d innych tw�rc�w oprogramowania bazodanowego.
 
401
          
 
402
   Wsparcie
 
403
          Dzieki naszym listom mailowym masz dostep do duzej liczby
 
404
          programist�w i uzytkownik�w, kt�rzy pomagaja rozwiazac kazdy
 
405
          napotkany problem. Chociaz nie mozemy gwarantowac znalezienia
 
406
          rozwiazania danego problemu, nie r�znimy sie w tym od innych
 
407
          komercyjnych system�w DBMS. Bezposredni kontakt z
 
408
          programistami, uzytkownikami, dokumentacja i kodem zr�dl/owym
 
409
          sprawiaja, ze wsparcie oferowane PostgreSQL niejednokrotnie
 
410
          jest lepsze niz w innych systemach DBMS. Istnieje takze
 
411
          mozliwosc skorzystania z komercyjnego wsparcia dla tych,
 
412
          kt�rych takiego rozwiazania potrzebuja. (Sprawdz ten punkt
 
413
          FAQ.)
 
414
          
 
415
   Cena
 
416
          Korzystanie z PostgreSQL jest darmowe, zar�wno w przypadku
 
417
          komercyjnym jak i niekomercyjnym. Mozesz korzystac z naszego
 
418
          kodu zr�dl/owego w Twoim produkcie bez zadnych ograniczen, poza
 
419
          tymi wymienionymi w licencji BSD przytoczonej powyzej.
 
420
          
 
421
    1.15) W jaki spos�b moge wesprzec finansowo PostgreSQL?
 
422
    
 
423
   PostgreSQL korzysta z najlepszej infrastruktury od samego poczatku
 
424
   istnienia projektu, czyli roku 1996 kiedy rozpoczelismy prace.
 
425
   Wszystko to zawdzieczamy Marc'owi Fournier'owi, kt�ry stworzyl/ ta
 
426
   infrastrukture i zarzadza nia od lat.
 
427
   
 
428
   Wysokiej jakosci infrastruktura jest bardzo wazna dla kazdego projektu
 
429
   open-source. Zapobiega przerwom w rozwoju projektu i jakimkolwiek
 
430
   przestojom.
 
431
   
 
432
   Oczywiscie korzystanie z wysokiej jakosci infrastruktury nie jest
 
433
   tanie. Istnieje wiele r�znych miesiecznych, czy jednorazowych
 
434
   wydatk�w, kt�re trzeba ponosic aby wszystko dzial/al/o jak nalezy.
 
435
   Jesli Ty, badz Twoja firma moze wspom�c finansowo rozw�j PostgreSQL
 
436
   odwiedz adres: http://store.pgsql.com/shopping/ gdzie opisane jest jak
 
437
   to zrobic.
 
438
   
 
439
   Chociaz na stronie wspomniana jest nazwa PostgreSQL Inc, "datki" sa
 
440
   przeznaczone jedynie na rozw�j projektu PostgreSQL i nie sa
 
441
   przeznaczane na finansowanie jakiejkolwiek firmy. Jesli wolisz, mozesz
 
442
   wysl/ac czek na adres kontaktowy.
 
443
     _________________________________________________________________
 
444
   
 
445
   Jesli mozesz sie pochwalic udanymi wdrozeniami PostgreSQL, prosimy
 
446
   abys zgl/osil/ nam to na stronie: http://advocacy.postgresql.org.
 
447
   
 
448
                           User Client Questions
 
449
                                      
 
450
    2.1) Czy sa jakies driwery ODBC dla PostgreSQL?
 
451
    
 
452
   Dostepne sa dwa driwery ODBC: PsqlODBC i OpenLink ODBC.
 
453
   
 
454
   Mozesz pobrac PsqlODBC z adresu
 
455
   http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
 
456
   
 
457
   OpenLink ODBC moze byc pobrany z adresu: http://www.openlinksw.com.
 
458
   Wsp�l/pracuje ze standardowym oprogramowaniem klienckim ODBC wiec w
 
459
   ten spos�b mozesz korzystac z PostgreSQL ODBC dostepnego na kazdej
 
460
   pltaformie kt�ra wspiera (Win, Mac, Unix, VMS).
 
461
   
 
462
   Autorzy beda prawdopodobnie sprzedawac ten produkt osobom kt�re
 
463
   wymagaja komercyjnego wsparcia, ale wersja darmowa bedzie zawsze
 
464
   dostepna. Wszystkie pytania mozesz wysyl/ac na adres:
 
465
   postgres95@openlink.co.uk.
 
466
   
 
467
    2.2) Jakie istnieja narzedzia pozwalajace na dostep do PostgreSQL przez
 
468
    www?
 
469
    
 
470
   Dobry podrecznik dla poczatkujacych o dostepie do bazy danych przez
 
471
   www mozesz znalezc pod adresem: http://www.webreview.com
 
472
   
 
473
   Do integracji z www, swietnym rozwiazaniem jest PHP. Mozesz znalezc
 
474
   wiecej informacji na ten temat pod adresem http://www.php.net.
 
475
   
 
476
   Wiele os�b w przypadku skomplikowanych rozwiazan uzywa Perl'a i
 
477
   modul/u CGI.pl lub mod_perl.
 
478
   
 
479
    2.3) Czy istnieje jakies GUI dla PostgreSQL?
 
480
    
 
481
   Tak, istnieje kilka interfejs�w graficznych dla PostgreSQL. Wsr�d nich
 
482
   PgAccess ( http://www.pgaccess.org), PgAdmin III
 
483
   (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/
 
484
   ) oraz Rekall ( http://www.thekompany.com/products/rekall/,
 
485
   komercyjny). Istnieje takze PHPPgAdmin (
 
486
   http://phppgadmin.sourceforge.net/ ), webowy interfejs dla PostgreSQL.
 
487
   
 
488
   Wiecej informacji na ten temat znajduje sie pod adresem See
 
489
   http://techdocs.postgresql.org/guides/GUITools.
 
490
   
 
491
    2.4) Za pomoca jakich jezyk�w programowania mozna sie komunikowac z
 
492
    PostgreSQL?
 
493
    
 
494
   Najbardziej popularne jezyki posiiadaja wl/asny interfejs dla
 
495
   PostgreSQL. Sprawdz liste rozszerzen dla intersujacego Ciebie jezyka
 
496
   programowania.
 
497
   
 
498
   Ze zr�dl/ami PostreSQL dystrubuowane sa interfejsy dla nastepujacych
 
499
   jezyk�w programowania:
 
500
     * C (libpq)
 
501
     * Embedded C (ecpg)
 
502
     * Java (jdbc)
 
503
     * Python (PyGreSQL)
 
504
     * TCL (libpgtcl)
 
505
       
 
506
   Inne interfejsy sa dostepne pod adresem: http://gborg.postgresql.org w
 
507
   sekcji Drivers/Interfaces.
 
508
     _________________________________________________________________
 
509
   
 
510
                      Pytania dotyczace administracji
 
511
                                      
 
512
    3.1) Jak moge zainstalowac PostgreSQL w innej lokalizacji niz
 
513
    /usr/local/pgsql?
 
514
    
 
515
   Uzyj opcji --prefix podczas uruchamiania skryptu configure.
 
516
   
 
517
    3.2) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: Bad
 
518
    System Call lub "core dumped". Dlaczego?
 
519
    
 
520
   Ten bl/ad moze byc wynikiem wielu problem�w, ale na poczatek sprawdz
 
521
   czy masz zainstalowane rozszerzenia systemu V w jadrze systemu.
 
522
   PostgreSQL wymaga do pracy zainstalowanej obsl/ugi pamieci dzielonej i
 
523
   semafor�w.
 
524
   
 
525
    3.3) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie:
 
526
    IpcMemoryCreate. Dlaczego?
 
527
    
 
528
   Albo nie masz poprawnie skonfigurowanej obsl/ugi pamieci dzielonej w
 
529
   jadrze systemu, albo musisz zwiekszyc jej dostepny rozmiar. Dokl/adna
 
530
   ilosc jaka potrzebujesz jest zalezna od architektury systemu na jakim
 
531
   pracujesz, jak duzo bufor�w oraz jak duzo proces�w backendu
 
532
   skonfigurowal/es dla postmaster'a. Dla wiekszosci system�w, z domyslna
 
533
   liczba bufor�w i proces�w potrzebujesz minimum w przyblizeniu 1MB.
 
534
   Zobacz PostgreSQL Administrator's Guide gdzie szczeg�l/owo zostal/o
 
535
   opisane wykorzystanie pamieci dzielonej i semafor�w.
 
536
   
 
537
    3.4) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie:
 
538
    IpcSemaphoreCreate. Dlaczego?
 
539
    
 
540
   Jesli tresc bl/edu brzmi: IpcSemaphoreCreate: semget failed (No space
 
541
   left on device) oznacza to, ze jadro systemu nie jest skonfigurowane
 
542
   do obsl/ugi wystarczajacej liczby semafor�w. Postgres wymaga jednego
 
543
   semafor'a na potencjalny jeden proces backend. Tymczasowym
 
544
   rozwiazaniem jest uruchomienie programu postmaster z mniejsza
 
545
   maksymalna liczba proces�w backend. Uzyj opcji -N z parameterem
 
546
   mniejszym od domyslnego - 32. Bardziej trwal/ym rozwiazaniem jest
 
547
   zwiekszenie parametr�w SEMMNS i SEMMNI jadra twojego systemu.
 
548
   
 
549
   Niedzial/ajace semafory moga spowodowac niepoprawne zamkniecie systemu
 
550
   w czasie intensywnego korzystania z bazy.
 
551
   
 
552
   Jesli tresc bl/edu jest inna, moze to oznaczac, ze obsl/uga semafor�w
 
553
   nie zostal/a wl/aczona do jadra wcale. Zobacz PostgreSQL
 
554
   Administrator's Guide po bardziej szczeg�l/owe informacje o pamieci
 
555
   dzielonej i semaforach.
 
556
   
 
557
    3.5) W jaki spos�b moge kontrolowac pol/aczenia z innych host�w?
 
558
    
 
559
   Domyslnie PostgreSQL pozwala jedynie na pol/aczenia za pomoca socket�w
 
560
   Unixowych z lokalnego hosta. Inne hosty nie beda mogl/y sie pol/aczyc
 
561
   z serwerem dop�ki nie zostanie dodana opcja -i do postmaster'a, oraz
 
562
   nie umozliwi sie autoryzacji na podstawie adresu host�w modyfikujac
 
563
   odpowiednio plik $PGDATA/pg_hba.conf. To zmiany pozwola na pol/aczenia
 
564
   TCP/IP.
 
565
   
 
566
    3.6) Jak powinienem skonfigurowac system baz danych aby uzyskac lepsza
 
567
    wydajnosc?
 
568
    
 
569
   Indeksy bez watpienia moga przyspieszyc wykonywanie zapytan. Polecenie
 
570
   EXPLAIN pozwala zobaczyc jak PostgreSQL interpretuje Twoje zapytanie i
 
571
   kt�re indeksy sa uzywane.
 
572
   
 
573
   Jesli wykonujesz bardzo duzo INSERT�w, moze warto je wykonac za pomoca
 
574
   jednego duzego pliku uzywajac polecenia COPY. Jest to duzo szybsze niz
 
575
   pojedyncze INSERTy. Po drugie polecenia SQL nie zawarte w bloku
 
576
   okreslajacym transakcje - BEGIN WORK/COMMIT, sa traktowane jako
 
577
   pojedyncza transakcja. Rozwaz wykonanie kilku polecen/zdan SQL w
 
578
   jednym bloku transakcji. To redukuje narzut nakl/adany przez
 
579
   transakcje. Przy duzych zmianach w danych, warto usunac i stworzyc na
 
580
   nowo indeksy.
 
581
   
 
582
   Jest kilka opcji pozwalajacych na poprawienie wydajnosci. Mozesz
 
583
   wyl/aczyc fsync() poprzez uruchomienie postmaster'a z opcjami -o -F.
 
584
   To spowoduje, ze fsync() nie bedzie zrzucal/ danych na dysk po kazdej
 
585
   transakcji.
 
586
   
 
587
   Mozesz takze uruchomic postmaster'a z opcja -B aby zwiekszyc wielkosc
 
588
   pamieci dzielonej uzywanej przez procesy backend�w. Jesli ustawisz ta
 
589
   wartosc zbyt wysoko i przekroczysz limity ustawione przez kernel na
 
590
   pamiec dzielona, postmaster moze sie nie uruchomic. Kazdy bufor
 
591
   zajmuje 8K a domyslna ilosc bufor�w to 64.
 
592
   
 
593
   Mozesz takze uzyc opcji -S dla backendu aby zwiekszyc maksymalna
 
594
   wartosc pamieci uzywana przez proces backendu podczas sortowania.
 
595
   Opcja -S jest ustawiana wartoscia podawana w kilobajtach, domyslna
 
596
   wartosc to 512K.
 
597
   
 
598
   Mozesz takze uzyc polecenia CLUSTER aby pogrupowac dane w tabelach wg
 
599
   indeksu. Zobacz opis polecenia CLUSTER w manualu zeby dowiedziec sie
 
600
   wiecej.
 
601
   
 
602
    3.7) Jakie sa mozliwosci wyszukiwania bl/ed�w?
 
603
    
 
604
   PostgreSQL ma kilka mozliwosci na raportowanie informacji o jego
 
605
   statusie, kt�re moga byc przydatne przy debugowaniu procesu.
 
606
   
 
607
   Przede wszystkim uruchom skrypt configure z opcja --enable-cassert,
 
608
   wiele funkcji assert() monitoruja postep procesu backend i zatrzymuja
 
609
   program kiedy wydarzy sie cos nieoczekiwanego.
 
610
   
 
611
   Zar�wno postmaster jak i postgres maja kilka opcji do debugowania. Za
 
612
   kazdym razem kiedy uruchamiasz postmaster'a, upewnij sie, ze wysyl/asz
 
613
   standardowe wyjscie i error do pliku z logami, np. w ten spos�b:
 
614
    cd /usr/local/pgsql
 
615
    ./bin/postmaster >server.log 2>&1 &
 
616
 
 
617
   To utworzy plik server.log w gl/�wnym katalogu PostgreSQL. Ten plik
 
618
   zawiera pozyteczne informacje o problemach i bl/edach, kt�re
 
619
   wydarzyl/y sie podczas pracy serwera. Postmaster posiada opcje -d,
 
620
   kt�ra pozwala na raportowanie bardzo szczeg�lowych informacji. Do
 
621
   opcji -d podajemy liczbe, kt�ra okresla szczeg�l/owosc wysyl/anych
 
622
   informacji. Musisz miec swiadomosc, ze wysoki poziom logowania bedzie
 
623
   powodowal/ tworzenie bardzo duzych plik�w z logami.
 
624
   
 
625
   Jesli postmaster nie zostal/ uruchomiony, mozesz uruchomic
 
626
   postgres'owy backend z linii polecen, i uruchomic Twoje polecenie SQL
 
627
   bezposrednio na nim. Taki spos�b jest polecany jedynie w przypadku
 
628
   debugowania. Zwr�c uwage, ze w tym wypadku zapytanie konczy znak nowej
 
629
   linii a nie srednik. Jesli skompilowal/es z opcjami debugowania mozesz
 
630
   uzyc debuggera aby sprawdzic co sie dzieje. Poniewz backend nie
 
631
   zostal/ uruchomiony przez postmaster'a, nie dzial/a w identycznym
 
632
   srodowisku, co oznacza ze powt�rzenie warunk�w w jakich wystapil/y
 
633
   problemy moze byc problemem.
 
634
   
 
635
   Jesli postmaster dzial/a, uruchom psql w jednym z okien, nastepnie
 
636
   znajdz PID procesu postgres uzywanego przez psql. Uzyj debuggera aby
 
637
   do PID'u postgres'a. Mozesz ustawiac pul/apki (breakpoints) w
 
638
   debuggerze i wykonywac zapytania z psql. Jesli debugujesz uruchamianie
 
639
   postgres'a, mozesz ustawic zmienna PGOPTIONS="-W n", nastepnie
 
640
   uruchomic psql. Opcja ta pozwoli spowolnic uruchomienie na n sekund
 
641
   abys m�gl/ sie pol/aczyc z procesem za pomoca debugera, ustawic
 
642
   jakiekolwiek pul/apki i kontynuowac proces uruchamiania.
 
643
   
 
644
   postgres moze byc uruchamiany z opcjami -s, -A i -t, kt�re moga byc
 
645
   bardzo przydatne przy debuggowaniu i ocenie wydajnosci.
 
646
   
 
647
   Mozesz takze skompilowac z profilingiem aby zobaczyc jakie funkcje ile
 
648
   czasu wykonuja sie. Pliki profilowane dla backendu zostana umieszczone
 
649
   w katalogu pgsql/data/base/dbname. Pliki profilu klienta zostana
 
650
   umieszczone w biezacym katalogu klienta. Linux wymaga aby kompilowac z
 
651
   opcja -DLINUX_PROFILE aby profilowanie odbywal/o sie poprawnie.
 
652
   
 
653
    3.8) Skad sie bierze komunikat: "Sorry, too many clients" podczas pr�by
 
654
    pol/aczenia sie z baza danych?
 
655
    
 
656
   Musisz zwiekszyc limit ilosci jednoczesnych proces�w bacekendu dla
 
657
   procesu postmaster'a.
 
658
   
 
659
   Domyslny limit to 32 procesy. Mozesz go zwiekszyc przez restart
 
660
   postmaster z odpowiednia wartoscia ustawiana opcje -N w pliku
 
661
   postgresql.conf.
 
662
   
 
663
   Wez pod uwage, ze jesli zwiekszysz wartosc podana w opcji -N na wiecej
 
664
   niz 32 musisz takze zwiekszyc wartosc w opcji -B ponad jej domyslna
 
665
   wartosc 64; wartosc -B musi byc co najmniej dwa razy wieksza od
 
666
   wartosci podanej w opcji -N, a prawdopodobnie powinna byc w
 
667
   rzeczywistosci jeszcze wieksza dla optymalnej wydajnosci. Dla duzej
 
668
   liczby proces�w backendu na pewno zauwazysz, ze trzeba zwiekszyc r�zne
 
669
   parametry jadra Unixa. Rzeczy, kt�re pownienes sprawdzic to maksymalna
 
670
   liczba blok�w pamieci dzielonej, SHMMAX; maksymalna liczba semafor�w,
 
671
   SEMMNS oraz SEMMNI; maksymalna liczba proces�w, NPROC; maksymalna
 
672
   liczba proces�w na jednego uzytkownika, MAXUPRC; i maksymalna liczba
 
673
   otwartych plik�w, NFILE oraz NINODE. Pow�d dla kt�rego PostgreSQL ma
 
674
   limit na maksymalna liczbe proces�w backendu to obawa o wyczerpanie
 
675
   zasob�w systemu.
 
676
   
 
677
    3.9) Jakie pliki znajduja sie w pg_temp?
 
678
    
 
679
   Katalog ten zawiera tymczasowe pliki utworzone przez executor. Dla
 
680
   przykl/adu, jesli jakas operacja sortowania jest wymagana do wykonania
 
681
   ORDER BY, a samo sortowanie wymaga wiecej miejsca niz parametr
 
682
   backendu -S ustawil/ do wykorzystania, wtedy tymczasowe pliki sa
 
683
   uzywane do przechowywania tych danych.
 
684
   
 
685
   Pliki tymczasowe powinny byc usuniete automatycznie, ale mogl/o sie to
 
686
   nie stac jesli proces backendu w miedzyczasie nie zakonczyl/ sie
 
687
   poprawnie podczas operacji sortowania. Jesli w danym momencie nie
 
688
   dzial/aja zadne procesy backend�w mozesz spokojnie usunac pliki
 
689
   pg_tempNNN.NN.
 
690
   
 
691
    3.9) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze
 
692
    skrypt�w dump i restore?
 
693
    
 
694
   Tw�rcy PostgreSQL dokonuja jedynie mal/ych zmian pomiedzy mal/ymi
 
695
   upgradami wersji, np z 7.2 do 7.2.1, wtedy upgrade nie wymaga
 
696
   korzystania z dump i restore. Przy wiekszych zmianach, np. z wersji
 
697
   7.2 do 7.3, czesto zmianymaja wpl/yw na format przechowywanych danych.
 
698
   Zmiany te sa na tyle skomplikowane, ze nie utrzymujemy zgodosci z
 
699
   poprzednimi wersjami PostgreSQL. dump pozwala na wydostanie danych w
 
700
   takiej postaci, w kt�rej l/atwe jest ich zaimportowanie do nowszych
 
701
   wersji bez kl/opotu.
 
702
   
 
703
   W wydaniach gdzie zmiany nie dotycza formatu danych na dysku, mozna
 
704
   wykorzystac skryptu pg_upgrade, do upgradu bez uzycia dump/restore.
 
705
   Dokumentacja do danego wydania zawiera informacje czy mozliwe jest
 
706
   uzycie pg_upgrade.
 
707
     _________________________________________________________________
 
708
   
 
709
                         Pytania dotyczace uzywania
 
710
                                      
 
711
    4.1) Jaka jest r�znica pomiedzy kursorami binarnymi (binary cursors) i
 
712
    zwykl/ymi kursorami (normal cursors)?
 
713
    
 
714
   Zobacz w manualu opis polecenia DECLARE.
 
715
   
 
716
    4.2) Jak moge pobrac za pomoca SELECT jedynie kilka pierwszych wynik�w
 
717
    zapytania?
 
718
    
 
719
   Zobacz w manualu opis polecenia FETCH lub uzyj polecenia SELECT ...
 
720
   LIMIT....
 
721
   
 
722
   Nawet jesli chesz pobrac kilka pierwszych rzed�w z wyniku zapytania,
 
723
   cal/e zapytanie musi zostac wykonane. Byc moze powinienes skorzystac z
 
724
   polecenia ORDER BY. Jesli istnieje indeks kt�ry odpowiada polom
 
725
   okreslonym przez ORDER BY, PostgreSQL moze wykorzystac jedynie kilka
 
726
   pierwszych rzed�w, byc moze bedzie koniecznosc wykonania zapytania do
 
727
   momentu az zostana znalezione pozadane wyniki.
 
728
   
 
729
   Aby otrzymac losowy rzad, uzyj:
 
730
    SELECT col
 
731
    FROM tab
 
732
    ORDER BY random()
 
733
    LIMIT 1;
 
734
        
 
735
 
 
736
    4.3) Jak moge uzyskac liste wszystkich tabel czy innych rzeczy pod psql?
 
737
    
 
738
   Mozesz sprawdzic zawartosc zr�del/ psql, a konkretnie plik
 
739
   pgsql/src/bin/psql/describe.c. Zawiera on polecenia SQL kt�re generuja
 
740
   wyniki komend z backslashem. Mozesz takze uruchomic psql z opcja -E
 
741
   wtedy po wykonaniu polecenia z backslashem wyswietlane bedzie
 
742
   zapytanie, kt�re w rzeczywistosci jest wykonywane.
 
743
   
 
744
    4.4) Jak usunac kolumne z tabeli lub zmienic jej typ?
 
745
    
 
746
   DROP COLUMNT zostal/o dodane w wersji 7.3 przy poleceniu ALTER TABLE
 
747
   DROP COLUMN. We wczesniejszych wersjach mozesz zrobic tak:
 
748
         BEGIN;
 
749
         LOCAL TABLE old_table;
 
750
    SELECT ...  -- wybierz wszystkie kolumny poza ta jedna kt�rej chcesz sie pozbyc
 
751
    INTO TABLE new_table
 
752
    FROM old_table;
 
753
    DROP TABLE old_table;
 
754
    ALTER TABLE new_table RENAME TO old_table;
 
755
 
 
756
   Aby zmienic typ danych kolumny mozesz zrobic tak:
 
757
   BEGIN;
 
758
   ALTER TABLE tab ADD COLUMN new_col new_data_type;
 
759
   UPDATE tab SET new_col = CAST(old_col AS new_data_type);
 
760
   ALTER TABLE tab DROP COLUMN old_col;
 
761
   COMMIT;
 
762
        
 
763
    4.5) Jaki jest maksymalny rozmiar dla rzedu, tabeli i bazy danych?
 
764
    
 
765
   Oto wszystkie ograniczenia:
 
766
    Maksymalny rozmiar dla bazdy danych?     nieograniczony ( istnieja
 
767
         bazy danych o wielkosci 32 TB databases )
 
768
    Maksymalny rozmiar dla tabeli?           32 TB
 
769
    Maksymalny rozmiar dla rzedu?            1.6 TB
 
770
    Maksymalny rozmiar pola?                 1 GB
 
771
    Maksymalna liczba rzed�w w tabeli?       nieograniczona
 
772
    Maksymalna liczba kolumn w tabeli?       250-1600 w zalezonosci od typ�w kolumn
 
773
    Makasymalna liczba indeks�w na tabeli?   nieograniczona
 
774
 
 
775
   Oczywiscie "nieograniczony" nie jest prawda tak do konca, istnieja
 
776
   ograniczenia wynikajace z dostepnego miejsca na dysku, pamieci/swapa.
 
777
   Kiedy wielkosci te beda bardzo duze moze odbic sie to na wydajnosci.
 
778
   
 
779
   Maksymalny rozmiar tabeli, czyli 32 TB nie wymaga od systemu
 
780
   operacyjnego wsparcia dla duzych plik�w. Duze tabele sa przechowywane
 
781
   jako pliki o rozmiarze 1 GB, wiec ograniczenia co do wielkosci plik�w
 
782
   narzucone przez system plik�w nie sa istotne.
 
783
   
 
784
   Masymalny rozmiar tabeli i maksymalna liczba kolumn moze byc
 
785
   zwiekszona jesli zwiekszymy domyslny rozmiar bloku (block size) do
 
786
   32k.
 
787
   
 
788
    4.6) Jak duzo miejsca w bazie danych jest konieczne aby przechowywac dane
 
789
    ze zwyczajnego pliku tekstowego?
 
790
    
 
791
   Baza danych PostgreSQL moze potrzebowac do pieciu razy wiecej miejsca
 
792
   na przechowywanie danych z plik�w tekstowych niz ich objetosc.
 
793
   
 
794
   Jako przykl/ad mozemy rozwazyc plik skl/adajacy sie z 100,000 linii
 
795
   zbudowanych z liczby cal/kowitej oraz opisu tekstowego w kazdej.
 
796
   Zal/�zmy, ze srednio kazdy l/ancuch tekstu w linii zajmuje 20 bajt�w.
 
797
   Cal/y plik powinien zajmowac ok. 2.8 MB. Rozmiar pliku bazy danych w
 
798
   PostgreSQL zawierajacego te dane mozna oszacowac na okol/o 6.4MB:
 
799
    36 bajt�w: nagl/�wek kazdego rzedu w przyblizeniu)
 
800
    24 bajty:  jedno pole int i jedno pole typu text
 
801
   + 4 bajty:  wkaznik na stronie do krotki
 
802
   --------------------------------------------------
 
803
    64 bajty w jednym rzedzie
 
804
 
 
805
        Strona danych w PostgreSQL zajmuje 8192 bajt�w (8 KB), wiec:
 
806
 
 
807
   8192 bajt�w na strone
 
808
   ---------------------   =  128 rzed�w na jedna strone w bazie (zaokraglone w d�l/)
 
809
     64 bajt�w na rzad
 
810
 
 
811
   100000 rzed�w danych
 
812
   -----------------------  =  782 stron w bazie danych (zaokraglone w g�re)
 
813
      128 rzed�w na strone
 
814
 
 
815
782 stron w bazie * 8192 bajt�w na strone  =  6,406,144 bajt�w (6.4 MB)
 
816
 
 
817
   Indeksy nie powoduja duzego narzutu na zajmowane miejsce, ale
 
818
   zawieraja pewne dane, wiec w pewnych przypadkach moga byc cal/kiem
 
819
   duze.
 
820
   
 
821
   NULLe sa przechowywane jako mapy bitowe, wiec uzywaja bardzo mal/o
 
822
   miejsca.
 
823
   
 
824
    4.7) Jak moge sprawdzic jakie tabele, klucze, bazy danych i uzytkownicy sa
 
825
    utworzeni?
 
826
    
 
827
   psql ma cal/kiem duza ilosc polecen z backslashem aby wydobyc takie
 
828
   informacje. Wprowadz \? aby zobaczyc ich spis. Istnieja takze tablice
 
829
   systemowe rozpoczynajace sie od pg_, zawierajace interesujace Ciebie
 
830
   informacje. Wykonanie psql -l pokaze spis wszystkich baz danych.
 
831
   
 
832
   Obejrzyj takze plik pgsql/src/tutorial/syscat.source. Zawiera on wiele
 
833
   z zapytan typu SELECT, kt�re sa potrzebne aby wydobyc informacje z
 
834
   tablic systemowych.
 
835
   
 
836
    4.8) Moje zapytania sa wolne lub nie uzywaja kluczy. Dlaczego?
 
837
    
 
838
   Indeksy nie sa uzywane automatycznie przez kazde z zapytan. Ideksy sa
 
839
   uzywane jedynie gdy tabela jest odpowiedniego rozmiaru, wiekszego niz
 
840
   wymagany minimalny, a zapytanie wybiera jedynie mal/y procent
 
841
   zawartosci tabeli. Wynika to z tego, ze losowy dostep do dysku
 
842
   powodowany przez ideksowane poszukiwanie jest czasami wolniejsze niz
 
843
   poszukiwanie sekwencyjne bez uzycia kluczy.
 
844
   
 
845
   Zeby zdecydowac czy indeks powinien byc uzywany, PostgreSQL musi miec
 
846
   statystyki dotyczace danej tabeli. Sa one gromadzone przez uzycie
 
847
   polecenia VACUUM ANALYZE, lub poprostu ANALYZE. uzywajac statystyk,
 
848
   optymalizator wie ile rzed�w jest w tabeli i moze lepiej okreslic czy
 
849
   indeksy powinny byc uzyte. Statystyki moga byc takze pomocne w
 
850
   okresleniu najlepszej kolejnosci wykonania zl/aczenia (join) i jego
 
851
   sposobu. Gromadzenie statystyk powinno sie odbywac w okreslonych
 
852
   interwal/ach czasu poniewaz dane w tabelach zmieniaja sie.
 
853
   
 
854
   Indeksy nie sa zazwyczaj uzywane przez ORDER BY lub przy wykonywaniu
 
855
   zl/aczen (join). Sekwencyjne przeszukiwanie po kt�rym nastepuje
 
856
   sortowanie jest zazwyczaj szybsze nie wyszukiwanie za pomoca indeksu
 
857
   na duzej tabeli.
 
858
   
 
859
   Jakkolwiek LIMIT w pol/aczeniu z ORDER BY czesto bedzie wykorzystywal/
 
860
   indeksy poniewaz jedynie mal/a czesc z tabeli jest zwracana. W
 
861
   rzeczywistosci, chociaz MAX() i MIN() nie uzywaja indeks�w, mozliwe
 
862
   jest aby zwr�cic te wartosci uzywajac indeks�w poprzez uzycie ORDER BY
 
863
   i LIMIT.
 
864
    SELECT col
 
865
    FROM tab
 
866
    ORDER BY col [ DESC ]
 
867
    LIMIT 1;
 
868
        
 
869
   Jesli uwazasz, ze optimizer myli sie wybierajac sequential scan, uzyj
 
870
   SET enable_seqscan TO 'off' i uruchom testy aby sprawdzic czy wtym
 
871
   wypadku zapytanie bedzie szybciej wykonywane.
 
872
   
 
873
   Kiedy uzywa sie operator�w dopasujacych takich jak LIKE lub ~, indeksy
 
874
   beda uzywane jedynie w pewnych wypadkach:
 
875
     * Poczatek wyszukiwania jest oparty na poczatku l/ancucha tekstu.
 
876
          + wzorce LIKE nie moga sie zaczynac %
 
877
          + dopasowania operatorem ~ (dopasowania regularne) musza sie
 
878
            zaczynac znakiem specjalnym ^.
 
879
     * Poczatek wyszukiwania nie moze sie zaczynac od klas znak�w, np.
 
880
       [a-e].
 
881
     * Case-insensitive searches such as ILIKE and ~* do not utilise
 
882
       indexes. Instead, use functional indexes, which are described in
 
883
       section 4.12.
 
884
     * Standardowe locale C musi byc uzyte przy wykonywaniu initdb
 
885
       
 
886
    4.9) Jak moge sprawdzic w jakis spos�b "query optimizer" wykonuje moje
 
887
    zapytanie?
 
888
    
 
889
   Zobacz manual dla polecenia EXPLAIN.
 
890
   
 
891
    4.10) Co to jest "R-tree index"?
 
892
    
 
893
   Indeks R-tree jest uzywany do indeksowania danych przestrzennych.
 
894
   Indeks hasuujacy nie nadaje sie do wyszukiwania odlegl/osci. Natomiast
 
895
   indeks typu B-tree moze wyszukiwac odleglosci jedynie w
 
896
   jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z
 
897
   przestrzeniami wielo-wymiarowymi. Dla przykl/adu, jesli zostanie
 
898
   zal/ozony indeks typu R-tree na polu typu point, system moze bardziej
 
899
   wydajnie odpowiadac na zapytania typu "select all points within a
 
900
   bounding rectangle."
 
901
   
 
902
   Zr�dl/owym dokumentem opisujacym oryginalnie projektowanie R-tree
 
903
   indeks�w jest:
 
904
   
 
905
   Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
 
906
   Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
 
907
   Data, 45-57.
 
908
   
 
909
   Ten dokument mozesz znalezc takze w pracy Stonebraker'a "Readings in
 
910
   Database Systems".
 
911
   
 
912
   Wbudowane indeksy R-trees radza sobie w wielobokami i boxes.
 
913
   Teoretycznie, indeksy R-tree moga byc rozszerzone o mozliwosci
 
914
   indeksowania w wiecej wymiarowych przestrzeniach. W praktyce,
 
915
   rozbudowa indeks�w R-tree wymaga troche pracy, a w tej chwili nie
 
916
   dysponujemy jakakolwiek dokumentacja jak to zrobic.
 
917
   
 
918
    4.11) Co to jest "Genetic Query Optimizer"?
 
919
    
 
920
   Modul/ GEQO ma za zadanie przyspieszenie optymalizacji zapytan l/aczac
 
921
   wiele tabel za pomoca algorytm�w genetycznych (Genetic Algorithm
 
922
   (GA)). Pozwala na uzywanie duzych zapytan l/aczacych tabele (join
 
923
   queries) bez wykorzystywania zasobozernego wyszukiwania.
 
924
   
 
925
    4.12) Jak moge uzywac wyrazen regularnych w zapytaniach i zapytan
 
926
    case-insensitive w wyrazeniach regularnych? Jak korzystac z indeks�w dla
 
927
    zapytan case-insensitive?
 
928
    
 
929
   Operator ~ moze byc wykorzystywany do wyszukiwania za pomoca wyrazen
 
930
   regularnych, a ~* do wyszukiwania case-insensitive z wyrazeniami
 
931
   regularnymi. Wariant case-insensitive dla LIKE zostal/ nazwany ILIKE.
 
932
   
 
933
   Por�wnania case-insensitive sa zazwyczaj wykonywane w nastepujacy
 
934
   spos�b:
 
935
    SELECT *
 
936
    FROM tab
 
937
    WHERE lower(col) = 'abc'
 
938
 
 
939
   W tym wypadku standardowe indeksy nie beda uzywane. Mozesz utworzyc
 
940
   indeks funkcyjny, poprzez:
 
941
    CREATE INDEX tabindex on tab (lower(col));
 
942
 
 
943
    4.13) Jak sprawdzic w zapytaniu czy pole ma wartosc NULL?
 
944
    
 
945
   Mozesz to sprawdzic, testujac wartosc kolumny warunkiem IS NULL albo
 
946
   IS NOT NULL.
 
947
   
 
948
    4.14) Jaka jest r�znica pomiedzy r�znymi typami tekstowymi (character
 
949
    types)?
 
950
    
 
951
Type            Nazwa wewnetrzna   Uwagi
 
952
--------------------------------------------------
 
953
VARCHAR(n)      varchar            rozmiar okresla maksymalna dl/ugosc, nie matutaj wypel/niania
 
954
CHAR(n)         bpchar             wypel/niane pustymi znakami do podanej dl/ugosci
 
955
TEXT            text               bez limitu na dl/ugosc l/ancucha
 
956
BYTEA           bytea              zmiennej dl/ugosci tablica bajt�w (null-byte safe)
 
957
"char"          char                      1 znak
 
958
 
 
959
   Jesli bedziesz przegladac katalogi systemowe lub komunikaty o bl/edach
 
960
   czesto spotkasz sie z podanymi powyzej nazwami wewnetrznymi.
 
961
   
 
962
   Pierwsze cztery typy powyzej to tzw typy "varlena" (np. pierwsze
 
963
   cztery bajty na dysku to dl/ugosc, po kt�rych jest data). Dlatego
 
964
   faktyczna dl/ugosc takiego l/ancucha jest troche wieksza niz
 
965
   zadeklarowany rozmiar. Te typy takze podlegaja kompresji lub moga byc
 
966
   przechowywane out-of-line jako TOAST, wiec faktyczne zuzycie miejsca
 
967
   na dysku moze byc mniejsze niz oczekiwane.
 
968
   
 
969
   VARCHAR(n) jest najodpowiedniejszy do przechowywania l/ancuch�w o
 
970
   r�znej dl/ugosci ale okresla on maksymalna jego dl/ugosc. TEXT jest
 
971
   najlepszy dla l/ancuch�w o dowolnej dl/ugosci, nie przekraczajacej
 
972
   1GB.
 
973
   
 
974
   CHAR(n) jast najlepszym typem do przechowywania l/ancuch�w o tej samej
 
975
   dl/ugosci. CHAR(n) wypel/nia dane do zadanej dl/ugosci, podczas gdy
 
976
   VARCHAR(n) przechowuje jedynie dane dostarczone. BYTEA sl/uzy do
 
977
   przechowywania danych binarnych, w szczeg�lnosci dla danych
 
978
   zawierajacych NULL bajty. Wszystkie typy opisane tutaj maja podobne
 
979
   charakterystyki jesli chodzi o wydajnosc.
 
980
   
 
981
    4.15.1) Jak moge utworzyc pole kt�re samo zwieksza swoja wartosc?
 
982
    
 
983
   PostgreSQL ma zaimplementowany typ SERIAL. Automatycznie tworzy
 
984
   sekwencje i indeks na tej kolumnie. Dla przykladu:
 
985
    CREATE TABLE person (
 
986
        id   SERIAL,
 
987
        name TEXT
 
988
    );
 
989
 
 
990
   zostanie automatycznie prztl/umaczone na:
 
991
    CREATE SEQUENCE person_id_seq;
 
992
    CREATE TABLE person (
 
993
        id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
 
994
        name TEXT
 
995
    );
 
996
    CREATE UNIQUE INDEX person_id_key ON person ( id );
 
997
 
 
998
   Wiecej informacji o sekwencjach znajdziesz w manualu o
 
999
   create_sequence. Mozesz takze uzyc pola OID jako unikalnej wartosci
 
1000
   dla kazdego rzedu danych. Jesli bedziesz potrzebowal/ z backupowac
 
1001
   dane robiac dump bazy i odtworzyc ja, musisz uzyc pg_dump z opcja -o
 
1002
   lub polecenia COPY WITH OIDS aby zachowac OIDy.
 
1003
   
 
1004
    4.15.2) Jak pobrac wartosc pola typu SERIAL po wykonaniu insert'u?
 
1005
    
 
1006
   Jednym z podejsc jest pobranie kolejnej wartosci typu SERIAL z
 
1007
   sekwencji za pomoca funkcji nextval() zanim zostanie wstawiona, a
 
1008
   p�zniej nalezy jej uzyc. Uzywajac przykl/adu z tabeli z punktu 4.15.1,
 
1009
   moze to wygladac w Perlu na przykl/ad w ten spos�b:
 
1010
    new_id = output of "SELECT nextval('person_id_seq')"
 
1011
    INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
 
1012
 
 
1013
   Bedziesz mial/ wtedy ta wartosc przechowana w zmiennej new_id do
 
1014
   uzytku w innych zapytaniach (np. jako klucz obcy do tabeli person).
 
1015
   Warto zwr�cic uwage, ze nazwa automatycznie utworzonej sekwencji
 
1016
   SEQUENCE bedzie nastepujaca: <tabela>_<kolumnatypuserial>_seq, gdzie
 
1017
   tabela i kolumnatypuserial sa nazwami Twojej tabeli i Twojej kolumny
 
1018
   typu SERIAL.
 
1019
   
 
1020
   Inne rozwiazanie to uzycie funkcji currval() na pola typu SERIAL po
 
1021
   dodaniu nowej wartosci do rzedu zawierajacego kolumne typu SERIAL z
 
1022
   wstawiona domyslnie wartoscia, np.
 
1023
    INSERT INTO person (name) VALUES ('Blaise Pascal');
 
1024
    new_id = output of "SELECT currval('person_id_seq')";
 
1025
 
 
1026
   Ostatecznie mozesz uzyc OID zwracanej po wykonaniu INSERT, chociaz to
 
1027
   jest najmniej przenosne rozwiazanie. W Perlu, wykorzystujac biblioteke
 
1028
   DBI z modul/em Edmunda Mergla DBD::Pg, oid jest dostepny poprzez
 
1029
   $sth->{pg_oid_status} po wykonaniu $sth->execute().
 
1030
   
 
1031
    4.15.3) Czy uzycie currval() i nextval() nie doprowadzi do race condition z
 
1032
    innymi uzytkownikami?
 
1033
    
 
1034
   Nie. currval() zwraca biezaca wartosc przypisana przez Tw�j backend, a
 
1035
   nie przez wszystkich uzytkownik�w.
 
1036
   
 
1037
    4.15.4) Dlaczego numery sekwencji nie sa ponownie uzywane przy przerwaniu
 
1038
    transakcji? Skad sie biora luki w numerowaniu kolumny tabeli
 
1039
    sekwancjami/SERIALem?
 
1040
    
 
1041
   Aby poprawic zbieznosc (concurrency), wartosci sekwencji sa podawane
 
1042
   dzial/ajacym transakcjom kiedy tego potrzebuja i nie sa blokowane
 
1043
   dop�ki transakcja sie nie zakonczy. To spowoduje przerwy w numerowaniu
 
1044
   z przerwanych transakcji.
 
1045
   
 
1046
    4.16) Co to jest OID? Co to jest TID?
 
1047
    
 
1048
   OID sa PostgreSQL'owym rozwiazaniem problemu unikalnych numer�w
 
1049
   rzed�w. Kazdy rzad tworzony przez PostgreSQL otrzymuje unikalny OID.
 
1050
   Wszystkie OIDy generowane podczas procesu uruchamianego przez skrypt
 
1051
   initdb maja mniejsza wartosc niz 16384 (na podstawie pliku
 
1052
   backend/access/transam.h). Wszystkie OIDy tworzone przez uzytkownika
 
1053
   sa r�wne lub wieksze podanej wczesniej wartosci. Domyslnie wszystkie
 
1054
   OIDy sa unikalne nie tylko w pojedynczej tabeli czy bazie danych ale w
 
1055
   cal/ej instalacji PostgreSQL.
 
1056
   
 
1057
   PostgreSQL uzywa OID�w w swoim wewnetrznym systemie tabel, aby mozna
 
1058
   byl/o je l/aczyc. Te OIDy moga byc uzywane aby identyfikowac rzedy w
 
1059
   tabelach i wykorzystywac je w zl/aczeniach tych tabel. Zaleca sie abys
 
1060
   uzywal/ typu OID aby przechowywac wartosci OID. Mozesz utworzyc indeks
 
1061
   na polu OID aby dostep do niego byl/ szybszy.
 
1062
   
 
1063
   OID sa przypisane do wszystkich rzed�w z jednego gl/�wnego miejsca i
 
1064
   uzywane sa przez wszystkie bazy danych. Jesli chcial/bys zmienic OID
 
1065
   na cos innego, lub jesli chcial/bys zrobic kopie tabeli, z orginalnymi
 
1066
   OIDami nie ma zadnego przeciwwskazania abys to zrobil/:
 
1067
        CREATE TABLE new_table(old_oid oid, mycol int);
 
1068
        SELECT old_oid, mycol INTO new FROM old;
 
1069
        COPY new TO '/tmp/pgtable';
 
1070
        DELETE FROM new;
 
1071
        COPY new WITH OIDS FROM '/tmp/pgtable';
 
1072
 
 
1073
   OIDy sa przechowywane jako cztero-bajtowe liczby cal/kowite i skoncza
 
1074
   sie po osiagnieciu czterech miliard�w. Nikt jak dotad nie zgl/osil/
 
1075
   aby cos takiego sie stalo, ale mamy zamiar pozbyc sie tego
 
1076
   ograniczenia zanim ktos to zgl/osi.
 
1077
   
 
1078
   TID sa uzywane aby zidentyfikowac konkretne rzedy z blokami i
 
1079
   wartoscia ofset�w. TIDy zmieniaja sie wraz ze zmianami rzed�w. Sa
 
1080
   uzywane przez indeksy, aby wskazywac do fizycznych rzed�w.
 
1081
   
 
1082
    4.17) Jakie jest znaczenie niekt�rych termin�w w PostgreSQL?
 
1083
    
 
1084
   W czesci kodu zr�dl/owego i starszej dokumentacji uzywamy termin�w,
 
1085
   kt�re maja bardziej og�lne znaczenie. Oto niekt�re z nich:
 
1086
     * table, relation, class
 
1087
     * row, record, tuple
 
1088
     * column, field, attribute
 
1089
     * retrieve, select
 
1090
     * replace, update
 
1091
     * append, insert
 
1092
     * OID, serial value
 
1093
     * portal, cursor
 
1094
     * range variable, table name, table alias
 
1095
       
 
1096
   Liste termin�w zwiazanych z bazami danych mozesz znalezc pod tym
 
1097
   adresem:http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/
 
1098
   glossary/glossary.html.
 
1099
   
 
1100
    4.18) Skad bierze sie ten bl/ad "ERROR: Memory exhausted in
 
1101
    AllocSetAlloc()"?
 
1102
    
 
1103
   Prawdopodobnie wyczerpal/a Ci sie pamiec wirtualna (virtual memory) w
 
1104
   systemie lub Tw�j kernel ma zbyt nisko ustawione limity dla pewnych
 
1105
   zasob�w. Spr�buj wykonac nastepujace polecenia zanim uruchomisz
 
1106
   postmaster'a:
 
1107
    ulimit -d 262144
 
1108
    limit datasize 256m
 
1109
 
 
1110
   W zaleznosci od shell'a jakiego uzywasz jedno z tych polecen moze nie
 
1111
   zadzial/ac, ale to ustawienie pozwoli ustawic segment danych dla
 
1112
   procesu znacznie wiekszy i byc moze pozwoli wykonac zapytanie. To
 
1113
   polecenie zadzial/a dla biezacego procesu oraz wszytkich podproces�w
 
1114
   utworzonych po wykonaniu polecenia. Jesli ten problem wystepuje z
 
1115
   klientem SQL, poniewaz backend zwraca zbyt duzo danych, spr�buj
 
1116
   wykonac to polecenie przed uruchomieniem klienta.
 
1117
   
 
1118
    4.19) Jak sprawdzic jakiej wersji PostgreSQL uzywam?
 
1119
    
 
1120
   W psql, wpisz select version();
 
1121
   
 
1122
    4.20) Dlaczego operacje, kt�re wykonuje na duzych obiektach "large-object"
 
1123
    zwracaja komunikat: "invalid large obj descriptor"?
 
1124
    
 
1125
   Musisz uzyc BEGIN WORK i COMMIT przed i po uzyciu uchwytu do duzego
 
1126
   obiektu, tzn. musisz nimi otoczyc funkcje lo_open ... lo_close.
 
1127
   
 
1128
   Obecnie PostgreSQL uzywjac "rule" zamyka uchwyt do duzego obiektu przy
 
1129
   kazdym wywol/aniu "commit". Wiec pierwsze pr�ba zrobienia czegokolwiek
 
1130
   z uchwytem spowoduje wypisanie: invalid large obj descriptor. Kod,
 
1131
   kt�ry do tej pory dzial/al/ (przynajmniej wiekszosc razy) bedzie teraz
 
1132
   generowal/ informacje o bl/edzie jesli nie bedziesz korzystal/ z
 
1133
   transakcji.
 
1134
   
 
1135
   Jesli uzywasz interfejsu klienta jak ODBC byc moze bedziesz musial/
 
1136
   ustawic auto-commit off.
 
1137
   
 
1138
    4.21) Jak stworzyc kolumne kt�rej domyslna wartoscia bedzie biezacy czas?
 
1139
    
 
1140
   Uzyj CURRENT_TIMESTAMP:
 
1141
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
 
1142
 
 
1143
    4.22) Dlaczego zapytania uzywajace IN sa takie wolne?
 
1144
    
 
1145
   W wersjach wczesniejszych niz 7.4 l/aczymy podzapytania w outer
 
1146
   queries poprzez sekwencyjne przeszukiwanie wynik�w podzapytania dla
 
1147
   kazdego rzedu z outer query. Jesli podzapytanie zwraca jedynie kilka
 
1148
   rzed�w a zewnetrzne zapytanie zwraca ich wiele, IN jest najszybsze.
 
1149
   Aby przyspieszyc inne zapytania mozna zastapic IN przez EXISTS:
 
1150
SELECT *
 
1151
    FROM tab
 
1152
    WHERE col IN (SELECT subcol FROM subtab)
 
1153
 
 
1154
   na:
 
1155
SELECT *
 
1156
    FROM tab
 
1157
    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
 
1158
 
 
1159
   Aby to rozwiazanie byl/o szybkie, subcol powinna byc kolumna
 
1160
   indeksowana.
 
1161
   
 
1162
   W wersji 7.4 i p�zniejszych, IN w rzeczywistosci uzywa tej samej
 
1163
   wyrafinowanej techniki l/aczenia jak normalne zapytania i jest
 
1164
   preferowane nad uzywaniem EXISTS.
 
1165
   
 
1166
    4.23) Jak wykonac "outer join"?
 
1167
    
 
1168
   PostgreSQL ma zaimplementowane outer join wykorzystujac standardowa
 
1169
   skl/adnie SQL. Ponizej dwa przykl/ady:
 
1170
    SELECT *
 
1171
    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
 
1172
 
 
1173
   or
 
1174
    SELECT *
 
1175
    FROM t1 LEFT OUTER JOIN t2 USING (col);
 
1176
 
 
1177
   Te dwa identyczne zapytania l/acza kolumne t1.col z kolumna t2.col,
 
1178
   ale takze zwr�ca niepol/aczone rzedy w t1 (te, kt�re nie pasuja w t2).
 
1179
   RIGHT join dodal/by niepol/aczone rzedy z tabeli t2. FULL join
 
1180
   zwr�cil/by rzedy plus dodatkowo wszystkie rzedy z tabel t1 i t2.
 
1181
   Sl/owo OUTER jest opcjonalne i jest dodawane domyslnie przy LEFT,
 
1182
   RIGHT, i FULL join'ach. Zwykl/e join'y sa nazywane INNER joins.
 
1183
   
 
1184
   W poprzednich wersjach "outer joins" moga byc zasymulowane poprzez
 
1185
   uzycie slowa kluczowego UNION i NOT IN. Dla przykl/adu, l/aczac tabele
 
1186
   tab1 i tab2, nastepujace zapytanie wykonuje outer join:
 
1187
    SELECT tab1.col1, tab2.col2
 
1188
    FROM tab1, tab2
 
1189
    WHERE tab1.col1 = tab2.col1
 
1190
    UNION ALL
 
1191
    SELECT tab1.col1, NULL
 
1192
    FROM tab1
 
1193
    WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
 
1194
    ORDER BY col1
 
1195
 
 
1196
    4.24) Jak wykonywac zapytanie uzywajace kilku baz danych jednoczesnie?
 
1197
    
 
1198
   Nie ma takiej mozliwosci aby w zapytaniu odpytawac inna baze danych
 
1199
   poza biezaca. Poniewaz PostgreSQL l/aduje specyficzne dla bazy danych
 
1200
   katalogi systemowe, nie jest do konca jasne jak zapytanie pomiedzy
 
1201
   r�znymi bazami danych powinno sie zachowywac.
 
1202
   
 
1203
   contrib/dblink pozwala na wykonywanie zapytan poprzez r�zne bazy
 
1204
   danych wywol/ujac odpowiednie funkcje. Oczywiscie klient moze l/aczyc
 
1205
   sie z r�znymi bazami danych i l/aczyc informacje w ten spos�b uzyskana
 
1206
   po stronie klienta.
 
1207
   
 
1208
    4.25) Jak zwr�cic w funkcji wiele rzed�w lub kolumn?
 
1209
    
 
1210
   Mozesz w l/atwy spos�b zwracac wiele rzed�w lub kolumn uzywajac
 
1211
   funkcji z:
 
1212
   http://techdocs.postgresql.org/guides/SetReturningFunctions.
 
1213
   
 
1214
    4.26) Dlaczego nie moge w spos�b pewny tworzyc/usuwac tabel tymczasowych w
 
1215
    funkcjach PL/PgSQL?
 
1216
    
 
1217
   PL/PgSQL przechowuje w cache zawartosc funkcji, niepozadanym efektem
 
1218
   tego jest to, ze gdy taka funkcja korzysta z tabel tymczasowych, kt�re
 
1219
   sa p�zniej kasowane i odtwarzane, a funkcja wywol/ywana jest
 
1220
   ponownie,jej wywol/anie nie powiedzie sie poniewaz cachowana funkcja
 
1221
   wciaz bedzie wskazywac na stara tablice tymczasowa. Rozwiazaniem tego
 
1222
   problemu jest uzywanie EXECUTE aby korzystac z tabel tymczasowych w
 
1223
   PL/PgSQL. To spowoduje, ze zapytanie bedzie parsowane przy kazdym
 
1224
   wywol/aniu funkcji.
 
1225
   
 
1226
    4.27) Jakie sa mozliwosci replikacji w PostgreSQL?
 
1227
    
 
1228
   Jest kilka opcji aby stosowac replikacje typu master/slave. Ten typ
 
1229
   pozwala jedynie masterowi na dokonywanie zmian w bazie danych, a slave
 
1230
   moze jedynie te zmiany odczytywac. Na stronie
 
1231
   http://gborg.PostgreSQL.org/genpage?replication_research znajduje sie
 
1232
   ich lista. Replikacja typu multi-master jest w trakcie prac, opis
 
1233
   projektu znajduje sie pod adresem:
 
1234
   http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
 
1235
   
 
1236
    4.28) Jakie mozliwosci szyfrowania oferuje PostgreSQL?
 
1237
    
 
1238
     * contrib/pgcrypto zawiera wiele funkcji za pomoca, kt�rych mozemy
 
1239
       uzywac kryptografii w zapytaniach SQL.
 
1240
     * Aby szyfrowac transmisje od klienta do serwera, ten musi miec
 
1241
       ustawiona opcje ssl na true w pliku postgresql.conf, odpowiedni
 
1242
       wpis host lub hostssl musi wystepowac w pliku pg_hba.conf, oraz
 
1243
       sslmode nie moze byc wyl/aczone w kliencie. (Warto zwr�cic uwage,
 
1244
       ze mozliwe jest takze uzywanie transport�w szyfrujac�w przez
 
1245
       strony trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem
 
1246
       dla SSL przez PostgreSQL).
 
1247
     * Hasl/a uzytkownik�w bazy danych sa automatycznie szyfrowane od
 
1248
       wersji 7.3. W poprzednich wersjach, nalezy ta funkcjonalnosc
 
1249
       poprzez wl/aczenie opcji PASSWORD_ENCRYPTION w postgresql.conf.
 
1250
     * Serwer moze dzial/ac uzywajac szyfrowanego systemu plik�w.
 
1251
       
 
1252
                           Rozwijanie PostgreSQL
 
1253
                                      
 
1254
    5.1) Napisal/em wl/asna funkcje. Kiedy uzyje jej w psql, program zrzuca
 
1255
    pamiec (dump core)?
 
1256
    
 
1257
   Problem moze byc spowodowany przez bardzo wiele rzeczy. Spr�buj
 
1258
   najpierw przetestowac Twoja funkcje w samodzielnie dzial/ajacym
 
1259
   programie.
 
1260
   
 
1261
    5.2) Jak moge dodac/zgl/osic nowe typy czy funkcje do PostgreSQL?
 
1262
    
 
1263
   Wyslij Twoje propozycje na liste mailowa pgsql-hackers, wtedy
 
1264
   prawdopodobnie Tw�j kod znajdzie sie w katalogu contrib/.
 
1265
   
 
1266
    5.3) Jak napisac funkcje C zwracajaca krotke (tuple)?
 
1267
    
 
1268
   W wersjach PostgreSQL od numeru 7.3, funckje zwracajace tabele sa w
 
1269
   pelni wspierane w C, PL/PgSQL i SQL. Sprawdz w Programmer's Guide aby
 
1270
   uzyskac wiecej informacji. Przykl/ad funkcji napisanej w C zwracajacej
 
1271
   tabele zostal/ umieszczony w contrib/tablefunc.
 
1272
   
 
1273
    5.4) Zmienil/em plik zr�dl/owy. Dlaczego po rekompilacji nie widac zmiany?
 
1274
    
 
1275
   Pliki Makefiles nie maja dorzuconych odpowiednich zaleznosci dla
 
1276
   plik�w nagl/�wkowych (include files). Wykonaj najpierw make clean, a
 
1277
   nastepnie ponownie make. Jesli uzywasz GCC mozesz uzyc opcji
 
1278
   --enable-depend przy wykonywaniu configure aby kompilator m�gl/
 
1279
   okreslic zaleznosci samodzielnie.