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