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-2007, 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.