2
Frequently Asked Questions (FAQ) o PostgreSQL
4
Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004
6
Ostatnia aktualizacja tl/umaczenia: Piatek Marzec 5 19:31:12 EST 2004
8
Obecny maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
10
Tl/umaczenie: Marcin Mazurek (m.mazurek@netsync.pl)
12
Najbardziej aktualna wersje tego dokumentu mozna znalezc pod adresem:
13
http://www.PostgreSQL.org/docs/faqs/FAQ.html.
15
Odpowiedzi na pytania dotyczace konkretnych system�w operacyjnych
16
mozna znalezc pod adresem: http://www.PostgreSQL.org/docs/index.html.
17
_________________________________________________________________
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
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?
41
2.1) Czy sa jakies driwery ODBC dla PostgreSQL?
42
2.2) Jakie istnieja narzedzia pozwalajace na dostep do PostgreSQL
44
2.3) Czy istnieje jakies GUI dla PostgreSQL?
45
2.4) Za pomoca jakich jezyk�w programowania mozna sie komunikowac z
48
Pytania dotyczace administracji
50
3.1) Jak moge zainstalowac PostgreSQL w innej lokalizacji niz
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
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?
68
Pytania dotyczace uzytkowania
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
74
4.3) Jak moge uzyskac liste wszystkich tabel czy innych rzeczy pod
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
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
93
4.15.1) Jak moge utworzyc pole typu int, kt�re samo zwieksza swoja
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
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
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?
119
Rozwijanie PostgreSQL
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
127
_________________________________________________________________
131
1.1) Co to jest PostgreSQL? Jak to wymawiac?
133
PostgreSQL wymawia sie Post-Gres-kju-el. Czesto podczas rozm�w uzywany
134
jest termin "Postgres"
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.
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
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.
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.
162
1.2) Jaka licencja chroniony jest PostgreSQL?
164
PostgreSQL objety jest nastepujaca licencja:
166
PostgreSQL Data Base Management System
168
Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
169
Portions Copyright (c) 1994-6 Regents of the University of California
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
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.
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.
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.
194
1.3) Na jakich systemach Unixowych dzial/a PostreSQL?
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.
201
1.4) Na jakich nie-Unixowych systemach dzial/a PostgreSQL?
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.
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
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.
226
Istnieje takze port pod Novell Netware 6 dostepny pod adresem
227
http://forge.novell.com.
229
1.5) Skad mozna sciagnac PostgreSQL?
231
Gl/�wny serwer ftp z dostepem "anonymous" dla PostgreSQL znajduje sie
232
ftp://ftp.PostgreSQL.org/pub. jesli szukasz mirror�w sprawdz nasza
235
1.6) Gdzie mozna szukac wsparcia technicznego?
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):
244
na adres: pgsql-general-request@PostgreSQL.org.
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:
252
Digesty sa wysyl/ane do czl/onk�w listy, kiedy na gl/�wna liste dotrze
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:
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:
267
Dodatkowe informacje o listach mailowych dotyczacych PostgreSQL mozna
268
znalezc na stronach WWW PostgreSQL pod adresem:
270
http://www.PostgreSQL.org
272
W sieci EFNet istnieje kanal/ IRC #PostgreSQL. Ja, do pol/aczenia sie
273
z kanal/em uzywam Unixowego polecenia irc -c '#PostgreSQL' "$USER"
276
Lista firm oferujacych wsparcie na zasadach komercyjnych znajduje sie
277
pod adresem: http://techdocs.postgresql.org/companies.php.
279
1.7) Jaka jest ostatnia dostepna wersja?
281
Ostatnia dostepna wersja PostgreSQL to 7.4.1.
283
Planujemy publikowanie kolejnych wersji co szesc do osmiu miesiecy.
285
1.8) Jaka dokumentacja jest dostepna?
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.
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/.
300
psql posiada kilka wbudowanych polecen \d, za pomoca kt�rych mozna
301
sprawdzic informacje dotyczace typ�w, operator�w, funkcji, agregat�w
304
Na naszej stronie mozna znalezc duzo wiecej dokumentacji.
306
1.9) Gdzie mozna znalezc informacje o znanych bl/edach czy brakujacych
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.
313
1.10) Jak moge sie nauczyc SQL?
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.
322
Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition" pod
323
adresem: http://members.tripod.com/er4ebus/sql/index.htm
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.
329
1.11) Czy PostgreSQL ma rozwiazany problem Y2K?
331
Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz przed
334
1.12) Jak moge sie przyl/aczyc do grupy os�b bezposrednio pracujacych nad
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.
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
349
1.13) Jak moge zgl/aszac bl/edy?
351
Zajrzyj na strone PostgreSQL BugTool, na kt�rej opisane sa wskaz�wki
352
jak zgl/aszac informacje o bl/edach.
354
Zajrzyj takze na nasz ftp ftp://ftp.PostgreSQL.org/pub, aby sprawdzic
355
czy nie ma nowszych wersji PostgreSQL czy patchy.
357
1.14) Jak mozna por�wnac PostgreSQL w stosunku do innych DBMS?
359
Jest kilka sposob�w oceny softwaru: mozliwosci, wydajnosc, stabilnosc,
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
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
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.
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.
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
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.
421
1.15) W jaki spos�b moge wesprzec finansowo PostgreSQL?
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.
428
Wysokiej jakosci infrastruktura jest bardzo wazna dla kazdego projektu
429
open-source. Zapobiega przerwom w rozwoju projektu i jakimkolwiek
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
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
_________________________________________________________________
445
Jesli mozesz sie pochwalic udanymi wdrozeniami PostgreSQL, prosimy
446
abys zgl/osil/ nam to na stronie: http://advocacy.postgresql.org.
448
User Client Questions
450
2.1) Czy sa jakies driwery ODBC dla PostgreSQL?
452
Dostepne sa dwa driwery ODBC: PsqlODBC i OpenLink ODBC.
454
Mozesz pobrac PsqlODBC z adresu
455
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
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).
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.
467
2.2) Jakie istnieja narzedzia pozwalajace na dostep do PostgreSQL przez
470
Dobry podrecznik dla poczatkujacych o dostepie do bazy danych przez
471
www mozesz znalezc pod adresem: http://www.webreview.com
473
Do integracji z www, swietnym rozwiazaniem jest PHP. Mozesz znalezc
474
wiecej informacji na ten temat pod adresem http://www.php.net.
476
Wiele os�b w przypadku skomplikowanych rozwiazan uzywa Perl'a i
477
modul/u CGI.pl lub mod_perl.
479
2.3) Czy istnieje jakies GUI dla PostgreSQL?
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.
488
Wiecej informacji na ten temat znajduje sie pod adresem See
489
http://techdocs.postgresql.org/guides/GUITools.
491
2.4) Za pomoca jakich jezyk�w programowania mozna sie komunikowac z
494
Najbardziej popularne jezyki posiiadaja wl/asny interfejs dla
495
PostgreSQL. Sprawdz liste rozszerzen dla intersujacego Ciebie jezyka
498
Ze zr�dl/ami PostreSQL dystrubuowane sa interfejsy dla nastepujacych
499
jezyk�w programowania:
506
Inne interfejsy sa dostepne pod adresem: http://gborg.postgresql.org w
507
sekcji Drivers/Interfaces.
508
_________________________________________________________________
510
Pytania dotyczace administracji
512
3.1) Jak moge zainstalowac PostgreSQL w innej lokalizacji niz
515
Uzyj opcji --prefix podczas uruchamiania skryptu configure.
517
3.2) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: Bad
518
System Call lub "core dumped". Dlaczego?
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
525
3.3) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie:
526
IpcMemoryCreate. Dlaczego?
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.
537
3.4) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie:
538
IpcSemaphoreCreate. Dlaczego?
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.
549
Niedzial/ajace semafory moga spowodowac niepoprawne zamkniecie systemu
550
w czasie intensywnego korzystania z bazy.
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.
557
3.5) W jaki spos�b moge kontrolowac pol/aczenia z innych host�w?
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
566
3.6) Jak powinienem skonfigurowac system baz danych aby uzyskac lepsza
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.
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
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
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.
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
598
Mozesz takze uzyc polecenia CLUSTER aby pogrupowac dane w tabelach wg
599
indeksu. Zobacz opis polecenia CLUSTER w manualu zeby dowiedziec sie
602
3.7) Jakie sa mozliwosci wyszukiwania bl/ed�w?
604
PostgreSQL ma kilka mozliwosci na raportowanie informacji o jego
605
statusie, kt�re moga byc przydatne przy debugowaniu procesu.
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.
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:
615
./bin/postmaster >server.log 2>&1 &
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.
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.
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.
644
postgres moze byc uruchamiany z opcjami -s, -A i -t, kt�re moga byc
645
bardzo przydatne przy debuggowaniu i ocenie wydajnosci.
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.
653
3.8) Skad sie bierze komunikat: "Sorry, too many clients" podczas pr�by
654
pol/aczenia sie z baza danych?
656
Musisz zwiekszyc limit ilosci jednoczesnych proces�w bacekendu dla
657
procesu postmaster'a.
659
Domyslny limit to 32 procesy. Mozesz go zwiekszyc przez restart
660
postmaster z odpowiednia wartoscia ustawiana opcje -N w pliku
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
677
3.9) Jakie pliki znajduja sie w pg_temp?
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.
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
691
3.9) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze
692
skrypt�w dump i restore?
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
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
707
_________________________________________________________________
709
Pytania dotyczace uzywania
711
4.1) Jaka jest r�znica pomiedzy kursorami binarnymi (binary cursors) i
712
zwykl/ymi kursorami (normal cursors)?
714
Zobacz w manualu opis polecenia DECLARE.
716
4.2) Jak moge pobrac za pomoca SELECT jedynie kilka pierwszych wynik�w
719
Zobacz w manualu opis polecenia FETCH lub uzyj polecenia SELECT ...
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.
729
Aby otrzymac losowy rzad, uzyj:
736
4.3) Jak moge uzyskac liste wszystkich tabel czy innych rzeczy pod psql?
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.
744
4.4) Jak usunac kolumne z tabeli lub zmienic jej typ?
746
DROP COLUMNT zostal/o dodane w wersji 7.3 przy poleceniu ALTER TABLE
747
DROP COLUMN. We wczesniejszych wersjach mozesz zrobic tak:
749
LOCAL TABLE old_table;
750
SELECT ... -- wybierz wszystkie kolumny poza ta jedna kt�rej chcesz sie pozbyc
753
DROP TABLE old_table;
754
ALTER TABLE new_table RENAME TO old_table;
756
Aby zmienic typ danych kolumny mozesz zrobic tak:
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;
763
4.5) Jaki jest maksymalny rozmiar dla rzedu, tabeli i bazy danych?
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
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.
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.
784
Masymalny rozmiar tabeli i maksymalna liczba kolumn moze byc
785
zwiekszona jesli zwiekszymy domyslny rozmiar bloku (block size) do
788
4.6) Jak duzo miejsca w bazie danych jest konieczne aby przechowywac dane
789
ze zwyczajnego pliku tekstowego?
791
Baza danych PostgreSQL moze potrzebowac do pieciu razy wiecej miejsca
792
na przechowywanie danych z plik�w tekstowych niz ich objetosc.
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
805
Strona danych w PostgreSQL zajmuje 8192 bajt�w (8 KB), wiec:
807
8192 bajt�w na strone
808
--------------------- = 128 rzed�w na jedna strone w bazie (zaokraglone w d�l/)
812
----------------------- = 782 stron w bazie danych (zaokraglone w g�re)
815
782 stron w bazie * 8192 bajt�w na strone = 6,406,144 bajt�w (6.4 MB)
817
Indeksy nie powoduja duzego narzutu na zajmowane miejsce, ale
818
zawieraja pewne dane, wiec w pewnych przypadkach moga byc cal/kiem
821
NULLe sa przechowywane jako mapy bitowe, wiec uzywaja bardzo mal/o
824
4.7) Jak moge sprawdzic jakie tabele, klucze, bazy danych i uzytkownicy sa
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.
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
836
4.8) Moje zapytania sa wolne lub nie uzywaja kluczy. Dlaczego?
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.
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.
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
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
866
ORDER BY col [ DESC ]
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.
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.
881
* Case-insensitive searches such as ILIKE and ~* do not utilise
882
indexes. Instead, use functional indexes, which are described in
884
* Standardowe locale C musi byc uzyte przy wykonywaniu initdb
886
4.9) Jak moge sprawdzic w jakis spos�b "query optimizer" wykonuje moje
889
Zobacz manual dla polecenia EXPLAIN.
891
4.10) Co to jest "R-tree index"?
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
902
Zr�dl/owym dokumentem opisujacym oryginalnie projektowanie R-tree
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
909
Ten dokument mozesz znalezc takze w pracy Stonebraker'a "Readings in
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.
918
4.11) Co to jest "Genetic Query Optimizer"?
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.
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?
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.
933
Por�wnania case-insensitive sa zazwyczaj wykonywane w nastepujacy
937
WHERE lower(col) = 'abc'
939
W tym wypadku standardowe indeksy nie beda uzywane. Mozesz utworzyc
940
indeks funkcyjny, poprzez:
941
CREATE INDEX tabindex on tab (lower(col));
943
4.13) Jak sprawdzic w zapytaniu czy pole ma wartosc NULL?
945
Mozesz to sprawdzic, testujac wartosc kolumny warunkiem IS NULL albo
948
4.14) Jaka jest r�znica pomiedzy r�znymi typami tekstowymi (character
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)
959
Jesli bedziesz przegladac katalogi systemowe lub komunikaty o bl/edach
960
czesto spotkasz sie z podanymi powyzej nazwami wewnetrznymi.
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.
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
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.
981
4.15.1) Jak moge utworzyc pole kt�re samo zwieksza swoja wartosc?
983
PostgreSQL ma zaimplementowany typ SERIAL. Automatycznie tworzy
984
sekwencje i indeks na tej kolumnie. Dla przykladu:
985
CREATE TABLE person (
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'),
996
CREATE UNIQUE INDEX person_id_key ON person ( id );
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.
1004
4.15.2) Jak pobrac wartosc pola typu SERIAL po wykonaniu insert'u?
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');
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
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')";
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().
1031
4.15.3) Czy uzycie currval() i nextval() nie doprowadzi do race condition z
1032
innymi uzytkownikami?
1034
Nie. currval() zwraca biezaca wartosc przypisana przez Tw�j backend, a
1035
nie przez wszystkich uzytkownik�w.
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?
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.
1046
4.16) Co to jest OID? Co to jest TID?
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.
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.
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';
1071
COPY new WITH OIDS FROM '/tmp/pgtable';
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.
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.
1082
4.17) Jakie jest znaczenie niekt�rych termin�w w PostgreSQL?
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
1094
* range variable, table name, table alias
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.
1100
4.18) Skad bierze sie ten bl/ad "ERROR: Memory exhausted in
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
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.
1118
4.19) Jak sprawdzic jakiej wersji PostgreSQL uzywam?
1120
W psql, wpisz select version();
1122
4.20) Dlaczego operacje, kt�re wykonuje na duzych obiektach "large-object"
1123
zwracaja komunikat: "invalid large obj descriptor"?
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.
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
1135
Jesli uzywasz interfejsu klienta jak ODBC byc moze bedziesz musial/
1136
ustawic auto-commit off.
1138
4.21) Jak stworzyc kolumne kt�rej domyslna wartoscia bedzie biezacy czas?
1140
Uzyj CURRENT_TIMESTAMP:
1141
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
1143
4.22) Dlaczego zapytania uzywajace IN sa takie wolne?
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:
1152
WHERE col IN (SELECT subcol FROM subtab)
1157
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
1159
Aby to rozwiazanie byl/o szybkie, subcol powinna byc kolumna
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.
1166
4.23) Jak wykonac "outer join"?
1168
PostgreSQL ma zaimplementowane outer join wykorzystujac standardowa
1169
skl/adnie SQL. Ponizej dwa przykl/ady:
1171
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
1175
FROM t1 LEFT OUTER JOIN t2 USING (col);
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.
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
1189
WHERE tab1.col1 = tab2.col1
1191
SELECT tab1.col1, NULL
1193
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
1196
4.24) Jak wykonywac zapytanie uzywajace kilku baz danych jednoczesnie?
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.
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
1208
4.25) Jak zwr�cic w funkcji wiele rzed�w lub kolumn?
1210
Mozesz w l/atwy spos�b zwracac wiele rzed�w lub kolumn uzywajac
1212
http://techdocs.postgresql.org/guides/SetReturningFunctions.
1214
4.26) Dlaczego nie moge w spos�b pewny tworzyc/usuwac tabel tymczasowych w
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
1226
4.27) Jakie sa mozliwosci replikacji w PostgreSQL?
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.
1236
4.28) Jakie mozliwosci szyfrowania oferuje PostgreSQL?
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.
1252
Rozwijanie PostgreSQL
1254
5.1) Napisal/em wl/asna funkcje. Kiedy uzyje jej w psql, program zrzuca
1257
Problem moze byc spowodowany przez bardzo wiele rzeczy. Spr�buj
1258
najpierw przetestowac Twoja funkcje w samodzielnie dzial/ajacym
1261
5.2) Jak moge dodac/zgl/osic nowe typy czy funkcje do PostgreSQL?
1263
Wyslij Twoje propozycje na liste mailowa pgsql-hackers, wtedy
1264
prawdopodobnie Tw�j kod znajdzie sie w katalogu contrib/.
1266
5.3) Jak napisac funkcje C zwracajaca krotke (tuple)?
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.
1273
5.4) Zmienil/em plik zr�dl/owy. Dlaczego po rekompilacji nie widac zmiany?
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.