Skip to content
Snippets Groups Projects
Select Git revision
  • benchmark-tools
  • postgres-lambda
  • master default
  • REL9_4_25
  • REL9_5_20
  • REL9_6_16
  • REL_10_11
  • REL_11_6
  • REL_12_1
  • REL_12_0
  • REL_12_RC1
  • REL_12_BETA4
  • REL9_4_24
  • REL9_5_19
  • REL9_6_15
  • REL_10_10
  • REL_11_5
  • REL_12_BETA3
  • REL9_4_23
  • REL9_5_18
  • REL9_6_14
  • REL_10_9
  • REL_11_4
23 results

FAQ_polish

Blame
  • FAQ_polish 57.34 KiB
    
                     Frequently Asked Questions (FAQ) o PostgreSQL
                                           
       Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004
       
       Ostatnia aktualizacja tl/umaczenia: Piatek Marzec 5 19:31:12 EST 2004
       
       Obecny maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
       
       Tl/umaczenie: Marcin Mazurek (m.mazurek@netsync.pl)
       
       Najbardziej aktualna wersje tego dokumentu mozna znalezc pod adresem:
       http://www.PostgreSQL.org/docs/faqs/FAQ.html.
       
       Odpowiedzi na pytania dotyczace konkretnych systemw operacyjnych
       mozna znalezc pod adresem: http://www.PostgreSQL.org/docs/index.html.
         _________________________________________________________________
       
                                   Pytania oglne
                                          
       1.1) Co to jest PostgreSQL? Jak to wymawiac?
       1.2) Jaka licencja chroniony jest PostgreSQL?
       1.3) Na jakich systemach Unixowych dzial/a PostreSQL?
       1.4) Na jakich nie-Unixowych systemach dzial/a PostgreSQL?
       1.5) Skad moge sciagnac PostgreSQL?
       1.6) Gdzie mozna szukac wsparcia technicznego?
       1.7) Jaka jest ostatnia dostepna wersja?
       1.8) Jaka dokumentacja jest dostepna?
       1.9) Gdzie moge znalezc informacje o znanych bl/edach czy brakujacych
       rozwiazanich?
       1.10) Jak moge sie nauczyc SQL?
       1.11) Czy PostgreSQL ma rozwiazany problem Y2K?
       1.12) Jak moge sie przyl/aczyc do grupy osb bezposrednio pracujacych
       nad rozwojem PostgreSQL?
       1.13) Jak moge zgl/aszac bl/edy?
       1.14) Jak mozna porwnac PostgreSQL w stosunku do innych DBMS?
       1.15) W jaki sposb moge wesprzec finansowo PostgreSQL?
       
                                Pytania uzytkownikw
                                          
       2.1) Czy sa jakies driwery ODBC dla PostgreSQL?
       2.2) Jakie istnieja narzedzia pozwalajace na dostep do PostgreSQL
       przez www?
       2.3) Czy istnieje jakies GUI dla PostgreSQL?
       2.4) Za pomoca jakich jezykw programowania mozna sie komunikowac z
       PostgreSQL?
       
                          Pytania dotyczace administracji
                                          
       3.1) Jak moge zainstalowac PostgreSQL w innej lokalizacji niz
       /usr/local/pgsql?
       3.2) Podczas startu postmaster'a, otrzymuje komunikat: Bad System Call
       lub "core dumped". Dlaczego?
       3.3) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie:
       IpcMemoryCreate. Dlaczego?
       3.4) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie:
       IpcSemaphoreCreate. Dlaczego?
       3.5) W jaki sposb moge kontrolowac pol/aczenia z innych hostw?
       3.6) Jak powinienem skonfigurowac system baz danych aby uzyskac lepsza
       wydajnosc?
       3.7) Jakie sa mozliwosci wyszukiwania bl/edw?
       3.8) Skad sie bierze komunikat: "Sorry, too many clients" podczas
       prby pol/aczenia sie z baza danych?
       3.9) Jakie pliki znajduja sie w pg_temp?
       3.10) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze
       skryptw dump i restore?
       
                           Pytania dotyczace uzytkowania
                                          
       4.1) Jaka jest rznica pomiedzy kursorami binarnymi (binary cursors) i
       zwykl/ymi kursorami (normal cursors)?
       4.2) Jak moge pobrac za pomoca SELECT jedynie kilka pierwszych wynikw
       zapytania?
       4.3) Jak moge uzyskac liste wszystkich tabel czy innych rzeczy pod
       psql?
       4.4) Jak usunac kolumne z tabeli lub zmienic jej typ?
       4.5) Jaki jest maksymalny rozmiar dla rzedu, tabeli i bazy danych?
       4.6) Jak duzo miejsca w bazie danych jest potrzebne aby przechowac
       dane ze zwyczajnego pliku tekstowego?
       4.7) Jak moge sprawdzic jakie tabele, klucze, bazy danych i
       uzytkownicy sa utworzeni?
       4.8) Moje zapytania sa wolne lub nie uzywaja kluczy. Dlaczego?
       4.9) Jak moge sprawdzic w jakis sposb "query optimizer" wykonuje moje
       zapytanie?
       4.10) Co to jest "R-tree index"?
       4.11) Co to jest "Genetic Query Optimizer"?
       4.12) Jak moge uzywac wyrazen regularnych w zapytaniach i zapytan
       case-insensitive w wyrazeniach regularnych? Jak korzystac z indeksw
       dla zapytan case-insensitive?
       4.13) Jak sprawdzic w zapytaniu czy pole ma wartosc NULL?
       4.14) Jaka jest rznica pomiedzy rznymi typami tekstowymi (character
       types)?
       4.15.1) Jak moge utworzyc pole typu int, ktre samo zwieksza swoja
       wartosc?
       4.15.2) Jak pobrac wartosc pola typu SERIAL po wykonaniu insert'u?
       4.15.3) Czy uzycie currval() i nextval() nie doprowadzi do "race
       condition" z innymi uzytkownikami?
       4.15.4) Dlaczego numery sekwencji nie sa ponownie uzywane przy
       przerwaniu transakcji? Skad sie biora luki w numerowaniu kolumny
       tabeli sekwencjami/SERIALem?
       4.16) Co to jest OID? Co to jest TID?
       4.17) Jakie jest znaczenie niektrych terminw w PostgreSQL?
       4.18) Skad bierze sie ten bl/ad: "ERROR: Memory exhausted in
       AllocSetAlloc()"?
       4.19) Jak sprawdzic jakiej wersji PostgreSQL uzywam?
       4.20) Dlaczego operacje, ktre wykonuje na duzych obiektach
       "large-object" zwracaja komunikat: "invalid large obj descriptor"?
       4.21) Jak stworzyc kolumne ktrej domyslna wartoscia bedzie biezacy
       czas?
       4.22) Dlaczego zapytania uzywajace IN sa takie wolne?
       4.23) Jak wykonac "outer join"?
       4.24) Jak wykonywac zapytanie uzywajace kilku baz danych jednoczesnie?
       4.25) Jak zwrcic w funkcji wiele rzedw lub kolumn?
       4.26) Dlaczego nie moge w sposb pewny tworzyc/usuwac tabel
       tymczasowych w funkcjach PL/PgSQL?
       4.27) Jakie sa mozliwosci replikacji w PostgreSQL?
       4.28) Jakie mozliwosci szyfrowania oferuje PostgreSQL?
       
                               Rozwijanie PostgreSQL
                                          
       5.1) Napisal/em wl/asna funkcje. Kiedy uzyje jej w psql, program
       zrzuca pamiec (dump core)?
       5.2) Jak moge dodac/zgl/osic nowe typy czy funkcje do PostgreSQL?
       5.3) Jak napisac funkcje C zwracajaca krotke (tuple)?
       5.4) Zmienil/em plik zrdl/owy. Dlaczego po rekompilacji nie widac
       zmiany?
         _________________________________________________________________
       
                                   Pytania oglne
                                          
        1.1) Co to jest PostgreSQL? Jak to wymawiac?
        
       PostgreSQL wymawia sie Post-Gres-kju-el. Czesto podczas rozmw uzywany
       jest termin "Postgres"
       
       PostgreSQL jest rozszerzeniem systemu zarzadzania bazami danych -
       POSTGRES, kolejna generacja rozwojowego prototypu DBMS. Mimo, ze
       PostgreSQL zachowal/ bardzo dobrze zbudowany model danych (data model)
       i bogaty zestaw typw danych POSTGRES'a, zastapil/ PostQuel'owy jezyk
       zapytan z rozbudowanym podzbiorem jezyka SQL. PostgreSQL jest
       oprogramowaniem darmowym z dostepnymi cal/ymi zrdl/ami.
       
       Rozwj PostgreSQL jest prowadzony przez grupe ludzi z Internetu,
       komunikujacych sie poprzez mailowe listy dyskusyjne PostgreSQL.
       Obecnym koordynatorem jest Marc G. Fournier (scrappy@PostgreSQL.org).
       (Zobacz pytanie 1.6 jak sie przyl/aczyc). Ta grupa ludzi jest
       odpowiedzialna za cal/y rozwj PostgreSQL. PostgreSQL jest projektem
       nie kontrolowanym przez zadna firme, aby wziac udzial/ w jego rozwoju
       sprawdz, http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html
       
       Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Wiele innych
       osb pomogl/o przy portowaniu, testowaniu, debugowaniu i rozwijaniu
       kodu. Oryginalny kod Postgresa, na ktrym zostal/ oparty PostgreSQL,
       byl/ wysil/kiem studentw oraz pracownikw pracujacych pod
       kierownictwem profesora Michael'a Stonebraker'a z University of
       California w Berkeley.
       
       Oryginalna nazwa oprogramowania w Berkeley byl/ Postgres. Po dodaniu
       obsl/ugi SQL w 1995, nazwa zostal/a zmieniona na Postgres95. Pod
       koniec roku 1996 nazwa zostal/a zmieniona na PostgreSQL.
       
        1.2) Jaka licencja chroniony jest PostgreSQL?
        
       PostgreSQL objety jest nastepujaca licencja:
       
       PostgreSQL Data Base Management System
       
       Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
       Portions Copyright (c) 1994-6 Regents of the University of California
       
       Permission to use, copy, modify, and distribute this software and its
       documentation for any purpose, without fee, and without a written
       agreement is hereby granted, provided that the above copyright notice
       and this paragraph and the following two paragraphs appear in all
       copies.
       
       IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
       FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
       INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
       ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
       ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
       
       THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
       INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
       MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
       PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
       CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
       UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
       
       Tekst powyzej, jest klasyczna licencja BSD. Nie posiada ona zadnych
       restrykcji co do uzywania kodu zrdl/owego. Podoba nam sie i nie
       zamierzamy jej zmieniac.
       
        1.3) Na jakich systemach Unixowych dzial/a PostreSQL?
        
       PostgreSQL powinien dzial/ac na wszystkich nowych Unix-podobnych
       systemach. Platformy, ktre zostal/y szczegl/owo przetestowane
       podczas publikowania PostgreSQL sa wymienione w dokumentacji
       opisujacej instalacje.
       
        1.4) Na jakich nie-Unixowych systemach dzial/a PostgreSQL?
        
       Klient
       
       Mozliwa jest kompilacja bibliteki C libpq, psql oraz innych
       interfejsw i uruchamianie ich na platformie MS Windows. W tym wypadku
       klient jest uruchamiany na MS Windows a z serwerem komunikuje sie
       poprzez TCP/IP. Serwer moze dzial/ac na dowolnej wspieranej platformie
       Unixowej. Plik win32.mak jest dol/aczony do zrdel/, aby mozna byl/o
       stworzyc biblioteke libpq oraz program psql dzial/ajace w srodowisku
       Win32. PostgreSQL moze sie takze komunikowac z klientami ODBC.
       
       Serwer
       
       Serwer moze byc uruchamiany na Windows NT i Win2k uzywajac bibliotek
       Cygwin, Cygnus Unix/NT. W pliku pgsql/doc/FAQ_MSWIN znajdujacym sie w
       zrdl/ach lub pod adresem:
       http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN na naszych
       stronach.
       
       Obecnie prowadzone sa prace nad stworzeniem wersji dla MS Win
       NT/200/XP. Jesli chcesz sie dowiedziec o obecnym statusie tych prac
       zobacz http://techdocs.postgresql.org/guides/Windows and
       http://momjian.postgresql.org/main/writings/pgsql/win32.html.
       
       Istnieje takze port pod Novell Netware 6 dostepny pod adresem
       http://forge.novell.com.
       
        1.5) Skad mozna sciagnac PostgreSQL?
        
       Gl/wny serwer ftp z dostepem "anonymous" dla PostgreSQL znajduje sie
       ftp://ftp.PostgreSQL.org/pub. jesli szukasz mirrorw sprawdz nasza
       gl/wna strone www.
       
        1.6) Gdzie mozna szukac wsparcia technicznego?
        
       Adres gl/wnej listy mailowej: pgsql-general@PostgreSQL.org. Jest ona
       przeznaczona dyskusjom dotyczacym spraw zwiazanych z PostgreSQL. Zeby
       zapisac sie na liste, wyslij email z nastepujacymi liniami w tresci
       maila (nie w temacie):
        subscribe
        end
    
       na adres: pgsql-general-request@PostgreSQL.org.
       
       Dostepna jest takze lista wysyl/ajaca digesty. Aby zapisac sie na nia,
       wyslij email na adres: pgsql-general-digest-request@PostgreSQL.org z
       trescia maila zawierajaca:
        subscribe
        end
    
       Digesty sa wysyl/ane do czl/onkw listy, kiedy na gl/wna liste dotrze
       ok 30k wiadomosci.
       
       Dostepna jest takze lista poswiecona bl/edom znalezionym w PostgreSQL.
       Aby zapisac sie na nia wyslij email na adres:
       pgsql-bugs-request@PostgreSQL.org z trescia maila zawierajaca:
        subscribe
        end
    
       Lista poswiecona dyskusjom developerw jest dostepna pod adresem:
       pgsql-hackers-request@PostgreSQL.org Aby sie na nia zapisac wyslij na
       jej adres mail z trescia:
        subscribe
        end
    
       Dodatkowe informacje o listach mailowych dotyczacych PostgreSQL mozna
       znalezc na stronach WWW PostgreSQL pod adresem:
       
         http://www.PostgreSQL.org
         
       W sieci EFNet istnieje kanal/ IRC #PostgreSQL. Ja, do pol/aczenia sie
       z kanal/em uzywam Unixowego polecenia irc -c '#PostgreSQL' "$USER"
       irc.phoenix.net.
       
       Lista firm oferujacych wsparcie na zasadach komercyjnych znajduje sie
       pod adresem: http://techdocs.postgresql.org/companies.php.
       
        1.7) Jaka jest ostatnia dostepna wersja?
        
       Ostatnia dostepna wersja PostgreSQL to 7.4.1.
       
       Planujemy publikowanie kolejnych wersji co szesc do osmiu miesiecy.
       
        1.8) Jaka dokumentacja jest dostepna?
        
       Kilka manuali, stron podecznika man, oraz kilka przykl/adw do
       testowania sa zal/aczone w samej dystrybucji. Znajduja sie one w
       katalogu /doc. Manual moze byc takze przegladany poprzez strony www
       pod adresem http://www.PostgreSQL.org/docs.
       
       Istnieja takze dwie ksiazki dostepne online pod adresami
       http://www.PostgreSQL.org/docs/awbook.html i
       http://www.commandprompt.com/ppbook/. Lista ksiazek o PostgreSQL,
       ktre mozna kupic znajduje sie pod adresem
       http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Zbir
       technicznych artykul/w o PostgreSQL znajduje sie pod adresem
       http://techdocs.postgresql.org/.
       
       psql posiada kilka wbudowanych polecen \d, za pomoca ktrych mozna
       sprawdzic informacje dotyczace typw, operatorw, funkcji, agregatw
       itd.
       
       Na naszej stronie mozna znalezc duzo wiecej dokumentacji.
       
        1.9) Gdzie mozna znalezc informacje o znanych bl/edach czy brakujacych
        rozwiazanich?
        
       PostgreSQL wspiera rozszerzony podzbir standardu SQL-92. Sprawdz
       nasza liste TODO aby znalezc informacje o znanych problemach,
       brakujacych rozwiazaniach czy przyszl/ych planach.
       
        1.10) Jak moge sie nauczyc SQL?
        
       Ksiazka o PostgreSQL http://www.PostgreSQL.org/docs/awbook.html uczy
       SQL. Jest jeszcze inna ksiazka o PostgreSQL dostepna pod adresem:
       http://www.commandprompt.com/ppbook. Dobry tutorial mozesz znalezc pod
       adresem: http://www.intermedia.net/support/sql/sqltut.shtm, oraz
       http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,
       i http://sqlcourse.com.
       
       Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition" pod
       adresem: http://members.tripod.com/er4ebus/sql/index.htm
       
       Wielu z naszych uzytkownikw poleca The Practical SQL Handbook,
       Bowman, Judith S., et al., Addison-Wesley. Inni polecaja The Complete
       Reference SQL, Groff et al., McGraw-Hill.
       
        1.11) Czy PostgreSQL ma rozwiazany problem Y2K?
        
       Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz przed
       rokiem 2000 BC.
       
        1.12) Jak moge sie przyl/aczyc do grupy osb bezposrednio pracujacych nad
        rozwojem PostgreSQL?
        
       Przede wszystkim sciagnij ostatnie dostepne zrdl/a i przeczytaj
       dokumentacje przeznaczona dla developerw na naszej stronie www lub
       dostepna takze w zrdl/ach PostgreSQL. Nastepnie zapisz sie na listy
       mailowe pgsql-hackers i pgsql-patches. I na koniec, wysyl/aj nam
       wysokiej jakosci patch'e na liste pgsql-patches.
       
       Jest okol/o 12 osb, ktre maja uprawnienia do commit'owania w CVS
       PostgreSQL'a. Kazdy z nich submitowal/ tak wiele wysokiej jakosci
       patchy, ze stal/o sie niemozliwe dla obecnych commiterw byc z nimi na
       biezaco, wiec musielismy im ufac i miec pewnosc, ze ich poprawki sa
       wysokiej jakosci.
       
        1.13) Jak moge zgl/aszac bl/edy?
        
       Zajrzyj na strone PostgreSQL BugTool, na ktrej opisane sa wskazwki
       jak zgl/aszac informacje o bl/edach.
       
       Zajrzyj takze na nasz ftp ftp://ftp.PostgreSQL.org/pub, aby sprawdzic
       czy nie ma nowszych wersji PostgreSQL czy patchy.
       
        1.14) Jak mozna porwnac PostgreSQL w stosunku do innych DBMS?
        
       Jest kilka sposobw oceny softwaru: mozliwosci, wydajnosc, stabilnosc,
       wsparcie i cena.
       
       Mozliwosci
              PostgreSQL posiada mozliwosci dostepne w duzych, komercyjnych
              systemach DBMS, takie jak transakcje, podzapytania
              (subselects), triggery, widoki, klucze obce, referential
              integrity, oraz wyrafinowany system blokowania. Mamy takze
              wl/asciowsci ktrych inni nie posiadaja, jak typy definiowane
              przez uzytkownika, dziedziczenie, rules, multi-version
              concurrency control, ktra redukuje problemy z blokowaniem
              (lock contention).
              
       Wydajnosc
              Wydajnosc PostgreSQL jest podobna do innych komercyjnych i open
              source baz danych. W niektrych sytuacjach jest szybszy w
              niektrych wolniejszy. W porwnianiu do MySQL lub mniejszych
              baz danych jestesmy szybsi przy wielu uzytkownikach,
              skomplikowaych zapytaniach i duzym obciazeniu podczas. MySQL
              jest szybszy dla prostych SELECTw wykonywanych przez niewielu
              uzytkownikw. Spowodowane jest to narzutem, ktry sie pojawia
              przy transakcjach. Oczywiscie MySQL nie ma wiekszosci z
              rozwiazan opisanych powyzej w sekcji Mozliwosci . PostgreSQL
              zostal/ stworzony z mysla o stabilnosci, oraz szerokiej gamie
              mozliwosci, ale mimo to staramy sie w kazdej wersji poprawiac
              jego wydajnosc. Ciekawe porwnanie PostgreSQL i MySQL mozna
              znalezc pod adresem
              http://openacs.org/philosophy/why-not-mysql.html Dodatkowo,
              MySQL jest firma, ktra dystrybuuje jej produkty poprzez zasade
              Open Source i wymaga wykupienia licencji w przypadku tworzenia
              close-source software, co ie ma miejsca w przypadku PostgreSQL.
              
       Stabilnosc
              Zdajemy sobie sprawe, ze DBMS musi byc stabilny, w przeciwnym
              wypadku jest bez wartosci. Staramy sie publikowac kod stabilny,
              dobrze przetestowany, z minimum mozliwych bl/edw. Kazde
              wydanie poprzedza co najmniej miesiac testw wersji beta.
              Patrzac na historie wydan PostgreSQL widac, ze dostarczamy
              stabilne, dobrze sprawdzone wersje, ktre sa gotowe do uzycia w
              srodowisku produkcyjnym. Myslimy, ze proces publikowania
              kolejnych wersji opracowany przez nas jest jednym z lepszych
              wsrd innych twrcw oprogramowania bazodanowego.
              
       Wsparcie
              Dzieki naszym listom mailowym masz dostep do duzej liczby
              programistw i uzytkownikw, ktrzy pomagaja rozwiazac kazdy
              napotkany problem. Chociaz nie mozemy gwarantowac znalezienia
              rozwiazania danego problemu, nie rznimy sie w tym od innych
              komercyjnych systemw DBMS. Bezposredni kontakt z
              programistami, uzytkownikami, dokumentacja i kodem zrdl/owym
              sprawiaja, ze wsparcie oferowane PostgreSQL niejednokrotnie
              jest lepsze niz w innych systemach DBMS. Istnieje takze
              mozliwosc skorzystania z komercyjnego wsparcia dla tych,
              ktrych takiego rozwiazania potrzebuja. (Sprawdz ten punkt
              FAQ.)
              
       Cena
              Korzystanie z PostgreSQL jest darmowe, zarwno w przypadku
              komercyjnym jak i niekomercyjnym. Mozesz korzystac z naszego
              kodu zrdl/owego w Twoim produkcie bez zadnych ograniczen, poza
              tymi wymienionymi w licencji BSD przytoczonej powyzej.
              
        1.15) W jaki sposb moge wesprzec finansowo PostgreSQL?
        
       PostgreSQL korzysta z najlepszej infrastruktury od samego poczatku
       istnienia projektu, czyli roku 1996 kiedy rozpoczelismy prace.
       Wszystko to zawdzieczamy Marc'owi Fournier'owi, ktry stworzyl/ ta
       infrastrukture i zarzadza nia od lat.
       
       Wysokiej jakosci infrastruktura jest bardzo wazna dla kazdego projektu
       open-source. Zapobiega przerwom w rozwoju projektu i jakimkolwiek
       przestojom.
       
       Oczywiscie korzystanie z wysokiej jakosci infrastruktury nie jest
       tanie. Istnieje wiele rznych miesiecznych, czy jednorazowych
       wydatkw, ktre trzeba ponosic aby wszystko dzial/al/o jak nalezy.
       Jesli Ty, badz Twoja firma moze wspomc finansowo rozwj PostgreSQL
       odwiedz adres: http://store.pgsql.com/shopping/ gdzie opisane jest jak
       to zrobic.
       
       Chociaz na stronie wspomniana jest nazwa PostgreSQL Inc, "datki" sa
       przeznaczone jedynie na rozwj projektu PostgreSQL i nie sa
       przeznaczane na finansowanie jakiejkolwiek firmy. Jesli wolisz, mozesz
       wysl/ac czek na adres kontaktowy.
         _________________________________________________________________
       
       Jesli mozesz sie pochwalic udanymi wdrozeniami PostgreSQL, prosimy
       abys zgl/osil/ nam to na stronie: http://advocacy.postgresql.org.
       
                               User Client Questions
                                          
        2.1) Czy sa jakies driwery ODBC dla PostgreSQL?
        
       Dostepne sa dwa driwery ODBC: PsqlODBC i OpenLink ODBC.
       
       Mozesz pobrac PsqlODBC z adresu
       http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
       
       OpenLink ODBC moze byc pobrany z adresu: http://www.openlinksw.com.
       Wspl/pracuje ze standardowym oprogramowaniem klienckim ODBC wiec w
       ten sposb mozesz korzystac z PostgreSQL ODBC dostepnego na kazdej
       pltaformie ktra wspiera (Win, Mac, Unix, VMS).
       
       Autorzy beda prawdopodobnie sprzedawac ten produkt osobom ktre
       wymagaja komercyjnego wsparcia, ale wersja darmowa bedzie zawsze
       dostepna. Wszystkie pytania mozesz wysyl/ac na adres:
       postgres95@openlink.co.uk.
       
        2.2) Jakie istnieja narzedzia pozwalajace na dostep do PostgreSQL przez
        www?
        
       Dobry podrecznik dla poczatkujacych o dostepie do bazy danych przez
       www mozesz znalezc pod adresem: http://www.webreview.com
       
       Do integracji z www, swietnym rozwiazaniem jest PHP. Mozesz znalezc
       wiecej informacji na ten temat pod adresem http://www.php.net.
       
       Wiele osb w przypadku skomplikowanych rozwiazan uzywa Perl'a i
       modul/u CGI.pl lub mod_perl.
       
        2.3) Czy istnieje jakies GUI dla PostgreSQL?
        
       Tak, istnieje kilka interfejsw graficznych dla PostgreSQL. Wsrd nich
       PgAccess ( http://www.pgaccess.org), PgAdmin III
       (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/
       ) oraz Rekall ( http://www.thekompany.com/products/rekall/,
       komercyjny). Istnieje takze PHPPgAdmin (
       http://phppgadmin.sourceforge.net/ ), webowy interfejs dla PostgreSQL.
       
       Wiecej informacji na ten temat znajduje sie pod adresem See
       http://techdocs.postgresql.org/guides/GUITools.
       
        2.4) Za pomoca jakich jezykw programowania mozna sie komunikowac z
        PostgreSQL?
        
       Najbardziej popularne jezyki posiiadaja wl/asny interfejs dla
       PostgreSQL. Sprawdz liste rozszerzen dla intersujacego Ciebie jezyka
       programowania.
       
       Ze zrdl/ami PostreSQL dystrubuowane sa interfejsy dla nastepujacych
       jezykw programowania:
         * C (libpq)
         * Embedded C (ecpg)
         * Java (jdbc)
         * Python (PyGreSQL)
         * TCL (libpgtcl)
           
       Inne interfejsy sa dostepne pod adresem: http://gborg.postgresql.org w
       sekcji Drivers/Interfaces.
         _________________________________________________________________
       
                          Pytania dotyczace administracji
                                          
        3.1) Jak moge zainstalowac PostgreSQL w innej lokalizacji niz
        /usr/local/pgsql?
        
       Uzyj opcji --prefix podczas uruchamiania skryptu configure.
       
        3.2) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie: Bad
        System Call lub "core dumped". Dlaczego?
        
       Ten bl/ad moze byc wynikiem wielu problemw, ale na poczatek sprawdz
       czy masz zainstalowane rozszerzenia systemu V w jadrze systemu.
       PostgreSQL wymaga do pracy zainstalowanej obsl/ugi pamieci dzielonej i
       semaforw.
       
        3.3) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie:
        IpcMemoryCreate. Dlaczego?
        
       Albo nie masz poprawnie skonfigurowanej obsl/ugi pamieci dzielonej w
       jadrze systemu, albo musisz zwiekszyc jej dostepny rozmiar. Dokl/adna
       ilosc jaka potrzebujesz jest zalezna od architektury systemu na jakim
       pracujesz, jak duzo buforw oraz jak duzo procesw backendu
       skonfigurowal/es dla postmaster'a. Dla wiekszosci systemw, z domyslna
       liczba buforw i procesw potrzebujesz minimum w przyblizeniu 1MB.
       Zobacz PostgreSQL Administrator's Guide gdzie szczegl/owo zostal/o
       opisane wykorzystanie pamieci dzielonej i semaforw.
       
        3.4) Podczas startu postmaster'a, otrzymuje komunikat o bl/edzie:
        IpcSemaphoreCreate. Dlaczego?
        
       Jesli tresc bl/edu brzmi: IpcSemaphoreCreate: semget failed (No space
       left on device) oznacza to, ze jadro systemu nie jest skonfigurowane
       do obsl/ugi wystarczajacej liczby semaforw. Postgres wymaga jednego
       semafor'a na potencjalny jeden proces backend. Tymczasowym
       rozwiazaniem jest uruchomienie programu postmaster z mniejsza
       maksymalna liczba procesw backend. Uzyj opcji -N z parameterem
       mniejszym od domyslnego - 32. Bardziej trwal/ym rozwiazaniem jest
       zwiekszenie parametrw SEMMNS i SEMMNI jadra twojego systemu.
       
       Niedzial/ajace semafory moga spowodowac niepoprawne zamkniecie systemu
       w czasie intensywnego korzystania z bazy.
       
       Jesli tresc bl/edu jest inna, moze to oznaczac, ze obsl/uga semaforw
       nie zostal/a wl/aczona do jadra wcale. Zobacz PostgreSQL
       Administrator's Guide po bardziej szczegl/owe informacje o pamieci
       dzielonej i semaforach.
       
        3.5) W jaki sposb moge kontrolowac pol/aczenia z innych hostw?
        
       Domyslnie PostgreSQL pozwala jedynie na pol/aczenia za pomoca socketw
       Unixowych z lokalnego hosta. Inne hosty nie beda mogl/y sie pol/aczyc
       z serwerem dopki nie zostanie dodana opcja -i do postmaster'a, oraz
       nie umozliwi sie autoryzacji na podstawie adresu hostw modyfikujac
       odpowiednio plik $PGDATA/pg_hba.conf. To zmiany pozwola na pol/aczenia
       TCP/IP.
       
        3.6) Jak powinienem skonfigurowac system baz danych aby uzyskac lepsza
        wydajnosc?
        
       Indeksy bez watpienia moga przyspieszyc wykonywanie zapytan. Polecenie
       EXPLAIN pozwala zobaczyc jak PostgreSQL interpretuje Twoje zapytanie i
       ktre indeksy sa uzywane.
       
       Jesli wykonujesz bardzo duzo INSERTw, moze warto je wykonac za pomoca
       jednego duzego pliku uzywajac polecenia COPY. Jest to duzo szybsze niz
       pojedyncze INSERTy. Po drugie polecenia SQL nie zawarte w bloku
       okreslajacym transakcje - BEGIN WORK/COMMIT, sa traktowane jako
       pojedyncza transakcja. Rozwaz wykonanie kilku polecen/zdan SQL w
       jednym bloku transakcji. To redukuje narzut nakl/adany przez
       transakcje. Przy duzych zmianach w danych, warto usunac i stworzyc na
       nowo indeksy.
       
       Jest kilka opcji pozwalajacych na poprawienie wydajnosci. Mozesz
       wyl/aczyc fsync() poprzez uruchomienie postmaster'a z opcjami -o -F.
       To spowoduje, ze fsync() nie bedzie zrzucal/ danych na dysk po kazdej
       transakcji.
       
       Mozesz takze uruchomic postmaster'a z opcja -B aby zwiekszyc wielkosc
       pamieci dzielonej uzywanej przez procesy backendw. Jesli ustawisz ta
       wartosc zbyt wysoko i przekroczysz limity ustawione przez kernel na
       pamiec dzielona, postmaster moze sie nie uruchomic. Kazdy bufor
       zajmuje 8K a domyslna ilosc buforw to 64.
       
       Mozesz takze uzyc opcji -S dla backendu aby zwiekszyc maksymalna
       wartosc pamieci uzywana przez proces backendu podczas sortowania.
       Opcja -S jest ustawiana wartoscia podawana w kilobajtach, domyslna
       wartosc to 512K.
       
       Mozesz takze uzyc polecenia CLUSTER aby pogrupowac dane w tabelach wg
       indeksu. Zobacz opis polecenia CLUSTER w manualu zeby dowiedziec sie
       wiecej.
       
        3.7) Jakie sa mozliwosci wyszukiwania bl/edw?
        
       PostgreSQL ma kilka mozliwosci na raportowanie informacji o jego
       statusie, ktre moga byc przydatne przy debugowaniu procesu.
       
       Przede wszystkim uruchom skrypt configure z opcja --enable-cassert,
       wiele funkcji assert() monitoruja postep procesu backend i zatrzymuja
       program kiedy wydarzy sie cos nieoczekiwanego.
       
       Zarwno postmaster jak i postgres maja kilka opcji do debugowania. Za
       kazdym razem kiedy uruchamiasz postmaster'a, upewnij sie, ze wysyl/asz
       standardowe wyjscie i error do pliku z logami, np. w ten sposb:
        cd /usr/local/pgsql
        ./bin/postmaster >server.log 2>&1 &
    
       To utworzy plik server.log w gl/wnym katalogu PostgreSQL. Ten plik
       zawiera pozyteczne informacje o problemach i bl/edach, ktre
       wydarzyl/y sie podczas pracy serwera. Postmaster posiada opcje -d,
       ktra pozwala na raportowanie bardzo szczeglowych informacji. Do
       opcji -d podajemy liczbe, ktra okresla szczegl/owosc wysyl/anych
       informacji. Musisz miec swiadomosc, ze wysoki poziom logowania bedzie
       powodowal/ tworzenie bardzo duzych plikw z logami.
       
       Jesli postmaster nie zostal/ uruchomiony, mozesz uruchomic
       postgres'owy backend z linii polecen, i uruchomic Twoje polecenie SQL
       bezposrednio na nim. Taki sposb jest polecany jedynie w przypadku
       debugowania. Zwrc uwage, ze w tym wypadku zapytanie konczy znak nowej
       linii a nie srednik. Jesli skompilowal/es z opcjami debugowania mozesz
       uzyc debuggera aby sprawdzic co sie dzieje. Poniewz backend nie
       zostal/ uruchomiony przez postmaster'a, nie dzial/a w identycznym
       srodowisku, co oznacza ze powtrzenie warunkw w jakich wystapil/y
       problemy moze byc problemem.
       
       Jesli postmaster dzial/a, uruchom psql w jednym z okien, nastepnie
       znajdz PID procesu postgres uzywanego przez psql. Uzyj debuggera aby
       do PID'u postgres'a. Mozesz ustawiac pul/apki (breakpoints) w
       debuggerze i wykonywac zapytania z psql. Jesli debugujesz uruchamianie
       postgres'a, mozesz ustawic zmienna PGOPTIONS="-W n", nastepnie
       uruchomic psql. Opcja ta pozwoli spowolnic uruchomienie na n sekund
       abys mgl/ sie pol/aczyc z procesem za pomoca debugera, ustawic
       jakiekolwiek pul/apki i kontynuowac proces uruchamiania.
       
       postgres moze byc uruchamiany z opcjami -s, -A i -t, ktre moga byc
       bardzo przydatne przy debuggowaniu i ocenie wydajnosci.
       
       Mozesz takze skompilowac z profilingiem aby zobaczyc jakie funkcje ile
       czasu wykonuja sie. Pliki profilowane dla backendu zostana umieszczone
       w katalogu pgsql/data/base/dbname. Pliki profilu klienta zostana
       umieszczone w biezacym katalogu klienta. Linux wymaga aby kompilowac z
       opcja -DLINUX_PROFILE aby profilowanie odbywal/o sie poprawnie.
       
        3.8) Skad sie bierze komunikat: "Sorry, too many clients" podczas prby
        pol/aczenia sie z baza danych?
        
       Musisz zwiekszyc limit ilosci jednoczesnych procesw bacekendu dla
       procesu postmaster'a.
       
       Domyslny limit to 32 procesy. Mozesz go zwiekszyc przez restart
       postmaster z odpowiednia wartoscia ustawiana opcje -N w pliku
       postgresql.conf.
       
       Wez pod uwage, ze jesli zwiekszysz wartosc podana w opcji -N na wiecej
       niz 32 musisz takze zwiekszyc wartosc w opcji -B ponad jej domyslna
       wartosc 64; wartosc -B musi byc co najmniej dwa razy wieksza od
       wartosci podanej w opcji -N, a prawdopodobnie powinna byc w
       rzeczywistosci jeszcze wieksza dla optymalnej wydajnosci. Dla duzej
       liczby procesw backendu na pewno zauwazysz, ze trzeba zwiekszyc rzne
       parametry jadra Unixa. Rzeczy, ktre pownienes sprawdzic to maksymalna
       liczba blokw pamieci dzielonej, SHMMAX; maksymalna liczba semaforw,
       SEMMNS oraz SEMMNI; maksymalna liczba procesw, NPROC; maksymalna
       liczba procesw na jednego uzytkownika, MAXUPRC; i maksymalna liczba
       otwartych plikw, NFILE oraz NINODE. Powd dla ktrego PostgreSQL ma
       limit na maksymalna liczbe procesw backendu to obawa o wyczerpanie
       zasobw systemu.
       
        3.9) Jakie pliki znajduja sie w pg_temp?
        
       Katalog ten zawiera tymczasowe pliki utworzone przez executor. Dla
       przykl/adu, jesli jakas operacja sortowania jest wymagana do wykonania
       ORDER BY, a samo sortowanie wymaga wiecej miejsca niz parametr
       backendu -S ustawil/ do wykorzystania, wtedy tymczasowe pliki sa
       uzywane do przechowywania tych danych.
       
       Pliki tymczasowe powinny byc usuniete automatycznie, ale mogl/o sie to
       nie stac jesli proces backendu w miedzyczasie nie zakonczyl/ sie
       poprawnie podczas operacji sortowania. Jesli w danym momencie nie
       dzial/aja zadne procesy backendw mozesz spokojnie usunac pliki
       pg_tempNNN.NN.
       
        3.9) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze
        skryptw dump i restore?
        
       Twrcy PostgreSQL dokonuja jedynie mal/ych zmian pomiedzy mal/ymi
       upgradami wersji, np z 7.2 do 7.2.1, wtedy upgrade nie wymaga
       korzystania z dump i restore. Przy wiekszych zmianach, np. z wersji
       7.2 do 7.3, czesto zmianymaja wpl/yw na format przechowywanych danych.
       Zmiany te sa na tyle skomplikowane, ze nie utrzymujemy zgodosci z
       poprzednimi wersjami PostgreSQL. dump pozwala na wydostanie danych w
       takiej postaci, w ktrej l/atwe jest ich zaimportowanie do nowszych
       wersji bez kl/opotu.
       
       W wydaniach gdzie zmiany nie dotycza formatu danych na dysku, mozna
       wykorzystac skryptu pg_upgrade, do upgradu bez uzycia dump/restore.
       Dokumentacja do danego wydania zawiera informacje czy mozliwe jest
       uzycie pg_upgrade.
         _________________________________________________________________
       
                             Pytania dotyczace uzywania
                                          
        4.1) Jaka jest rznica pomiedzy kursorami binarnymi (binary cursors) i
        zwykl/ymi kursorami (normal cursors)?
        
       Zobacz w manualu opis polecenia DECLARE.
       
        4.2) Jak moge pobrac za pomoca SELECT jedynie kilka pierwszych wynikw
        zapytania?
        
       Zobacz w manualu opis polecenia FETCH lub uzyj polecenia SELECT ...
       LIMIT....
       
       Nawet jesli chesz pobrac kilka pierwszych rzedw z wyniku zapytania,
       cal/e zapytanie musi zostac wykonane. Byc moze powinienes skorzystac z
       polecenia ORDER BY. Jesli istnieje indeks ktry odpowiada polom
       okreslonym przez ORDER BY, PostgreSQL moze wykorzystac jedynie kilka
       pierwszych rzedw, byc moze bedzie koniecznosc wykonania zapytania do
       momentu az zostana znalezione pozadane wyniki.
       
       Aby otrzymac losowy rzad, uzyj:
        SELECT col
        FROM tab
        ORDER BY random()
        LIMIT 1;
            
    
        4.3) Jak moge uzyskac liste wszystkich tabel czy innych rzeczy pod psql?
        
       Mozesz sprawdzic zawartosc zrdel/ psql, a konkretnie plik
       pgsql/src/bin/psql/describe.c. Zawiera on polecenia SQL ktre generuja
       wyniki komend z backslashem. Mozesz takze uruchomic psql z opcja -E
       wtedy po wykonaniu polecenia z backslashem wyswietlane bedzie
       zapytanie, ktre w rzeczywistosci jest wykonywane.
       
        4.4) Jak usunac kolumne z tabeli lub zmienic jej typ?
        
       DROP COLUMNT zostal/o dodane w wersji 7.3 przy poleceniu ALTER TABLE
       DROP COLUMN. We wczesniejszych wersjach mozesz zrobic tak:
             BEGIN;
             LOCAL TABLE old_table;
        SELECT ...  -- wybierz wszystkie kolumny poza ta jedna ktrej chcesz sie pozbyc
        INTO TABLE new_table
        FROM old_table;
        DROP TABLE old_table;
        ALTER TABLE new_table RENAME TO old_table;
    
       Aby zmienic typ danych kolumny mozesz zrobic tak:
       BEGIN;
       ALTER TABLE tab ADD COLUMN new_col new_data_type;
       UPDATE tab SET new_col = CAST(old_col AS new_data_type);
       ALTER TABLE tab DROP COLUMN old_col;
       COMMIT;
            
        4.5) Jaki jest maksymalny rozmiar dla rzedu, tabeli i bazy danych?
        
       Oto wszystkie ograniczenia:
        Maksymalny rozmiar dla bazdy danych?     nieograniczony ( istnieja
             bazy danych o wielkosci 32 TB databases )
        Maksymalny rozmiar dla tabeli?           32 TB
        Maksymalny rozmiar dla rzedu?            1.6 TB
        Maksymalny rozmiar pola?                 1 GB
        Maksymalna liczba rzedw w tabeli?       nieograniczona
        Maksymalna liczba kolumn w tabeli?       250-1600 w zalezonosci od typw kolumn
        Makasymalna liczba indeksw na tabeli?   nieograniczona
    
       Oczywiscie "nieograniczony" nie jest prawda tak do konca, istnieja
       ograniczenia wynikajace z dostepnego miejsca na dysku, pamieci/swapa.
       Kiedy wielkosci te beda bardzo duze moze odbic sie to na wydajnosci.
       
       Maksymalny rozmiar tabeli, czyli 32 TB nie wymaga od systemu
       operacyjnego wsparcia dla duzych plikw. Duze tabele sa przechowywane
       jako pliki o rozmiarze 1 GB, wiec ograniczenia co do wielkosci plikw
       narzucone przez system plikw nie sa istotne.
       
       Masymalny rozmiar tabeli i maksymalna liczba kolumn moze byc
       zwiekszona jesli zwiekszymy domyslny rozmiar bloku (block size) do
       32k.
       
        4.6) Jak duzo miejsca w bazie danych jest konieczne aby przechowywac dane
        ze zwyczajnego pliku tekstowego?
        
       Baza danych PostgreSQL moze potrzebowac do pieciu razy wiecej miejsca
       na przechowywanie danych z plikw tekstowych niz ich objetosc.
       
       Jako przykl/ad mozemy rozwazyc plik skl/adajacy sie z 100,000 linii
       zbudowanych z liczby cal/kowitej oraz opisu tekstowego w kazdej.
       Zal/zmy, ze srednio kazdy l/ancuch tekstu w linii zajmuje 20 bajtw.
       Cal/y plik powinien zajmowac ok. 2.8 MB. Rozmiar pliku bazy danych w
       PostgreSQL zawierajacego te dane mozna oszacowac na okol/o 6.4MB:
        36 bajtw: nagl/wek kazdego rzedu w przyblizeniu)
        24 bajty:  jedno pole int i jedno pole typu text
       + 4 bajty:  wkaznik na stronie do krotki
       --------------------------------------------------
        64 bajty w jednym rzedzie
    
            Strona danych w PostgreSQL zajmuje 8192 bajtw (8 KB), wiec:
    
       8192 bajtw na strone
       ---------------------   =  128 rzedw na jedna strone w bazie (zaokraglone w dl/)
         64 bajtw na rzad
    
       100000 rzedw danych
       -----------------------  =  782 stron w bazie danych (zaokraglone w gre)
          128 rzedw na strone
    
    782 stron w bazie * 8192 bajtw na strone  =  6,406,144 bajtw (6.4 MB)
    
       Indeksy nie powoduja duzego narzutu na zajmowane miejsce, ale
       zawieraja pewne dane, wiec w pewnych przypadkach moga byc cal/kiem
       duze.
       
       NULLe sa przechowywane jako mapy bitowe, wiec uzywaja bardzo mal/o
       miejsca.
       
        4.7) Jak moge sprawdzic jakie tabele, klucze, bazy danych i uzytkownicy sa
        utworzeni?
        
       psql ma cal/kiem duza ilosc polecen z backslashem aby wydobyc takie
       informacje. Wprowadz \? aby zobaczyc ich spis. Istnieja takze tablice
       systemowe rozpoczynajace sie od pg_, zawierajace interesujace Ciebie
       informacje. Wykonanie psql -l pokaze spis wszystkich baz danych.
       
       Obejrzyj takze plik pgsql/src/tutorial/syscat.source. Zawiera on wiele
       z zapytan typu SELECT, ktre sa potrzebne aby wydobyc informacje z
       tablic systemowych.
       
        4.8) Moje zapytania sa wolne lub nie uzywaja kluczy. Dlaczego?
        
       Indeksy nie sa uzywane automatycznie przez kazde z zapytan. Ideksy sa
       uzywane jedynie gdy tabela jest odpowiedniego rozmiaru, wiekszego niz
       wymagany minimalny, a zapytanie wybiera jedynie mal/y procent
       zawartosci tabeli. Wynika to z tego, ze losowy dostep do dysku
       powodowany przez ideksowane poszukiwanie jest czasami wolniejsze niz
       poszukiwanie sekwencyjne bez uzycia kluczy.
       
       Zeby zdecydowac czy indeks powinien byc uzywany, PostgreSQL musi miec
       statystyki dotyczace danej tabeli. Sa one gromadzone przez uzycie
       polecenia VACUUM ANALYZE, lub poprostu ANALYZE. uzywajac statystyk,
       optymalizator wie ile rzedw jest w tabeli i moze lepiej okreslic czy
       indeksy powinny byc uzyte. Statystyki moga byc takze pomocne w
       okresleniu najlepszej kolejnosci wykonania zl/aczenia (join) i jego
       sposobu. Gromadzenie statystyk powinno sie odbywac w okreslonych
       interwal/ach czasu poniewaz dane w tabelach zmieniaja sie.
       
       Indeksy nie sa zazwyczaj uzywane przez ORDER BY lub przy wykonywaniu
       zl/aczen (join). Sekwencyjne przeszukiwanie po ktrym nastepuje
       sortowanie jest zazwyczaj szybsze nie wyszukiwanie za pomoca indeksu
       na duzej tabeli.
       
       Jakkolwiek LIMIT w pol/aczeniu z ORDER BY czesto bedzie wykorzystywal/
       indeksy poniewaz jedynie mal/a czesc z tabeli jest zwracana. W
       rzeczywistosci, chociaz MAX() i MIN() nie uzywaja indeksw, mozliwe
       jest aby zwrcic te wartosci uzywajac indeksw poprzez uzycie ORDER BY
       i LIMIT.
        SELECT col
        FROM tab
        ORDER BY col [ DESC ]
        LIMIT 1;
            
       Jesli uwazasz, ze optimizer myli sie wybierajac sequential scan, uzyj
       SET enable_seqscan TO 'off' i uruchom testy aby sprawdzic czy wtym
       wypadku zapytanie bedzie szybciej wykonywane.
       
       Kiedy uzywa sie operatorw dopasujacych takich jak LIKE lub ~, indeksy
       beda uzywane jedynie w pewnych wypadkach:
         * Poczatek wyszukiwania jest oparty na poczatku l/ancucha tekstu.
              + wzorce LIKE nie moga sie zaczynac %
              + dopasowania operatorem ~ (dopasowania regularne) musza sie
                zaczynac znakiem specjalnym ^.
         * Poczatek wyszukiwania nie moze sie zaczynac od klas znakw, np.
           [a-e].
         * Case-insensitive searches such as ILIKE and ~* do not utilise
           indexes. Instead, use functional indexes, which are described in
           section 4.12.
         * Standardowe locale C musi byc uzyte przy wykonywaniu initdb
           
        4.9) Jak moge sprawdzic w jakis sposb "query optimizer" wykonuje moje
        zapytanie?
        
       Zobacz manual dla polecenia EXPLAIN.
       
        4.10) Co to jest "R-tree index"?
        
       Indeks R-tree jest uzywany do indeksowania danych przestrzennych.
       Indeks hasuujacy nie nadaje sie do wyszukiwania odlegl/osci. Natomiast
       indeks typu B-tree moze wyszukiwac odleglosci jedynie w
       jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z
       przestrzeniami wielo-wymiarowymi. Dla przykl/adu, jesli zostanie
       zal/ozony indeks typu R-tree na polu typu point, system moze bardziej
       wydajnie odpowiadac na zapytania typu "select all points within a
       bounding rectangle."
       
       Zrdl/owym dokumentem opisujacym oryginalnie projektowanie R-tree
       indeksw jest:
       
       Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
       Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
       Data, 45-57.
       
       Ten dokument mozesz znalezc takze w pracy Stonebraker'a "Readings in
       Database Systems".
       
       Wbudowane indeksy R-trees radza sobie w wielobokami i boxes.
       Teoretycznie, indeksy R-tree moga byc rozszerzone o mozliwosci
       indeksowania w wiecej wymiarowych przestrzeniach. W praktyce,
       rozbudowa indeksw R-tree wymaga troche pracy, a w tej chwili nie
       dysponujemy jakakolwiek dokumentacja jak to zrobic.
       
        4.11) Co to jest "Genetic Query Optimizer"?
        
       Modul/ GEQO ma za zadanie przyspieszenie optymalizacji zapytan l/aczac
       wiele tabel za pomoca algorytmw genetycznych (Genetic Algorithm
       (GA)). Pozwala na uzywanie duzych zapytan l/aczacych tabele (join
       queries) bez wykorzystywania zasobozernego wyszukiwania.
       
        4.12) Jak moge uzywac wyrazen regularnych w zapytaniach i zapytan
        case-insensitive w wyrazeniach regularnych? Jak korzystac z indeksw dla
        zapytan case-insensitive?
        
       Operator ~ moze byc wykorzystywany do wyszukiwania za pomoca wyrazen
       regularnych, a ~* do wyszukiwania case-insensitive z wyrazeniami
       regularnymi. Wariant case-insensitive dla LIKE zostal/ nazwany ILIKE.
       
       Porwnania case-insensitive sa zazwyczaj wykonywane w nastepujacy
       sposb:
        SELECT *
        FROM tab
        WHERE lower(col) = 'abc'
    
       W tym wypadku standardowe indeksy nie beda uzywane. Mozesz utworzyc
       indeks funkcyjny, poprzez:
        CREATE INDEX tabindex on tab (lower(col));
    
        4.13) Jak sprawdzic w zapytaniu czy pole ma wartosc NULL?
        
       Mozesz to sprawdzic, testujac wartosc kolumny warunkiem IS NULL albo
       IS NOT NULL.
       
        4.14) Jaka jest rznica pomiedzy rznymi typami tekstowymi (character
        types)?
        
    Type            Nazwa wewnetrzna   Uwagi
    --------------------------------------------------
    VARCHAR(n)      varchar            rozmiar okresla maksymalna dl/ugosc, nie matutaj wypel/niania
    CHAR(n)         bpchar             wypel/niane pustymi znakami do podanej dl/ugosci
    TEXT            text               bez limitu na dl/ugosc l/ancucha
    BYTEA           bytea              zmiennej dl/ugosci tablica bajtw (null-byte safe)
    "char"          char                      1 znak
    
       Jesli bedziesz przegladac katalogi systemowe lub komunikaty o bl/edach
       czesto spotkasz sie z podanymi powyzej nazwami wewnetrznymi.
       
       Pierwsze cztery typy powyzej to tzw typy "varlena" (np. pierwsze
       cztery bajty na dysku to dl/ugosc, po ktrych jest data). Dlatego
       faktyczna dl/ugosc takiego l/ancucha jest troche wieksza niz
       zadeklarowany rozmiar. Te typy takze podlegaja kompresji lub moga byc
       przechowywane out-of-line jako TOAST, wiec faktyczne zuzycie miejsca
       na dysku moze byc mniejsze niz oczekiwane.
       
       VARCHAR(n) jest najodpowiedniejszy do przechowywania l/ancuchw o
       rznej dl/ugosci ale okresla on maksymalna jego dl/ugosc. TEXT jest
       najlepszy dla l/ancuchw o dowolnej dl/ugosci, nie przekraczajacej
       1GB.
       
       CHAR(n) jast najlepszym typem do przechowywania l/ancuchw o tej samej
       dl/ugosci. CHAR(n) wypel/nia dane do zadanej dl/ugosci, podczas gdy
       VARCHAR(n) przechowuje jedynie dane dostarczone. BYTEA sl/uzy do
       przechowywania danych binarnych, w szczeglnosci dla danych
       zawierajacych NULL bajty. Wszystkie typy opisane tutaj maja podobne
       charakterystyki jesli chodzi o wydajnosc.
       
        4.15.1) Jak moge utworzyc pole ktre samo zwieksza swoja wartosc?
        
       PostgreSQL ma zaimplementowany typ SERIAL. Automatycznie tworzy
       sekwencje i indeks na tej kolumnie. Dla przykladu:
        CREATE TABLE person (
            id   SERIAL,
            name TEXT
        );
    
       zostanie automatycznie prztl/umaczone na:
        CREATE SEQUENCE person_id_seq;
        CREATE TABLE person (
            id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
            name TEXT
        );
        CREATE UNIQUE INDEX person_id_key ON person ( id );
    
       Wiecej informacji o sekwencjach znajdziesz w manualu o
       create_sequence. Mozesz takze uzyc pola OID jako unikalnej wartosci
       dla kazdego rzedu danych. Jesli bedziesz potrzebowal/ z backupowac
       dane robiac dump bazy i odtworzyc ja, musisz uzyc pg_dump z opcja -o
       lub polecenia COPY WITH OIDS aby zachowac OIDy.
       
        4.15.2) Jak pobrac wartosc pola typu SERIAL po wykonaniu insert'u?
        
       Jednym z podejsc jest pobranie kolejnej wartosci typu SERIAL z
       sekwencji za pomoca funkcji nextval() zanim zostanie wstawiona, a
       pzniej nalezy jej uzyc. Uzywajac przykl/adu z tabeli z punktu 4.15.1,
       moze to wygladac w Perlu na przykl/ad w ten sposb:
        new_id = output of "SELECT nextval('person_id_seq')"
        INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
    
       Bedziesz mial/ wtedy ta wartosc przechowana w zmiennej new_id do
       uzytku w innych zapytaniach (np. jako klucz obcy do tabeli person).
       Warto zwrcic uwage, ze nazwa automatycznie utworzonej sekwencji
       SEQUENCE bedzie nastepujaca: <tabela>_<kolumnatypuserial>_seq, gdzie
       tabela i kolumnatypuserial sa nazwami Twojej tabeli i Twojej kolumny
       typu SERIAL.
       
       Inne rozwiazanie to uzycie funkcji currval() na pola typu SERIAL po
       dodaniu nowej wartosci do rzedu zawierajacego kolumne typu SERIAL z
       wstawiona domyslnie wartoscia, np.
        INSERT INTO person (name) VALUES ('Blaise Pascal');
        new_id = output of "SELECT currval('person_id_seq')";
    
       Ostatecznie mozesz uzyc OID zwracanej po wykonaniu INSERT, chociaz to
       jest najmniej przenosne rozwiazanie. W Perlu, wykorzystujac biblioteke
       DBI z modul/em Edmunda Mergla DBD::Pg, oid jest dostepny poprzez
       $sth->{pg_oid_status} po wykonaniu $sth->execute().
       
        4.15.3) Czy uzycie currval() i nextval() nie doprowadzi do race condition z
        innymi uzytkownikami?
        
       Nie. currval() zwraca biezaca wartosc przypisana przez Twj backend, a
       nie przez wszystkich uzytkownikw.
       
        4.15.4) Dlaczego numery sekwencji nie sa ponownie uzywane przy przerwaniu
        transakcji? Skad sie biora luki w numerowaniu kolumny tabeli
        sekwancjami/SERIALem?
        
       Aby poprawic zbieznosc (concurrency), wartosci sekwencji sa podawane
       dzial/ajacym transakcjom kiedy tego potrzebuja i nie sa blokowane
       dopki transakcja sie nie zakonczy. To spowoduje przerwy w numerowaniu
       z przerwanych transakcji.
       
        4.16) Co to jest OID? Co to jest TID?
        
       OID sa PostgreSQL'owym rozwiazaniem problemu unikalnych numerw
       rzedw. Kazdy rzad tworzony przez PostgreSQL otrzymuje unikalny OID.
       Wszystkie OIDy generowane podczas procesu uruchamianego przez skrypt
       initdb maja mniejsza wartosc niz 16384 (na podstawie pliku
       backend/access/transam.h). Wszystkie OIDy tworzone przez uzytkownika
       sa rwne lub wieksze podanej wczesniej wartosci. Domyslnie wszystkie
       OIDy sa unikalne nie tylko w pojedynczej tabeli czy bazie danych ale w
       cal/ej instalacji PostgreSQL.
       
       PostgreSQL uzywa OIDw w swoim wewnetrznym systemie tabel, aby mozna
       byl/o je l/aczyc. Te OIDy moga byc uzywane aby identyfikowac rzedy w
       tabelach i wykorzystywac je w zl/aczeniach tych tabel. Zaleca sie abys
       uzywal/ typu OID aby przechowywac wartosci OID. Mozesz utworzyc indeks
       na polu OID aby dostep do niego byl/ szybszy.
       
       OID sa przypisane do wszystkich rzedw z jednego gl/wnego miejsca i
       uzywane sa przez wszystkie bazy danych. Jesli chcial/bys zmienic OID
       na cos innego, lub jesli chcial/bys zrobic kopie tabeli, z orginalnymi
       OIDami nie ma zadnego przeciwwskazania abys to zrobil/:
            CREATE TABLE new_table(old_oid oid, mycol int);
            SELECT old_oid, mycol INTO new FROM old;
            COPY new TO '/tmp/pgtable';
            DELETE FROM new;
            COPY new WITH OIDS FROM '/tmp/pgtable';
    
       OIDy sa przechowywane jako cztero-bajtowe liczby cal/kowite i skoncza
       sie po osiagnieciu czterech miliardw. Nikt jak dotad nie zgl/osil/
       aby cos takiego sie stalo, ale mamy zamiar pozbyc sie tego
       ograniczenia zanim ktos to zgl/osi.
       
       TID sa uzywane aby zidentyfikowac konkretne rzedy z blokami i
       wartoscia ofsetw. TIDy zmieniaja sie wraz ze zmianami rzedw. Sa
       uzywane przez indeksy, aby wskazywac do fizycznych rzedw.
       
        4.17) Jakie jest znaczenie niektrych terminw w PostgreSQL?
        
       W czesci kodu zrdl/owego i starszej dokumentacji uzywamy terminw,
       ktre maja bardziej oglne znaczenie. Oto niektre z nich:
         * table, relation, class
         * row, record, tuple
         * column, field, attribute
         * retrieve, select
         * replace, update
         * append, insert
         * OID, serial value
         * portal, cursor
         * range variable, table name, table alias
           
       Liste terminw zwiazanych z bazami danych mozesz znalezc pod tym
       adresem:http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/
       glossary/glossary.html.
       
        4.18) Skad bierze sie ten bl/ad "ERROR: Memory exhausted in
        AllocSetAlloc()"?
        
       Prawdopodobnie wyczerpal/a Ci sie pamiec wirtualna (virtual memory) w
       systemie lub Twj kernel ma zbyt nisko ustawione limity dla pewnych
       zasobw. Sprbuj wykonac nastepujace polecenia zanim uruchomisz
       postmaster'a:
        ulimit -d 262144
        limit datasize 256m
    
       W zaleznosci od shell'a jakiego uzywasz jedno z tych polecen moze nie
       zadzial/ac, ale to ustawienie pozwoli ustawic segment danych dla
       procesu znacznie wiekszy i byc moze pozwoli wykonac zapytanie. To
       polecenie zadzial/a dla biezacego procesu oraz wszytkich podprocesw
       utworzonych po wykonaniu polecenia. Jesli ten problem wystepuje z
       klientem SQL, poniewaz backend zwraca zbyt duzo danych, sprbuj
       wykonac to polecenie przed uruchomieniem klienta.
       
        4.19) Jak sprawdzic jakiej wersji PostgreSQL uzywam?
        
       W psql, wpisz select version();
       
        4.20) Dlaczego operacje, ktre wykonuje na duzych obiektach "large-object"
        zwracaja komunikat: "invalid large obj descriptor"?
        
       Musisz uzyc BEGIN WORK i COMMIT przed i po uzyciu uchwytu do duzego
       obiektu, tzn. musisz nimi otoczyc funkcje lo_open ... lo_close.
       
       Obecnie PostgreSQL uzywjac "rule" zamyka uchwyt do duzego obiektu przy
       kazdym wywol/aniu "commit". Wiec pierwsze prba zrobienia czegokolwiek
       z uchwytem spowoduje wypisanie: invalid large obj descriptor. Kod,
       ktry do tej pory dzial/al/ (przynajmniej wiekszosc razy) bedzie teraz
       generowal/ informacje o bl/edzie jesli nie bedziesz korzystal/ z
       transakcji.
       
       Jesli uzywasz interfejsu klienta jak ODBC byc moze bedziesz musial/
       ustawic auto-commit off.
       
        4.21) Jak stworzyc kolumne ktrej domyslna wartoscia bedzie biezacy czas?
        
       Uzyj CURRENT_TIMESTAMP:
    CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
    
        4.22) Dlaczego zapytania uzywajace IN sa takie wolne?
        
       W wersjach wczesniejszych niz 7.4 l/aczymy podzapytania w outer
       queries poprzez sekwencyjne przeszukiwanie wynikw podzapytania dla
       kazdego rzedu z outer query. Jesli podzapytanie zwraca jedynie kilka
       rzedw a zewnetrzne zapytanie zwraca ich wiele, IN jest najszybsze.
       Aby przyspieszyc inne zapytania mozna zastapic IN przez EXISTS:
    SELECT *
        FROM tab
        WHERE col IN (SELECT subcol FROM subtab)
    
       na:
    SELECT *
        FROM tab
        WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
    
       Aby to rozwiazanie byl/o szybkie, subcol powinna byc kolumna
       indeksowana.
       
       W wersji 7.4 i pzniejszych, IN w rzeczywistosci uzywa tej samej
       wyrafinowanej techniki l/aczenia jak normalne zapytania i jest
       preferowane nad uzywaniem EXISTS.
       
        4.23) Jak wykonac "outer join"?
        
       PostgreSQL ma zaimplementowane outer join wykorzystujac standardowa
       skl/adnie SQL. Ponizej dwa przykl/ady:
        SELECT *
        FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
    
       or
        SELECT *
        FROM t1 LEFT OUTER JOIN t2 USING (col);
    
       Te dwa identyczne zapytania l/acza kolumne t1.col z kolumna t2.col,
       ale takze zwrca niepol/aczone rzedy w t1 (te, ktre nie pasuja w t2).
       RIGHT join dodal/by niepol/aczone rzedy z tabeli t2. FULL join
       zwrcil/by rzedy plus dodatkowo wszystkie rzedy z tabel t1 i t2.
       Sl/owo OUTER jest opcjonalne i jest dodawane domyslnie przy LEFT,
       RIGHT, i FULL join'ach. Zwykl/e join'y sa nazywane INNER joins.
       
       W poprzednich wersjach "outer joins" moga byc zasymulowane poprzez
       uzycie slowa kluczowego UNION i NOT IN. Dla przykl/adu, l/aczac tabele
       tab1 i tab2, nastepujace zapytanie wykonuje outer join:
        SELECT tab1.col1, tab2.col2
        FROM tab1, tab2
        WHERE tab1.col1 = tab2.col1
        UNION ALL
        SELECT tab1.col1, NULL
        FROM tab1
        WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
        ORDER BY col1
    
        4.24) Jak wykonywac zapytanie uzywajace kilku baz danych jednoczesnie?
        
       Nie ma takiej mozliwosci aby w zapytaniu odpytawac inna baze danych
       poza biezaca. Poniewaz PostgreSQL l/aduje specyficzne dla bazy danych
       katalogi systemowe, nie jest do konca jasne jak zapytanie pomiedzy
       rznymi bazami danych powinno sie zachowywac.
       
       contrib/dblink pozwala na wykonywanie zapytan poprzez rzne bazy
       danych wywol/ujac odpowiednie funkcje. Oczywiscie klient moze l/aczyc
       sie z rznymi bazami danych i l/aczyc informacje w ten sposb uzyskana
       po stronie klienta.
       
        4.25) Jak zwrcic w funkcji wiele rzedw lub kolumn?
        
       Mozesz w l/atwy sposb zwracac wiele rzedw lub kolumn uzywajac
       funkcji z:
       http://techdocs.postgresql.org/guides/SetReturningFunctions.
       
        4.26) Dlaczego nie moge w sposb pewny tworzyc/usuwac tabel tymczasowych w
        funkcjach PL/PgSQL?
        
       PL/PgSQL przechowuje w cache zawartosc funkcji, niepozadanym efektem
       tego jest to, ze gdy taka funkcja korzysta z tabel tymczasowych, ktre
       sa pzniej kasowane i odtwarzane, a funkcja wywol/ywana jest
       ponownie,jej wywol/anie nie powiedzie sie poniewaz cachowana funkcja
       wciaz bedzie wskazywac na stara tablice tymczasowa. Rozwiazaniem tego
       problemu jest uzywanie EXECUTE aby korzystac z tabel tymczasowych w
       PL/PgSQL. To spowoduje, ze zapytanie bedzie parsowane przy kazdym
       wywol/aniu funkcji.
       
        4.27) Jakie sa mozliwosci replikacji w PostgreSQL?
        
       Jest kilka opcji aby stosowac replikacje typu master/slave. Ten typ
       pozwala jedynie masterowi na dokonywanie zmian w bazie danych, a slave
       moze jedynie te zmiany odczytywac. Na stronie
       http://gborg.PostgreSQL.org/genpage?replication_research znajduje sie
       ich lista. Replikacja typu multi-master jest w trakcie prac, opis
       projektu znajduje sie pod adresem:
       http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
       
        4.28) Jakie mozliwosci szyfrowania oferuje PostgreSQL?
        
         * contrib/pgcrypto zawiera wiele funkcji za pomoca, ktrych mozemy
           uzywac kryptografii w zapytaniach SQL.
         * Aby szyfrowac transmisje od klienta do serwera, ten musi miec
           ustawiona opcje ssl na true w pliku postgresql.conf, odpowiedni
           wpis host lub hostssl musi wystepowac w pliku pg_hba.conf, oraz
           sslmode nie moze byc wyl/aczone w kliencie. (Warto zwrcic uwage,
           ze mozliwe jest takze uzywanie transportw szyfrujacw przez
           strony trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem
           dla SSL przez PostgreSQL).
         * Hasl/a uzytkownikw bazy danych sa automatycznie szyfrowane od
           wersji 7.3. W poprzednich wersjach, nalezy ta funkcjonalnosc
           poprzez wl/aczenie opcji PASSWORD_ENCRYPTION w postgresql.conf.
         * Serwer moze dzial/ac uzywajac szyfrowanego systemu plikw.
           
                               Rozwijanie PostgreSQL
                                          
        5.1) Napisal/em wl/asna funkcje. Kiedy uzyje jej w psql, program zrzuca
        pamiec (dump core)?
        
       Problem moze byc spowodowany przez bardzo wiele rzeczy. Sprbuj
       najpierw przetestowac Twoja funkcje w samodzielnie dzial/ajacym
       programie.
       
        5.2) Jak moge dodac/zgl/osic nowe typy czy funkcje do PostgreSQL?
        
       Wyslij Twoje propozycje na liste mailowa pgsql-hackers, wtedy
       prawdopodobnie Twj kod znajdzie sie w katalogu contrib/.
       
        5.3) Jak napisac funkcje C zwracajaca krotke (tuple)?
        
       W wersjach PostgreSQL od numeru 7.3, funckje zwracajace tabele sa w
       pelni wspierane w C, PL/PgSQL i SQL. Sprawdz w Programmer's Guide aby
       uzyskac wiecej informacji. Przykl/ad funkcji napisanej w C zwracajacej
       tabele zostal/ umieszczony w contrib/tablefunc.
       
        5.4) Zmienil/em plik zrdl/owy. Dlaczego po rekompilacji nie widac zmiany?
        
       Pliki Makefiles nie maja dorzuconych odpowiednich zaleznosci dla
       plikw nagl/wkowych (include files). Wykonaj najpierw make clean, a
       nastepnie ponownie make. Jesli uzywasz GCC mozesz uzyc opcji
       --enable-depend przy wykonywaniu configure aby kompilator mgl/
       okreslic zaleznosci samodzielnie.