Skip to content
Snippets Groups Projects
FAQ_polish.html 67.27 KiB
<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN">

<HTML>
  <!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" -->
  <!-- HTML -->

  <HEAD>
    <META name="generator" content="HTML Tidy, see www.w3.org">
	 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
    <TITLE>PostgreSQL FAQ</TITLE>
  </HEAD>

  <BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
  alink="#0000ff">

	<H1>Frequently Asked Questions (FAQ) o PostgreSQL</H1>

    <P>Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004</P>

	 <P>Ostatnia aktualizacja tumaczenia: Pitek Marzec 5 19:31:12 EST 2004</P>

    <P>Obecny maintainer: Bruce Momjian (<A href=
    "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
    </P>
    <P>Tumaczenie: Marcin Mazurek (<A href=
    "mailto:m.mazurek@netsync.pl">m.mazurek@netsync.pl</A>)<BR>
    </P>

    <P>Najbardziej aktualn wersj tego dokumentu mona znale pod
	 adresem:
	 <A href=
    "http://www.Postgresql.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P>

    <P>Odpowiedzi na pytania dotyczce konkretnych systemw operacyjnych
	 mona znale pod adresem: 
	 <A href=
    "http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P>
    <HR>

    <H2 align="center">Pytania oglne</H2>
    <A href="#1.1">1.1</A>) Co to jest PostgreSQL? Jak to wymawia?<BR>
     <A href="#1.2">1.2</A>) Jak licencj chroniony jest PostgreSQL?<BR>
     <A href="#1.3">1.3</A>) Na jakich systemach Unixowych dziaa
	  PostreSQL?<BR>
     <A href="#1.4">1.4</A>) Na jakich nie-Unixowych systemach dziaa
	  PostgreSQL?<BR>
     <A href="#1.5">1.5</A>) Skd mog cign PostgreSQL?<BR>
     <A href="#1.6">1.6</A>) Gdzie mona szuka wsparcia technicznego?<BR>
     <A href="#1.7">1.7</A>) Jaka jest ostatnia dostpna wersja?<BR>
     <A href="#1.8">1.8</A>) Jaka dokumentacja jest dostpna?<BR>
     <A href="#1.9">1.9</A>) Gdzie mog znale informacj o znanych
	  bdach czy brakujcych rozwizanich?<BR>
     <A href="#1.10">1.10</A>) Jak mog si nauczy <SMALL>SQL</SMALL>?<BR>
     <A href="#1.11">1.11</A>) Czy PostgreSQL ma rozwizany problem Y2K?<BR>
     <A href="#1.12">1.12</A>) Jak mog si przyczy do grupy osb
	  bezporednio pracujcych nad rozwojem PostgreSQL?<BR>
     <A href="#1.13">1.13</A>) Jak mog zgasza bdy?<BR>
     <A href="#1.14">1.14</A>) Jak mona porwna PostgreSQL w stosunku
	  do innych <SMALL>DBMS</SMALL>?<BR>
     <A href="#1.15">1.15</A>) W jaki sposb mog wesprze finansowo
    PostgreSQL?<BR>
    
	 <H2 align="center">Pytania uytkownikw</H2>
    <A href="#2.1">2.1</A>) Czy s jakie driwery <SMALL>ODBC</SMALL> dla
    PostgreSQL?<BR>
     <A href="#2.2">2.2</A>) Jakie istniej narzdzia pozwalajce na dostp do
	  PostgreSQL przez www?<BR>
     <A href="#2.3">2.3</A>) Czy istnieje jakie GUI dla PostgreSQL?<BR>
     <A href="#2.4">2.4</A>) Za pomoc jakich jzykw programowania mona
	  si komunikowa z PostgreSQL?<BR>
     

    <H2 align="center">Pytania dotyczce administracji</H2>
    <A href="#3.1">3.1</A>) Jak mog zainstalowa PostgreSQL w innej 
	 		lokalizacji ni <I>/usr/local/pgsql</I>?<BR>
     <A href="#3.2">3.2</A>) Podczas startu <I>postmaster'a</I>,
	  otrzymuj komunikat:
    <I>Bad System Call</I> lub "core dumped". Dlaczego?<BR>
     <A href="#3.3">3.3</A>) Podczas startu <I>postmaster'a</I>, 
     otrzymuj komunikat o bdzie: <I>IpcMemoryCreate</I>. Dlaczego?<BR>
     <A href="#3.4">3.4</A>) Podczas startu <I>postmaster'a</I>,
     otrzymuj komunikat o bdzie: <I>IpcSemaphoreCreate</I>. Dlaczego?<BR>
     <A href="#3.5">3.5</A>) W jaki sposb mog kontrolowa poczenia z
	  innych hostw?<BR>
     <A href="#3.6">3.6</A>) Jak powinienem skonfigurowa system baz
	  danych aby uzyska lepsz wydajno?<BR>
     <A href="#3.7">3.7</A>) Jakie s moliwoci wyszukiwania bdw?<BR>
     <A href="#3.8">3.8</A>) Skd si bierze komunikat: <I>"Sorry, too many
    clients"</I> podczas prby poczenia si z baz danych?<BR>
     <A href="#3.9">3.9</A>) Jakie pliki znajduj si w <I>pg_temp</I>?<BR>
     <A href="#3.10">3.10</A>) Dlaczego konieczne jest przy upgradzie
	  PostgreSQL korzystanie ze skryptw dump i restore?<BR>

    <H2 align="center">Pytania dotyczce uytkowania</H2>
    <A href="#4.1">4.1</A>) Jaka jest rnica pomidzy kursorami
	 binarnymi (binary cursors) i zwykymi kursorami (normal cursors)?<BR>
     <A href="#4.2">4.2</A>) Jak mog pobra za pomoc <SMALL>SELECT</SMALL>
	  jedynie kilka pierwszych wynikw zapytania?<BR>
     <A href="#4.3">4.3</A>) Jak mog uzyska list wszystkich tabel czy
	  innych rzeczy pod <I>psql</I>?<BR>
     <A href="#4.4">4.4</A>) Jak usun kolumn z tabeli lub zmieni jej
	  typ?<BR>
     <A href="#4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rzdu,
	  tabeli i bazy danych?<BR>
     <A href="#4.6">4.6</A>) Jak duo miejsca w bazie danych jest
	  potrzebne aby przechowa dane ze zwyczajnego pliku tekstowego?<BR>
     <A href="#4.7">4.7</A>) Jak mog sprawdzi jakie tabele, klucze,
	  bazy danych i uytkownicy s utworzeni?<BR>
     <A href="#4.8">4.8</A>) Moje zapytania s wolne lub nie uywaj
	  kluczy. Dlaczego?<BR>
     <A href="#4.9">4.9</A>) Jak mog sprawdzi w jakis sposb "query
	  optimizer" wykonuje moje zapytanie?<BR>
     <A href="#4.10">4.10</A>) Co to jest "R-tree index"?<BR>
     <A href="#4.11">4.11</A>) Co to jest "Genetic Query Optimizer"?<BR>
     <A href="#4.12">4.12</A>) Jak mog uywa wyrae regularnych w
	  zapytaniach i zapyta case-insensitive w wyraeniach regularnych?
	  Jak korzysta z indeksw dla zapyta case-insensitive?<BR>
     <A href="#4.13">4.13</A>) Jak sprawdzi w zapytaniu czy pole ma
	  warto <SMALL>NULL</SMALL>?<BR>
     <A href="#4.14">4.14</A>) Jaka jest rnica pomidzy rnymi typami
	  tekstowymi (character types)?<BR>
     <A href="#4.15.1">4.15.1</A>) Jak mog utworzy pole typu int, ktre samo
	  zwiksza swoj warto?<BR>
     <A href="#4.15.2">4.15.2</A>) Jak pobra warto pola typu 
    <SMALL>SERIAL</SMALL> po wykonaniu insert'u?<BR>
     <A href="#4.15.3">4.15.3</A>) Czy uycie <I>currval()</I> i
    <I>nextval()</I> nie doprowadzi do "race condition" z innymi
	 uytkownikami?<BR>
     <A href="#4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie s
	  ponownie uywane przy przerwaniu transakcji?
    Skd si bior luki w numerowaniu kolumny tabeli sekwencjami/SERIALem?<BR>
     <A href="#4.16">4.16</A>) Co to jest <SMALL>OID</SMALL>? Co to jest
    <SMALL>TID</SMALL>?<BR>
     <A href="#4.17">4.17</A>) Jakie jest znaczenie niektrych terminw w 
    PostgreSQL?<BR>
     <A href="#4.18">4.18</A>) Skd bierze si ten bd: <I>"ERROR: Memory
    exhausted in AllocSetAlloc()"</I>?<BR>
     <A href="#4.19">4.19</A>) Jak sprawdzi jakiej wersji PostgreSQL
    uywam?<BR>
     <A href="#4.20">4.20</A>) Dlaczego operacje, ktre wykonuj na
	  duych obiektach "large-object" zwracaj komunikat:
    <I>"invalid large obj descriptor"</I>?<BR>
     <A href="#4.21">4.21</A>) Jak stworzy kolumn ktrej domyln
	  wartoci bdzie biecy czas?<BR>
     <A href="#4.22">4.22</A>) Dlaczego zapytania uywajce
    <CODE><SMALL>IN</SMALL></CODE> s takie wolne?<BR>
     <A href="#4.23">4.23</A>) Jak wykona "outer join"?<BR>
     <A href="#4.24">4.24</A>) Jak wykonywa zapytanie uywajce kilku
	  baz danych jednoczenie?<BR>
     <A href="#4.25">4.25</A>) Jak zwrci w funkcji wiele rzdw lub
	  kolumn?<BR>
     <A href="#4.26">4.26</A>) Dlaczego nie mog w sposb pewny
	  tworzy/usuwa tabel tymczasowych w funkcjach PL/PgSQL?<BR>
     <A href="#4.27">4.27</A>) Jakie s moliwoci replikacji w
	  PostgreSQL?<BR>
     <A href="#4.28">4.28</A>) Jakie moliwoci szyfrowania oferuje
	  PostgreSQL?<BR>
    
    <H2 align="center">Rozwijanie PostgreSQL</H2>
    <A href="#5.1">5.1</A>) Napisaem wasn funkcj. Kiedy uyj jej w
	 <I>psql</I>, program zrzuca pami (dump core)?<BR>
     <A href="#5.2">5.2</A>) Jak mog doda/zgosi nowe typy czy funkcje
	  do PostgreSQL?<BR>
     <A href="#5.3">5.3</A>) Jak napisa funkcj C zwracajc krotk
	  (tuple)?<BR>
     <A href="#5.4">5.4</A>) Zmieniem plik rdowy. Dlaczego po
	  rekompilacji nie wida zmiany?<BR>
     
    <HR>

    <H2 align="center">Pytania oglne</H2>

    <H4><A name="1.1">1.1</A>) Co to jest PostgreSQL? Jak to wymawia?</H4>

    <P>PostgreSQL wymawia si <I>Post-Gres-kju-el</I>. Czsto podczas
	 rozmw uywany jest termin "Postgres"</P>

    <P>PostgreSQL jest rozszerzeniem systemu zarzdzania bazami danych -
	 POSTGRES, kolejn generacj rozwojowego prototypu <SMALL>DBMS</SMALL>.
    Mimo, e PostgreSQL zachowa bardzo dobrze zbudowany model danych
	 (data model) i bogaty zestaw typw danych POSTGRES'a, zastpi
	 PostQuel'owy jzyk zapyta z rozbudowanym podzbiorem jzyka 
	 <SMALL>SQL</SMALL>. PostgreSQL jest oprogramowaniem darmowym 
	 z dostpnymi caymi rdami.
	 </P>

    <P>Rozwj PostgreSQL jest prowadzony przez grup ludzi z Internetu,
	 komunikujcych si poprzez mailowe listy dyskusyjne PostgreSQL.
    Obecnym koordynatorem jest Marc G. Fournier (<A href=
    "mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (Zobacz
	 pytanie <A href="#1.6">1.6</A> jak si przyczy). Ta grupa ludzi jest 
	 odpowiedzialna za cay rozwj PostgreSQL. PostgreSQL jest projektem
	 nie kontrolowanym przez adn firm, aby wzi udzia w jego rozwoju
	 sprawd, <A href="http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html">
	 http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</a></P>

    <P>Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen.
	 Wiele innych osb pomogo przy portowaniu, testowaniu, debugowaniu i
	 rozwijaniu kodu. Oryginalny kod Postgresa, na ktrym zosta oparty
	 PostgreSQL, by wysikiem studentw oraz pracownikw pracujcych pod
	 kierownictwem profesora Michael'a Stonebraker'a z University of
	 California w Berkeley.</P>

    <P>Oryginaln nazw oprogramowania w Berkeley by Postgres.  Po
	 dodaniu obsugi <SMALL>SQL</SMALL> w 1995, nazwa zostaa zmieniona
    na Postgres95. Pod koniec roku 1996 nazwa zostaa zmieniona na
    PostgreSQL.</P>

    <H4><A name="1.2">1.2</A>) Jak licencj chroniony jest
    PostgreSQL?</H4>

    <P>PostgreSQL objty jest nastpujc licencj:</P>

    <P>PostgreSQL Data Base Management System</P>

    <P>Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
    Portions Copyright (c) 1994-6 Regents of the University of California</P>

    <P>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.</P>

    <P>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.</P>

    <P>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.</P>

    <P>Tekst powyej, jest klasyczn licencj BSD.
    Nie posiada ona adnych restrykcji co do uywania kodu rdowego.
	 Podoba nam si i nie zamierzamy jej zmienia.

    <H4><A name="1.3">1.3</A>) Na jakich systemach Unixowych dziaa
	      PostreSQL?</H4>

    <P>PostgreSQL powinien dziaa na wszystkich nowych Unix-podobnych
	 systemach. Platformy, ktre zostay szczegowo przetestowane podczas
	 publikowania PostgreSQL s wymienione w dokumentacji opisujcej
	 instalacj.</P>

    <H4><A name="1.4">1.4</A>) Na jakich nie-Unixowych systemach dziaa
	      PostgreSQL?</H4>

    <P><STRONG>Klient</STRONG></P>

    <P>Moliwa jest kompilacja bibliteki C <I>libpq</I>, psql oraz
	 innych interfejsw i uruchamianie ich na platformie MS Windows. W tym
	 wypadku klient jest uruchamiany na MS Windows a z serwerem komunikuje si
	 poprzez TCP/IP. Serwer moe dziaa na dowolnej wspieranej platformie 
	 Unixowej. Plik <I>win32.mak</I> jest doczony
	 do rde, aby mona byo stworzy bibliotek <I>libpq</I> oraz
	 program <I>psql</I> dziaajce w rodowisku Win32. PostgreSQL moe si 
	 take komunikowa z klientami <SMALL>ODBC</SMALL>.</P>

    <P><STRONG>Serwer</STRONG></P>

    <P>Serwer moe by uruchamiany na Windows NT i Win2k uywajc
	 bibliotek Cygwin, Cygnus Unix/NT. W pliku <I>pgsql/doc/FAQ_MSWIN</I>
	 znajdujcym si w rdach lub pod adresem: <A href=
    "http://www.postgresql.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A> na naszych stronach.<P>
	 Obecnie prowadzone s prace nad stworzeniem wersji dla MS Win
	 NT/200/XP. Jeli chcesz si dowiedzie o obecnym statusie tych prac
	 zobacz <A
	 href="http://techdocs.postgresql.org/guides/Windows">http://techdocs.postgresql.org/guides/Windows</A> and
	 <A
	 href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">http://momjian.postgresql.org/main/writings/pgsql/win32.html</A>.
	 </P>
	 <P>
	 Istnieje take port pod Novell Netware 6 dostpny pod adresem <A
	 href="http://forge.novell.com">http://forge.novell.com</A>.
	 </P>

    <H4><A name="1.5">1.5</A>) Skd mona cign PostgreSQL?</H4>

    <P>Gwny serwer ftp z dostpem "anonymous" dla PostgreSQL znajduje
	 si <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
	 jeli szukasz mirrorw sprawd nasz gwn stron www.<P>

    <H4><A name="1.6">1.6</A>) Gdzie mona szuka wsparcia technicznego?</H4>

    <P>Adres gwnej listy mailowej: <A href=
    "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
    Jest ona przeznaczona dyskusjom dotyczcym spraw zwizanych z PostgreSQL.
    eby zapisac si na list, wylij email z nastpujcymi liniami w
	 treci maila (nie w temacie):</P>
<PRE>
    subscribe
    end
</PRE>

    <P>na adres: <A href=
    "mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>

    <P>Dostpna jest take lista wysyajca digesty. Aby zapisa si na
	 ni, wylij email na adres:
    <A href=
    "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
    z treci maila zawierajc:</P>
<PRE>
    subscribe
    end
</PRE>
	Digesty s wysyane do czonkw listy, kiedy na gwn list dotrze ok
	30k wiadomoci.

    <P>Dostpna jest take lista powicona bdom znalezionym w
	 PostgreSQL. Aby zapisa si na ni wylij email na adres:
    <A href=
    "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
    z treci maila zawierajc:</P>
<PRE>
    subscribe
    end
</PRE>
    Lista powicona dyskusjom developerw jest dostpna pod adresem:
    <A href=
    "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
	 Aby si na ni zapisa wylij na jej adres mail z treci:
<PRE>
    subscribe
    end
</PRE>

    <P>Dodatkowe informacje o listach mailowych dotyczcych PostgreSQL
	 mona znale na stronach WWW PostgreSQL pod adresem:</P>

    <BLOCKQUOTE>
      <A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A>
    </BLOCKQUOTE>

    <P>W sieci EFNet istnieje kana IRC <I>#PostgreSQL</I>. Ja, do
	 poczenia si z kanaem uywam Unixowego polecenia <CODE>irc -c
    '#PostgreSQL' "$USER" irc.phoenix.net.</CODE></P>

    <P>Lista firm oferujcych wsparcie na zasadach komercyjnych znajduje
	 si pod adresem: <A href= "http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P>

    <H4><A name="1.7">1.7</A>) Jaka jest ostatnia dostpna wersja?</H4>

    <P>Ostatnia dostpna wersja PostgreSQL to 7.4.1.</P>
    <P>Planujemy publikowanie kolejnych wersji co sze do omiu miesicy.</P>

    <H4><A name="1.8">1.8</A>) Jaka dokumentacja jest dostpna?</H4>

    <P>Kilka manuali, stron podcznika man, oraz kilka przykadw do
	 testowania s zaczone w samej dystrybucji. Znajduj si one w
	 katalogu <I>/doc</I>. Manual moe by take przegldany poprzez
	 strony www pod adresem <A href=
    "http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
	
    <P>Istniej take dwie ksiki dostpne online pod adresami
	 <A href=
    "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
    i <A href=
    "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
    Lista ksiek o PostgreSQL, ktre mona kupi znajduje si pod adresem
	 <A href=
    "http://techdocs.PostgreSQL.org/techdocs/bookreviews.php">
	 http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
    Zbir technicznych artykuw o PostgreSQL znajduje si pod adresem <A
    href=
    "http://techdocs.PostgreSQL.org">http://techdocs.postgresql.org/</A>.</P>

    <P><I>psql</I> posiada kilka wbudowanych polece \d, za pomoca ktrych
	 mona sprawdzi informacje dotyczce typw, operatorw, funkcji,
	 agregatw itd.</P>

    <P>Na naszej stronie mona znale duo wicej dokumentacji.</P>

    <H4><A name="1.9">1.9</A>) Gdzie mona znale informacj o znanych
	      bdach czy brakujcych rozwizanich?</H4>

    <P>PostgreSQL wspiera rozszerzony podzbir standardu <SMALL>SQL</SMALL>-92.
    Sprawd nasz list <A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
    aby znale informacj o znanych problemach, brakujcych
	 rozwizaniach czy przyszych planach.</P>

    <H4><A name="1.10">1.10</A>) Jak mog si nauczy
    <SMALL>SQL</SMALL>?</H4>

    <P>Ksika o PostgreSQL <A href=
    "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
    uczy <SMALL>SQL</SMALL>. Jest jeszcze inna ksizka o PostgreSQL
	 dostpna pod adresem: <A href=
    "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
    Dobry tutorial moesz znale pod adresem: <A href=
    "http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
    oraz <A href=
    "http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
    http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
    i <A href=
    "http://sqlcourse.com/">http://sqlcourse.com.</A></P>

    <P>Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition"
    pod adresem: <A href=
    "http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>

    <P>Wielu z naszych uytkownikw poleca <I>The Practical SQL Handbook</I>,
    Bowman, Judith S., et al., Addison-Wesley. Inni polecaj <I>The
    Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>

    <H4><A name="1.11">1.11</A>) Czy PostgreSQL ma rozwizany problem Y2K?</H4>

    <P>Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz
	 przed rokiem 2000 BC.</P>

    <H4><A name="1.12">1.12</A>) Jak mog si przyczy do grupy osb
	      bezporednio pracujcych nad rozwojem PostgreSQL?</H4>

    <P>Przede wszystkim cignij ostatnie dostpne rda i przeczytaj
	 dokumentacj przeznaczon dla developerw na naszej stronie www lub
	 dostpn take w rdach PostgreSQL. Nastpnie zapisz si na listy
	 mailowe <I>pgsql-hackers</I> i
    <I>pgsql-patches</I>. I na koniec, wysyaj nam wysokiej jakoci
	 patch'e na list pgsql-patches.</P>

    <P>Jest okoo 12 osb, ktre maj uprawnienia do commit'owania w
    <SMALL>CVS</SMALL> PostgreSQL'a. Kady z nich submitowa tak wiele
	 wysokiej jakoci patchy, e stao si niemoliwe dla obecnych
	 commiterw by z nimi na bieco, wic musielimy im ufa i mie
	 pewno, e ich poprawki s wysokiej jakoci.</P>

    <H4><A name="1.13">1.13</A>) Jak mog zgasza bdy?</H4>

    <P>Zajrzyj na stron <A href=
    "http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>, na
	 ktrej opisane s wskazwki jak zgasza informacje o bdach.</P>

    <P>Zajrzyj take na nasz ftp <A href=
    "ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>, aby
	 sprawdzi czy nie ma nowszych wersji PostgreSQL czy patchy.</P>

    <H4><A name="1.14">1.14</A>) Jak mona porwna PostgreSQL w stosunku
	      do innych <SMALL>DBMS</SMALL>?</H4>

    <P>Jest kilka sposobw oceny softwaru: moliwoci,
    wydajno, stabilno, wsparcie i cena.</P>

    <DL>
      <DT><B>Moliwoci</B></DT>

      <DD>PostgreSQL posiada moliwoci dostpne w duych, komercyjnych
		systemach <SMALL>DBMS</SMALL>, takie jak transakcje, podzapytania
		(subselects), triggery, widoki, klucze obce, referential integrity,
		oraz wyrafinowany system blokowania. Mamy take waciowci ktrych
		inni nie posiadaj, jak typy definiowane przez uytkownika,
		dziedziczenie, rules, multi-version concurrency control, ktra
		redukuje problemy z blokowaniem (lock contention).<BR>
      <BR>
      </DD>

      <DT><B>Wydajno</B></DT>

      <DD>Wydajno 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 jestemy szybsi przy wielu uytkownikach, skomplikowaych
		zapytaniach i duym obcieniu podczas. MySQL jest szybszy dla
		prostych SELECTw wykonywanych przez niewielu uytkownikw.
		Spowodowane jest to narzutem, ktry si pojawia przy transakcjach.
		Oczywicie MySQL nie ma wikszoci z rozwiza opisanych powyej
		w sekcji <I> Moliwoci </I>. PostgreSQL zosta stworzony z myl o
		stabilnoci, oraz szerokiej gamie moliwoci, ale mimo to staramy
		si w kadej wersji poprawia jego wydajno.
		Ciekawe porwnanie PostgreSQL i MySQL mona znale pod adresem <A href=
      "http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A>
		Dodatkowo, MySQL jest firm, ktra dystrybuuje jej produkty poprzez
		zasad Open Source i wymaga wykupienia licencji w przypadku
		tworzenia close-source software, co ie ma miejsca w przypadku
		PostgreSQL.<BR>
      <BR>
      </DD>
      <DT><B>Stabilno</B></DT>

      <DD>Zdajemy sobie spraw, e <SMALL>DBMS</SMALL> musi by stabilny,
		w przeciwnym wypadku jest bez wartoci. Staramy si publikowa kod
		stabilny, dobrze przetestowany, z minimum moliwych bdw. Kade
		wydanie poprzedza co najmniej miesic testw wersji beta. Patrzc na
		histori wyda PostgreSQL wida, e dostarczamy stabilne, dobrze
		sprawdzone wersje, ktre s gotowe do uycia w rodowisku
		produkcyjnym. Mylimy, e proces publikowania kolejnych wersji
		opracowany przez nas jest jednym z lepszych wrd innych twrcw
		oprogramowania bazodanowego.<BR>
      <BR>
      </DD>

      <DT><B>Wsparcie</B></DT>

      <DD>Dziki naszym listom mailowym masz dostp do duej liczby
		programistw i uytkownikw, ktrzy pomagaj rozwiza kady
		napotkany problem. Chocia nie moemy gwarantowa znalezienia
		rozwizania danego problemu, nie rnimy si w tym od innych
		komercyjnych systemw <SMALL>DBMS</SMALL>. Bezporedni kontakt z
		programistami, uytkownikami, dokumentacj i kodem rdowym
		sprawiaj, e wsparcie oferowane PostgreSQL niejednokrotnie jest
		lepsze ni w innych systemach <SMALL>DBMS</SMALL>. Istnieje take
		moliwo skorzystania z komercyjnego wsparcia dla tych, ktrych
		takiego rozwizania potrzebuj.
      (Sprawd <A href="#1.6">ten punkt FAQ</A>.)<BR>
      <BR>
      </DD>

      <DT><B>Cena</B></DT>

      <DD>Korzystanie z PostgreSQL jest darmowe, zarwno w przypadku
		komercyjnym jak i niekomercyjnym. Moesz korzysta z naszego kodu
		rdowego w Twoim produkcie bez adnych ogranicze, poza tymi
		wymienionymi w licencji BSD przytoczonej powyej.<BR>
      <BR>
      </DD>
    </DL>

    <H4><A name="1.15">1.15</A>) W jaki sposb mog wesprze finansowo
	     PostgreSQL?</H4>

    <P>PostgreSQL korzysta z najlepszej infrastruktury od samego pocztku
	 istnienia projektu, czyli roku 1996 kiedy rozpoczelimy prac. Wszystko 
	 to zawdziczamy Marc'owi Fournier'owi, ktry stworzy t infrastruktur 
	 i zarzdza ni od lat.</P>

    <P>Wysokiej jakoci infrastruktura jest bardzo wana dla kadego
	 projektu open-source. Zapobiega przerwom w rozwoju projektu i
	 jakimkolwiek przestojom.</P>

    <P>Oczywicie korzystanie z wysokiej jakoci infrastruktury nie jest
	 tanie. Istnieje wiele rnych miesicznych, czy jednorazowych
	 wydatkw, ktre trzeba ponosi aby wszystko dziaao jak naley.
	 Jeli Ty, bd Twoja firma moe wspomc finansowo rozwj PostgreSQL
	 odwied adres: <A href=
    "http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A>
 	 gdzie opisane jest jak to zrobi.</P>

    <P>Chocia na stronie wspomniana jest nazwa PostgreSQL Inc, "datki"
	 s przeznaczone jedynie na rozwj projektu PostgreSQL i nie s
	 przeznaczane na finansowanie jakiejkolwiek firmy. Jeli wolisz, 
	 moesz wysa czek na adres kontaktowy.</P>
    <HR>
	 Jeli moesz si pochwali udanymi wdroeniami PostgreSQL, prosimy
	 aby zgosi nam to na stronie: <A
	 href="http://advocacy.postgresql.org/">http://advocacy.postgresql.org</a>.

    <H2 align="center">User Client Questions</H2>

    <H4><A name="2.1">2.1</A>) Czy s jakie driwery <SMALL>ODBC</SMALL> dla
	     PostgreSQL?</H4>

    <P>Dostpne s dwa driwery <SMALL>ODBC</SMALL>: PsqlODBC
    i OpenLink <SMALL>ODBC</SMALL>.</P>

    <P>Moesz pobra PsqlODBC z adresu <A
	 href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A>
	 </P>
	 
    <P>OpenLink <SMALL>ODBC</SMALL> moe by pobrany z adresu: <A href=
    "http://www.openlinksw.com/">http://www.openlinksw.com</A>.
	 Wsppracuje ze standardowym oprogramowaniem klienckim <SMALL>ODBC</SMALL>
	 wic w ten sposb moesz korzysta z PostgreSQL <SMALL>ODBC</SMALL>
	 dostpnego na kadej pltaformie ktr wspiera (Win, Mac, Unix, VMS).</P>

    <P>Autorzy bd prawdopodobnie sprzedawa ten produkt osobom ktre
	 wymagaj komercyjnego wsparcia, ale wersja darmowa bdzie zawsze
	 dostpna. Wszystkie pytania moesz wysya na adres: <A href=
    "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>

    <H4><A name="2.2">2.2</A>) Jakie istniej narzdzia pozwalajce na dostp do
	      PostgreSQL przez www?</H4>

    <P>Dobry podrcznik dla pocztkujcych o dostpie do bazy danych
	 przez www moesz znale pod adresem:
    <A href="http://www.webreview.com">http://www.webreview.com</A></P>

    <P>Do integracji z www, wietnym rozwizaniem jest PHP. Moesz
	 znale wicej informacji na ten temat pod adresem
    <A href="http://www.php.net">http://www.php.net</A>.</P>

    <P>Wiele osb w przypadku skomplikowanych rozwiza uzywa Perl'a i
	 moduu CGI.pl lub mod_perl.</P>

    <H4><A name="2.3">2.3</A>)  Czy istnieje jakie GUI dla PostgreSQL?</H4>

    <P>Tak, istnieje kilka interfejsw graficznych dla PostgreSQL.
	 Wrd nich PgAccess (<A href="http://www.pgaccess.org">
	 http://www.pgaccess.org</A>), PgAdmin III (<A
	 href="http://www.pgadmin.org">http://www.pgadmin.org</A>), 
	 RHDB Admin (http://sources.redhat.com/rhdb/ ) oraz Rekall (
	http://www.thekompany.com/products/rekall/, komercyjny). Istnieje
	take PHPPgAdmin ( http://phppgadmin.sourceforge.net/ ), webowy
	interfejs dla PostgreSQL.
	</P>
	<P>
	Wicej informacji na ten temat znajduje si pod adresem See
	<A href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>.
	 
	 <H4><A name="2.4">2.4</A>) Za pomoc jakich jzykw programowania
	 mona si komunikowa z PostgreSQL?</H4>
	 
    <P>Najbardziej popularne jzyki posiiadaj wasny interfejs dla
	 PostgreSQL. Sprawd list rozszerze dla intersujcego Ciebie jzyka
	 programowania.</P>
	 
    <P>Ze rdami PostreSQL dystrubuowane s interfejsy dla
	 nastpujcych jzykw programowania:</P>


    <UL>
      <LI>C (libpq)</LI>

      <LI>Embedded C (ecpg)</LI>

      <LI>Java (jdbc)</LI>

      <LI>Python (PyGreSQL)</LI>

      <LI>TCL (libpgtcl)</LI>
    </UL>
	Inne interfejsy s dostpne pod adresem: 
	<A href="http://gborg.postgresql.org"> http://gborg.postgresql.org</A> w
	sekcji Drivers/Interfaces.
    <HR>
    <H2 align="center">Pytania dotyczce administracji</H2>

    <H4><A name="3.1">3.1</A>) Jak mog zainstalowa PostgreSQL w innej
	          lokalizacji ni <I>/usr/local/pgsql</I>?</H4>

    <P>Uyj opcji <I>--prefix</I> podczas uruchamiania skryptu
    <I>configure</I>.</P>

    <H4><A name="3.2">3.2</A>) Podczas startu <I>postmaster'a</I>,
	      otrzymuj komunikat o bdzie: <I>Bad System Call</I> lub "core dumped".
			Dlaczego?</H4>


    <P>Ten bd moe by wynikiem wielu problemw, ale na pocztek
	 sprawd czy masz zainstalowane rozszerzenia systemu V w jdrze
	 systemu. PostgreSQL wymaga do pracy zainstalowanej obsugi pamici
	 dzielonej i semaforw.</P>

    <H4><A name="3.3">3.3</A>) Podczas startu <I>postmaster'a</I>,
	      otrzymuj komunikat o bdzie: <I>IpcMemoryCreate</I>.
			Dlaczego?</H4>

    <P>Albo nie masz poprawnie skonfigurowanej obsugi pamici dzielonej
	 w jdrze systemu, albo musisz zwikszy jej dostpny rozmiar.
    Dokadna ilo jak potrzebujesz jest zalena od architektury systemu
	 na jakim pracujesz, jak duo buforw oraz jak duo procesw backendu
	 skonfigurowae dla <I>postmaster'a</I>. Dla wikszoci systemw, z
	 domyln liczb buforw i procesw potrzebujesz minimum w
	 przyblieniu 1MB. Zobacz  <A href=
    "http://www.postgresql.org/idocs/index.php?kernel-resources.html">PostgreSQL
    Administrator's Guide</A> gdzie szczegowo zostao opisane
	 wykorzystanie pamici dzielonej i semaforw.</P>

    <H4><A name="3.4">3.4</A>) Podczas startu <I>postmaster'a</I>,
	      otrzymuj komunikat o bdzie: <I>IpcSemaphoreCreate</I>.
			Dlaczego?</H4>
			
    <P>Jeli tre bdu brzmi: <I>IpcSemaphoreCreate: semget failed
	 (No space left on device)</I> oznacza to, e jdro systemu nie jest
	 skonfigurowane do obsugi wystarczajcej liczby semaforw.
	 Postgres wymaga jednego semafor'a na potencjalny jeden proces backend.
	 Tymczasowym rozwizaniem jest uruchomienie programu <I>postmaster</I>
	 z mniejsz  maksymaln liczb procesw backend.
	 Uyj opcji <I>-N</i> z parameterem mniejszym od domylnego - 32.   
	 Bardziej trwaym rozwizaniem jest zwikszenie parametrw
	 <SMALL>SEMMNS</SMALL> i <SMALL>SEMMNI</SMALL> jdra twojego systemu.</P>

	 <P>Niedziaajce semafory mog spowodowa niepoprawne zamknicie
	 systemu w czasie intensywnego korzystania z bazy.</P>
	 
	 <P>Jeli tre bdu jest inna, moe to oznacza, e obsuga semaforw 
	 nie zostaa wczona do jdra wcale. Zobacz PostgreSQL 
	 Administrator's Guide po bardziej szczegowe informacje o pamici 
	 dzielonej i semaforach.</P>

    <H4><A name="3.5">3.5</A>) W jaki sposb mog kontrolowa poczenia
	 z innych hostw?</H4>

    <P>Domylnie PostgreSQL pozwala jedynie na poczenia za pomoc
	 socketw Unixowych z lokalnego hosta. Inne hosty nie bd  mogy si
	 poczy z serwerem dopki nie zostanie dodana opcja <I>-i</I> do
	 <I>postmaster'a</I>,
    <B>oraz</B> nie umoliwi si autoryzacji na podstawie adresu hostw
	 modyfikujc odpowiednio plik
    <I>$PGDATA/pg_hba.conf</I>. To zmiany pozwol na poczenia TCP/IP.</P>

    <H4><A name="3.6">3.6</A>) Jak powinienem skonfigurowa system baz
	      danych aby uzyska lepsz wydajno?</H4>

    <P>Indeksy bez wtpienia mog przyspieszy wykonywanie zapyta.
    Polecenie <SMALL>EXPLAIN</SMALL> pozwala zobaczy jak PostgreSQL
	 interpretuje Twoje zapytanie i ktre indeksy s uywane.</P>

    <P>Jeli wykonujesz bardzo duo <SMALL>INSERTw</SMALL>, moe warto
	 je wykona za pomoc jednego duego pliku uywajc polecenia
	<SMALL>COPY</SMALL>. Jest to duo szybsze ni pojedyncze
    <SMALL>INSERTy.</SMALL> Po drugie polecenia SQL nie zawarte w bloku
	 okrelajcym transakcj - <SMALL>BEGIN WORK/COMMIT</SMALL>, s
	 traktowane jako pojedyncza transakcja. Rozwa wykonanie kilku
	 polece/zda SQL w jednym bloku transakcji. To redukuje narzut
	 nakadany przez transakcj. Przy duych zmianach w danych, warto
	 usun i stworzy na nowo indeksy.</P>

    <P>Jest kilka opcji pozwalajcych na poprawienie wydajnoci.
	 Moesz wyczy <I>fsync()</I> poprzez uruchomienie <I>postmaster'a</I>
	 z opcjami <I>-o -F</I>. To spowoduje, e
    <I>fsync()</I> nie bdzie zrzuca danych na dysk po kadej
	 transakcji.</P>

    <P>Moesz take uruchomi <I>postmaster'a</I> z opcj <I>-B</I>
	 aby zwikszy wielko pamici dzielonej uywanej przez procesy
	 backendw. Jeli ustawisz t warto zbyt wysoko i przekroczysz limity
	 ustawione przez kernel na pami dzielon, <I>postmaster</I>  moe si
	 nie uruchomi. Kady bufor zajmuje 8K a domylna ilo buforw to 64.</P>

    <P>Moesz take uy opcji <I>-S</I> dla backendu aby zwikszy
	 maksymaln warto pamici uywan przez proces backendu podczas
	 sortowania. Opcja <I>-S</I> jest ustawiana wartoci podawan w
	 kilobajtach, domylna warto to 512K.</P>

    <P>Moesz take uy polecenia <SMALL>CLUSTER</SMALL> aby pogrupowa
	 dane w tabelach wg indeksu. Zobacz opis polecenia <SMALL>CLUSTER</SMALL>
    w manualu eby dowiedzie si wicej.</P>

    <H4><A name="3.7">3.7</A>) Jakie s moliwoci wyszukiwania
	 bdw?</H4>

    <P>PostgreSQL ma kilka moliwoci na raportowanie informacji o
	 jego statusie, ktre mog by przydatne przy debugowaniu procesu.</P>

    <P>Przede wszystkim uruchom skrypt <I>configure</I> z opcj
	 --enable-cassert, wiele funkcji <I>assert()</I> monitoruj postp
	 procesu backend i zatrzymuj program kiedy wydarzy si co
	 nieoczekiwanego.</P>

    <P>Zarwno <I>postmaster</I> jak i <I>postgres</I> maj kilka opcji
	 do debugowania. Za kadym razem kiedy uruchamiasz <I>postmaster'a</I>,
    upewnij si, e wysyasz standardowe wyjcie i error do pliku z
	 logami, np. w ten sposb:</P>
<PRE>
    cd /usr/local/pgsql
    ./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
</PRE>

    <P>To utworzy plik server.log w gwnym katalogu PostgreSQL.
	 Ten plik zawiera poyteczne informacje o problemach i bdach, ktre
	 wydarzyy si podczas pracy serwera. <I>Postmaster</I> posiada opcj
	 <I>-d</I>, ktra pozwala na raportowanie bardzo szczeglowych
	 informacji. Do opcji <I>-d</I> podajemy liczb, ktra okrela
	 szczegowo wysyanych informacji. Musisz mie wiadomo, e
	 wysoki poziom logowania bdzie powodowa tworzenie bardzo duzych
	 plikw z logami.</P>

    <P>Jeli <I>postmaster</I> nie zosta uruchomiony, moesz uruchomi
    <I>postgres'owy</I> backend z linii polece, i uruchomi Twoje
	 polecenie <SMALL>SQL</SMALL> bezporednio na nim.
	 Taki sposb jest polecany <B>jedynie</B> w przypadku debugowania.
	 Zwr uwag, e w tym wypadku zapytanie koczy znak nowej linii a nie
	 rednik. Jeli skompilowae z opcjami debugowania mozesz uy
	 debuggera aby sprawdzi co si dzieje. Poniew backend nie zosta
	 uruchomiony przez <I>postmaster'a</I>, nie dziaa w identycznym
	 rodowisku, co oznacza e powtrzenie warunkw w jakich wystpiy
	 problemy moze by problemem.</P>

    <P>Jeli <I>postmaster</I> dziaa, uruchom <I>psql</I> w jednym z
	 okien, nastpnie znajd <SMALL>PID</SMALL> procesu <I>postgres</I>
    uywanego przez <I>psql</I>. Uyj debuggera aby do
	 <SMALL>PID'u</SMALL> <I>postgres'a</I>. Moesz ustawia puapki
	 (breakpoints) w debuggerze i wykonywa zapytania z <I>psql</I>. 
	 Jeli debugujesz uruchamianie <I>postgres'a</I>, moesz ustawi zmienn
	 PGOPTIONS="-W n", nastpnie uruchomi <I>psql</I>. 
	 Opcja ta pozwoli spowolni uruchomienie na	 
	 <I>n</I> sekund aby mg si poczy z procesem za pomoc
	 debugera, ustawi jakiekolwiek puapki i kontynuowa proces
	 uruchamiania.</P>

    <P><I>postgres</I> moe by uruchamiany z opcjami <I>-s, -A</I> i
	 <I>-t</I>, ktre mog by bardzo przydatne przy debuggowaniu i ocenie
	 wydajnoci.</P>

    <P>Moesz take skompilowa z profilingiem aby zobaczy jakie funkcje
	 ile czasu wykonuj si. Pliki profilowane dla backendu zostan
	 umieszczone w katalogu
    <I>pgsql/data/base/dbname</I>. Pliki profilu klienta zostan
	 umieszczone w biecym katalogu klienta. Linux wymaga aby kompilowa
	 z opcj <I>-DLINUX_PROFILE</I> aby profilowanie odbywao si
	 poprawnie.</P>

    <H4><A name="3.8">3.8</A>) Skd si bierze komunikat: <I>"Sorry, too
	 many clients"</I> podczas prby poczenia si z baz danych?</H4>

    <P>Musisz zwikszy limit iloci jednoczesnych procesw bacekendu
	 dla procesu <I>postmaster'a</I>.</P>

    <P>Domylny limit to 32 procesy. Moesz go zwikszy przez restart
    <I>postmaster</I> z odpowiedni wartoci ustawian opcj <I>-N</I> w
	 pliku <I>postgresql.conf</I>.</P>

    <P>We pod uwag, e jeli zwikszysz warto podan w opcji
	 <I>-N</I> na wicej ni 32 musisz take zwikszy warto w opcji
    <I>-B</I> ponad jej domyln warto 64; warto <I>-B</I> musi by
	 co najmniej dwa razy wiksza od wartoci podanej w opcji 
    <I>-N</I>, a prawdopodobnie powinna by w rzeczywistoci jeszcze
	 wiksza dla optymalnej wydajnoci.
    Dla duej liczby procesw backendu na pewno zauwaysz, e trzeba
	 zwikszy rne parametry jdra Unixa. Rzeczy, ktre powniene
	 sprawdzi to maksymalna liczba blokw pamici dzielonej, 
	 <SMALL>SHMMAX;</SMALL> maksymalna liczba semaforw, <SMALL>SEMMNS</SMALL>
	 oraz <SMALL>SEMMNI;</SMALL> 
    maksymalna liczba procesw, <SMALL>NPROC;</SMALL> maksymalna liczba
	 procesw na jednego uytkownika, <SMALL>MAXUPRC;</SMALL> i maksymalna
	 liczba otwartych plikw, <SMALL>NFILE</SMALL> oraz
    <SMALL>NINODE.</SMALL> Powd dla ktrego PostgreSQL ma limit na
	 maksymaln liczb procesw backendu to obawa o wyczerpanie zasobw
	 systemu.</P>

    <H4><A name="3.9">3.9</A>)  Jakie pliki znajduj si w <I>pg_temp</I>?</H4>

    <P>Katalog ten zawiera tymczasowe pliki utworzone przez executor. Dla 
	 przykadu, jeli jaka operacja sortowania jest wymagana do wykonania
    <SMALL>ORDER BY,</SMALL> a samo sortowanie wymaga wicej  miejsca ni
	 parametr backendu
    <I>-S</I> ustawi do wykorzystania, wtedy tymczasowe pliki s uywane
	 do przechowywania tych danych.</P>

    <P>Pliki tymczasowe powinny by usunite automatycznie, ale mogo si
	 to nie sta jeli proces backendu w midzyczasie nie zakoczy si
	 poprawnie podczas operacji sortowania. Jeli w danym momencie nie
	 dziaaj adne procesy backendw mozesz spokojnie usun pliki
    pg_tempNNN.NN.</P>

	 <H4><A name="3.9">3.9</A>) Dlaczego konieczne jest przy upgradzie
	      PostgreSQL korzystanie ze skryptw dump i restore?</H4>
	 <P>
	 Twrcy PostgreSQL dokonuj jedynie maych zmian pomidzy maymi
	 upgradami wersji, np z 7.2 do 7.2.1, wtedy upgrade nie wymaga
	 korzystania z dump i restore. Przy wikszych zmianach, np. z wersji
	 7.2 do 7.3, czsto zmianymaj wpyw na format przechowywanych danych.
	 Zmiany te s na tyle skomplikowane, e nie utrzymujemy zgodoci z
	 poprzednimi wersjami PostgreSQL. dump pozwala na wydostanie danych w
	 takiej postaci, w ktrej atwe jest ich zaimportowanie do nowszych
	 wersji bez kopotu.
	 </P>
	 <P>
	 W wydaniach gdzie zmiany nie dotycz formatu danych na dysku, mona
	 wykorzysta skryptu pg_upgrade, do upgradu bez uycia dump/restore.
	 Dokumentacja do danego wydania zawiera informacj czy moliwe jest
	 uycie pg_upgrade.
	 </P>
    <HR>

    <H2 align="center">Pytania dotyczce uywania</H2>

    <H4><A name="4.1">4.1</A>) Jaka jest rnica pomidzy kursorami
	     binarnymi (binary cursors) i zwykymi kursorami (normal
		  cursors)?</H4>

    <P>Zobacz w manualu opis polecenia <SMALL>DECLARE</SMALL>.</P>

    <H4><A name="4.2">4.2</A>) Jak mog pobra za pomoc
	 <SMALL>SELECT</SMALL> jedynie kilka pierwszych wynikw
	 zapytania?</H4>
	 
    <P>Zobacz w manualu opis polecenia <SMALL>FETCH</SMALL> lub uyj
    polecenia <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>

    <P>Nawet jeli chesz pobra kilka pierwszych rzdw z wyniku
	 zapytania, cae zapytanie musi zosta wykonane. Byc moe powiniene
	 skorzysta z polecenia <SMALL>ORDER BY.</SMALL>
	 Jeli istnieje indeks ktry odpowiada polom okrelonym przez
	 <SMALL>ORDER BY</SMALL>, PostgreSQL moe wykorzysta jedynie kilka
	 pierwszych rzdw, by moe bdzie konieczno wykonania zapytania do
	 momentu a zostan znalezione podane wyniki.</P>
	 <P>
	 Aby otrzyma losowy rzd, uyj:
	 <PRE>
    SELECT col
    FROM tab
    ORDER BY random()
    LIMIT 1;
	 </PRE>
	</P>

    <H4><A name="4.3">4.3</A>) Jak mog uzyska list wszystkich tabel
	 czy  innych rzeczy pod <I>psql</I>?</H4>
	 
    <P>Moesz sprawdzi zawarto rde <I>psql</I>, a konkretnie plik
    <I>pgsql/src/bin/psql/describe.c</I>. Zawiera on polecenia
    <SMALL>SQL</SMALL> ktre generuja wyniki komend z backslashem.
    Moesz take uruchomi <I>psql</I> z opcj
    <I>-E</I> wtedy po wykonaniu polecenia z backslashem wywietlane
	 bdzie zapytanie, ktre w rzeczywistoci jest wykonywane.</P>

    <H4><A name="4.4">4.4</A>) Jak usun kolumn z tabeli lub zmieni
	 jej typ?</H4>

    <P>DROP COLUMNT zostao dodane w wersji 7.3 przy poleceniu ALTER
	 TABLE DROP COLUMN. We wczeiejszych wersjach moesz zrobi tak:
	 </P>
<PRE>
	 BEGIN;
	 LOCAL TABLE old_table;
    SELECT ...  -- wybierz wszystkie kolumny poza t jedn ktrej chcesz si pozby
    INTO TABLE new_table
    FROM old_table;
    DROP TABLE old_table;
    ALTER TABLE new_table RENAME TO old_table;
</PRE>
	<P>
	Aby zmieni typ danych kolumny moesz zrobi tak:
	</P>
	<PRE>
   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;
	</PRE>
	</P>

    <H4><A name="4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rzdu,
	      tabeli i bazy danych?</H4>
	 
    <P>Oto wszystkie ograniczenia:</P>
<PRE>
    Maksymalny rozmiar dla bazdy danych?     nieograniczony ( istniej
	 bazy danych o wielkoci 32 TB databases )
    Maksymalny rozmiar dla tabeli?           32 TB
    Maksymalny rozmiar dla rzdu?            1.6 TB
    Maksymalny rozmiar pola?                 1 GB
    Maksymalna liczba rzdw w tabeli?       nieograniczona
    Maksymalna liczba kolumn w tabeli?       250-1600 w zaleonoci od typw kolumn
    Makasymalna liczba indeksw na tabeli?   nieograniczona
</PRE>

	Oczywicie "nieograniczony" nie jest prawd tak do koca, istniej
	ograniczenia wynikajce z dostpnego miejsca na dysku, pamici/swapa.
	Kiedy wielkoci te bd bardzo due moe odbi si to na wydajnoci.

    <P>Maksymalny rozmiar tabeli, czyli 32 TB nie wymaga od systemu
	 operacyjnego wsparcia dla duych plikw. Due tabele s przechowywane
	 jako pliki o rozmiarze 1 GB, wic ograniczenia co do wielkoci plikw
	 narzucone przez system plikw nie s istotne.</P>

    <P>Masymalny rozmiar tabeli i maksymalna liczba kolumn moe by
	 zwikszona jeli zwikszymy domylny rozmiar bloku (block size) do
	 32k.</P>

    <H4><A name="4.6">4.6</A>) Jak duo miejsca w bazie danych jest
	      konieczne aby przechowywa dane ze zwyczajnego pliku
			tekstowego?</H4>

    <P>Baza danych PostgreSQL moe potrzebowa do piciu razy wicej
	 miejsca na przechowywanie danych z plikw tekstowych ni ich
	 objto.</P>

    <P>Jako przykad moemy rozway plik skadajcy si z 100,000 linii
	 zbudowanych z liczby cakowitej oraz opisu tekstowego w kadej.
	 Zamy, e rednio kady acuch tekstu w linii zajmuje 20
	 bajtw. Cay plik powinien zajmowa ok. 2.8 MB. Rozmiar pliku bazy danych w
	 PostgreSQL zawierajcego te dane mozna oszacowa na okoo 6.4MB:</P>

<PRE>
    36 bajtw: nagwek kadego rzdu w przyblieniu)
    24 bajty:  jedno pole int i jedno pole typu text
   + 4 bajty:  wkanik na stronie do krotki
   --------------------------------------------------
    64 bajty w jednym rzdzie

	Strona danych w PostgreSQL zajmuje 8192 bajtw (8 KB), wic:

   8192 bajtw na stron
   ---------------------   =  128 rzdw na jedn strone w bazie (zaokrglone w d)
     64 bajtw na rzd

   100000 rzdw danych
   -----------------------  =  782 stron w bazie danych (zaokrglone w gr)
      128 rzdw na stron

782 stron w bazie * 8192 bajtw na stron  =  6,406,144 bajtw (6.4 MB)
</PRE>

    <P>Indeksy nie powoduj duego narzutu na zajmowane miejsce, 
	 ale zawieraj pewne dane,
	 wic w pewnych przypadkach moga by cakiem due.</P>
	 <P> NULLe s przechowywane jako mapy bitowe, wic uywaj bardzo mao
	 miejsca.
	 </P>

    <H4><A name="4.7">4.7</A>) Jak mog sprawdzi jakie tabele, klucze,
	      bazy danych i uytkownicy s utworzeni?</H4>
	 
    <P><I>psql</I> ma cakiem du ilo polece z backslashem aby
	 wydoby takie informacje. Wprowad \? aby zobaczy ich spis. Istniej
	 take tablice systemowe rozpoczynajce si od <i>pg_</i>, zawierajce
	 interesujce Ciebie informacje. Wykonanie <i>psql -l</i> pokae spis
	 wszystkich baz danych.</P>

    <P>Obejrzyj take plik <I>pgsql/src/tutorial/syscat.source</I>.
	 Zawiera on wiele z zapyta typu <SMALL>SELECT</SMALL>, ktre s
	 potrzebne aby wydoby informacje z tablic systemowych.</P>

    <H4><A name="4.8">4.8</A>) Moje zapytania s wolne lub nie uywaj
	      kluczy. Dlaczego?</H4>
			
	Indeksy nie s uywane automatycznie przez kde z zapyta. Ideksy s
	uywane jedynie gdy tabela jest odpowiedniego rozmiaru, wikszego ni
	wymagany minimalny, a zapytanie wybiera jedynie may procent
	zawartoci tabeli. Wynika to z tego, e losowy dostep do dysku
	powodowany przez ideksowane poszukiwanie jest czasami wolniejsze ni
	poszukiwanie sekwencyjne bez uycia kluczy.
	
    <P>eby zdecydowa czy indeks powinien byc uywany, PostgreSQL musi
	 mie statystyki dotyczce danej tabeli. S one gromadzone przez
	 uycie polecenia <SMALL>VACUUM ANALYZE</SMALL>, lub poprostu
	 <SMALL>ANALYZE</SMALL>. uywajc statystyk, optymalizator wie ile
	 rzdw jest w tabeli i moe lepiej okreli czy indeksy powinny by
	 uyte. Statystyki mog by take pomocne w okreleniu najlepszej
	 kolejnoci wykonania zczenia (join) i jego sposobu. Gromadzenie
	 statystyk powinno si odbywa w okrelonych interwaach czasu
	 poniewa dane w tabelach zmieniaj si.</P>

    <P>Indeksy nie s zazwyczaj uywane przez <SMALL>ORDER BY</SMALL> lub
	 przy wykonywaniu zcze (join). Sekwencyjne przeszukiwanie po ktrym
	 nastpuje sortowanie jest zazwyczaj szybsze ni wyszukiwanie za
	 pomoc indeksu na duej tabeli.</P>
	 Jakkolwiek <SMALL>LIMIT</SMALL> w poczeniu z <SMALL>ORDER BY</SMALL>
	czsto bdzie wykorzystywa indeksy poniewa jedynie maa cz z
	tabeli jest zwracana. W rzeczywistoci, chocia MAX() i MIN() nie
	uywaj indeksw, moliwe jest aby zwrci te wartoci uywajc
	indeksw poprzez uycie ORDER BY i LIMIT.
	</P>
	<PRE>
    SELECT col
    FROM tab
    ORDER BY col [ DESC ]
    LIMIT 1;					 
	</PRE>
	<P>
	Jeli uwaasz, e optimizer myli si wybierajc sequential scan, uyj
	SET enable_seqscan TO 'off' i uruchom testy aby sprawdzi czy wtym
	wypadku zapytanie bdzie szybciej wykonywane.

    <P>Kiedy uywa si operatorw dopasujcych takich jak
	 <SMALL>LIKE</SMALL> lub <I>~</I>, indeksy bd uywane jedynie w
	 pewnych wypadkach:</P>
	 <UL>
	 <LI>Pocztek wyszukiwania jest oparty na pocztku acucha tekstu.
	 <UL>
	 	<LI>wzorce <SMALL>LIKE</SMALL> nie mog si zaczyna <I>%</I>
		<LI>dopasowania operatorem <I>~</I> (dopasowania regularne)
		musz si zaczyna znakiem specjalnym <I>^</I>.</P>
	 </UL>
	 <LI>Pocztek wyszukiwania nie moe si zaczyna od klas znakw, np.
	 [a-e].
	 <LI>Case-insensitive searches such as ILIKE and ~* do not utilise
	 indexes. Instead, use functional indexes, which are described in
	 section 4.12.
	 <LI>Standardowe locale C musi by uzyte przy wykonywaniu initdb
	 </UL>
    <H4><A name="4.9">4.9</A>) Jak mog sprawdzi w jakis sposb "query
	 optimizer" wykonuje moje zapytanie?</H4>

    <P>Zobacz manual dla polecenia <SMALL>EXPLAIN</SMALL>.</P>

    <H4><A name="4.10">4.10</A>) Co to jest "R-tree index"?</H4>

    <P>Indeks R-tree jest uywany do indeksowania danych przestrzennych.
	 Indeks hasuujcy nie nadaje si do wyszukiwania odlegoci.
    Natomiast indeks typu B-tree moe wyszukiwa odlegloci jedynie w
	 jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z
	 przestrzeniami wielo-wymiarowymi. Dla przykadu, jeli zostanie
	 zaoony indeks typu R-tree na polu typu <I>point</I>, system moe
	 bardziej wydajnie odpowiada na zapytania typu
    "select all points within a bounding rectangle."</P>

    <P>rdowym dokumentem opisujcym oryginalnie projektowanie R-tree
	 indeksw jest:</P>

    <P>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.</P>

    <P>Ten dokument moesz znale take w pracy Stonebraker'a "Readings in
    Database Systems".</P>

    <P>Wbudowane indeksy R-trees radz sobie w wielobokami i boxes.
	 Teoretycznie, indeksy R-tree mog by rozszerzone o moliwoci
	 indeksowania w wicej wymiarowych przestrzeniach. W praktyce,
	 rozbudowa indeksw R-tree wymaga troch pracy, a w tej chwili nie
	 dysponujemy jakkolwiek dokumentacj jak to zrobi.</P>

    <H4><A name="4.11">4.11</A>) Co to jest "Genetic Query
	 Optimizer"?</H4>

    <P>Modu <SMALL>GEQO</SMALL> ma za zadanie przyspieszenie
	 optymalizacji zapyta czc wiele tabel za pomoc algorytmw
	 genetycznych (Genetic Algorithm (GA)). Pozwala na uywanie duych
	 zapyta czcych tabele (join queries) bez wykorzystywania
	 zasoboernego wyszukiwania.</P>

    <H4><A name="4.12">4.12</A>) Jak mog uywa wyrae regularnych w
	      zapytaniach i zapyta case-insensitive w wyraeniach
			regularnych?
			     Jak korzysta z indeksw dla zapyta case-insensitive?</H4>

    <P>Operator <I>~</I> moze by wykorzystywany do wyszukiwania za
	 pomoc wyrae regularnych, a 
    <I>~*</I> do wyszukiwania case-insensitive z wyraeniami
	 regularnymi. 
    Wariant case-insensitive dla <SMALL>LIKE</SMALL> zosta nazwany
    <SMALL>ILIKE</SMALL>.</P>

    <P>Porwnania case-insensitive s zazwyczaj wykonywane w nastpujcy
	 sposb:</P>
<PRE>
    SELECT *
    FROM tab
    WHERE lower(col) = 'abc'
   
</PRE>
	W tym wypadku standardowe indeksy nie bd uywane. Moesz utworzy
	indeks funkcyjny, poprzez:
<PRE>
    CREATE INDEX tabindex on tab (lower(col));
   
</PRE>

    <H4><A name="4.13">4.13</A>) Jak sprawdzi w zapytaniu czy pole ma
	      warto <SMALL>NULL</SMALL>?</H4>

    <P>Moesz to sprawdzi, testujc warto kolumny warunkiem 
	 <SMALL>IS NULL</SMALL> albo <SMALL>IS NOT NULL</SMALL>.</P>

    <H4><A name="4.14">4.14</A>) Jaka jest rnica pomidzy rnymi
	 typami tekstowymi (character types)?</H4>
<PRE>
Type            Nazwa wewntrzna   Uwagi
--------------------------------------------------
VARCHAR(n)      varchar            rozmiar okrela maksymaln dugo, nie ma tutaj wypeniania
CHAR(n)         bpchar             wypeniane pustymi znakami do podanej dugoci
TEXT            text               bez limitu na dugo acucha
BYTEA           bytea              zmiennej dugoci tablica bajtw (null-byte safe)
"char"          char            	  1 znak
</PRE>

    <P>Jeli bdziesz przeglda katalogi systemowe lub komunikaty o
	 bdach czsto spotkasz si z podanymi powyej nazwami
	 wewntrznymi.</P>

    <P>Pierwsze cztery typy powyej to tzw typy "varlena" (np. pierwsze
	 cztery bajty na dysku to dugo, po ktrych jest data). Dlatego
	 faktyczna dugoc takiego acucha jest troch wiksza ni
	 zadeklarowany rozmiar. Te typy take podlegaj kompresji lub mog by
	 przechowywane out-of-line jako <SMALL>TOAST</SMALL>, wic faktyczne
	 zuycie miejsca na dysku moe by mniejsze ni oczekiwane.</P>

	 <SMALL>VARCHAR(n)</SMALL> jest
	 najodpowiedniejszy do przechowywania acuchw o rnej dugoci
	 ale okrela on maksymaln jego dugo. 
	 
	 <SMALL>TEXT</SMALL> jest najlepszy dla acuchw o dowolnej dugoci,
	 nie przekraczajcej 1GB.</P>

	<P>
	<SMALL>CHAR(n)</SMALL> jast najlepszym typem do przechowywania
	 acuchw o tej samej dugoci. CHAR(n) wypenia dane do adanej
	 dugoci, podczas gdy VARCHAR(n) przechowuje jedynie dane
	 dostarczone.
	
	<SMALL>BYTEA</SMALL> suy do przechowywania danych binarnych,
	 w szczeglnoci dla danych zawierajcych <SMALL>NULL</SMALL> bajty.
	 Wszystkie typy opisane tutaj maja podobne charakterystyki jeli
	 chodzi o wydajno.</P>

    <H4><A name="4.15.1">4.15.1</A>) Jak mog utworzy pole ktre samo
	      zwiksza swoj warto?</H4>

    <P>PostgreSQL ma zaimplementowany typ <SMALL>SERIAL</SMALL>.
	 Automatycznie tworzy sekwencj i indeks na tej kolumnie. Dla
	 przykladu:</P>
<PRE>
    CREATE TABLE person ( 
        id   SERIAL, 
        name TEXT 
    );
</PRE>
    zostanie automatycznie prztumaczone na:
<PRE>
    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 );
</PRE>
    Wicej informacji o sekwencjach znajdziesz w manualu o
	 <I>create_sequence</I>. Moesz take uy  pola <I>OID</I> jako
	 unikalnej wartoci dla kadego rzdu danych. Jeli bdziesz
	 potrzebowa z backupowa dane robic dump bazy i odtworzy j, musisz
	 uyc <I>pg_dump</I> z opcj <I>-o</I> lub polecenia <SMALL>COPY
	     WITH OIDS</SMALL> aby zachowa <SMALL>OIDy</SMALL>.
	 
    <H4><A name="4.15.2">4.15.2</A>) Jak pobra warto pola typu
	     <SMALL>SERIAL</SMALL> po wykonaniu insert'u?</H4>

    <P>Jednym z podej jest pobranie kolejnej wartoci typu 
	 <SMALL>SERIAL</SMALL> z sekwencji za pomoc funkcji <I>nextval()</I>
    <I>zanim</I> zostanie wstawiona, a pniej naley jej uy. Uywajc
	 przykadu z tabeli z punktu <A href="#4.15.1">4.15.1</A>, moe to
	 wyglda w Perlu na przykad w ten sposb:</P>

<PRE>
    new_id = output of "SELECT nextval('person_id_seq')"
    INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
</PRE>
	Bdziesz mia wtedy t warto przechowan w zmiennej 
    <CODE>new_id</CODE> do uytku w innych zapytaniach (np. jako klucz
	 obcy do tabeli <CODE>person</CODE>). Warto zwrci uwag, e nazwa
	 automatycznie utworzonej sekwencji
    <SMALL>SEQUENCE</SMALL> bdzie nastpujca:
    &lt;<I>tabela</I>&gt;_&lt;<I>kolumnatypuserial</I>&gt;_<I>seq</I>,
	 gdzie 
    <I>tabela</I> i <I>kolumnatypuserial</I> s nazwami Twojej tabeli i
	 Twojej kolumny typu <SMALL>SERIAL</SMALL>. 

    <P>Inne rozwizanie to uycie funkcji <I>currval</I>() na pola typu
    <SMALL>SERIAL</SMALL> po dodaniu nowej wartoci do rzdu zawierajcego
	 kolumn typu <SMALL>SERIAL</SMALL> z wstawion domylnie wartoci,
	 np.</P>
<PRE>
    INSERT INTO person (name) VALUES ('Blaise Pascal');
    new_id = output of "SELECT currval('person_id_seq')";
</PRE>
	Ostatecznie moesz uy <A href="#4.16"><SMALL>OID</SMALL></A>
	zwracanej po wykonaniu <SMALL>INSERT</SMALL>, chocia to jest najmniej
	przenone rozwizanie.
   W Perlu, wykorzystujc bibliotek DBI z moduem Edmunda Mergla
	DBD::Pg, oid jest dostpny poprzez <I>$sth-&gt;{pg_oid_status}</I> po
	wykonaniu <I>$sth-&gt;execute()</I>. 

    <H4><A name="4.15.3">4.15.3</A>) Czy uycie <I>currval()</I> i
	     <I>nextval()</I> nie doprowadzi do race condition z innymi
		      uytkownikami?</H4>

    <P>Nie. currval() zwraca biec warto przypisan przez Twj
	 backend, a nie przez wszystkich uytkownikw.</P>

    <H4><A name="4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie s
	      ponownie uywane przy przerwaniu transakcji?
	    Skd si bior luki w numerowaniu kolumny tabeli
				     sekwancjami/SERIALem?</H4>

    <P>Aby poprawi zbieno (concurrency), wartoci sekwencji s
	 podawane dziaajcym transakcjom kiedy tego potrzebuj i nie s
	 blokowane dopki transakcja si nie zakoczy. To spowoduje przerwy w
	 numerowaniu z przerwanych transakcji.</P>

    <H4><A name="4.16">4.16</A>) Co to jest <SMALL>OID</SMALL>? Co to
	 jest <SMALL>TID</SMALL>?</H4>

    <P><SMALL>OID</SMALL> s PostgreSQL'owym rozwizaniem problemu
	 unikalnych numerw rzdw. Kady rzd tworzony przez PostgreSQL
	 otrzymuje unikalny <SMALL>OID</SMALL>. Wszystkie <SMALL>OID</SMALL>y
	 generowane podczas procesu uruchamianego przez skrypt
    <I>initdb</I> maj mniejsz warto ni 16384 (na podstawie pliku
    <I>backend/access/transam.h</I>). Wszystkie 
    <SMALL>OID</SMALL>y tworzone przez uytkownika sa rwne lub wiksze
	 podanej wczeniej wartoci. Domylnie
    wszystkie <SMALL>OID</SMALL>y s unikalne nie tylko w pojedyczej
	 tabeli czy bazie danych ale w caej instalacji PostgreSQL.</P>

    <P>PostgreSQL uywa <SMALL>OIDw</SMALL> w swoim wewntrznym systemie
	 tabel, aby mona byo je czy.
    Te <SMALL>OIDy</SMALL> mog byc uywane aby identyfikowac rzdy w
	 tabelach i wykorzystywa je w zczeniach tych tabel. Zaleca si aby
	 uywa typu <SMALL>OID</SMALL> aby przechowywa wartoci
    <SMALL>OID</SMALL>. Moesz utworzy indeks na polu 
    <SMALL>OID</SMALL> aby dostp do niego by szybszy.</P>

    <P><SMALL>OID</SMALL> s przypisane do wszystkich rzdw z jednego
	 gwnego miejsca i uywane sa przez wszystkie bazy danych. Jeli
	 chciaby zmieni <SMALL>OID</SMALL> na co innego, lub jeli
	 chciaby zrobi kopi tabeli, z orginalnymi <SMALL>OIDami</SMALL>
	 nie ma adnego przeciwwskazania aby to zrobi:</P>
	 
<PRE>
        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';
<!--
    CREATE TABLE new_table (mycol int);
    INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
-->
</PRE>

    <P><SMALL>OIDy</SMALL> s przechowywane jako cztero-bajtowe liczby
	 cakowite i skocz si po osigniciu czterech miliardw. Nikt jak
	 dotd nie zgosi aby co takiego si stalo, ale mamy zamiar pozby
	 si tego ograniczenia zanim kto to zgosi.</P>

    <P><SMALL>TID</SMALL> s uywane aby zidentyfikowa konkretne rzdy z
	 blokami i wartoci ofsetw. <SMALL>TIDy</SMALL> zmieniaj si wraz
	 ze zmianami rzdw. Sa uywane przez indeksy, aby wskazywa do
	 fizycznych rzdw.</P>

    <H4><A name="4.17">4.17</A>) Jakie jest znaczenie niektrych terminw
	 w PostgreSQL?</H4>

    <P>W czci kodu rdowego i starszej dokumentacji uywamy terminw,
	 ktre maj bardziej oglne znaczenie. Oto niektre z nich:</P>

    <UL>
      <LI>table, relation, class</LI>

      <LI>row, record, tuple</LI>

      <LI>column, field, attribute</LI>

      <LI>retrieve, select</LI>

      <LI>replace, update</LI>

      <LI>append, insert</LI>

      <LI><SMALL>OID</SMALL>, serial value</LI>

      <LI>portal, cursor</LI>

      <LI>range variable, table name, table alias</LI>
    </UL>

    <P>List terminw zwizanych z bazami danych moesz znale pod tym
	 adresem:<A
	 href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A>.

    <H4><A name="4.18">4.18</A>) Skd bierze si ten bd <I>"ERROR:
	 Memory exhausted in AllocSetAlloc()"</I>?</H4>

    <P>
	 Prawdopodobnie wyczerpaa Ci si pami wirtualna (virtual memory) 
	 w systemie lub Twj kernel ma zbyt nisko
	 ustawione limity dla pewnych zasobw. Sprbuj wykona nastpujce
	 polecenia zanim uruchomisz <I>postmaster'a</I>:</P>
<PRE>
    ulimit -d 262144
    limit datasize 256m
</PRE>
	W zalenoci od shell'a jakiego uywasz jedno z tych polece moe nie
	zadziaa, ale to ustawienie pozwoli ustawi segment danych dla
	procesu znacznie wikszy i by moe pozwoli wykona zapytanie.
	To polecenie zadziaa dla biecego procesu oraz wszytkich podprocesw
	utworzonych po wykonaniu polecenia. Jeli ten problem wystpuje z
	klientem <SMALL>SQL</SMALL>, poniewa backend zwraca zbyt duo danych,
	sprbuj wykona to polecenie przed uruchomieniem klienta.

    <H4><A name="4.19">4.19</A>) Jak sprawdzi jakiej wersji PostgreSQL
	     uywam?</H4>

    <P>W <I>psql</I>, wpisz <CODE>select version();</CODE></P>

    <H4><A name="4.20">4.20</A>) Dlaczego operacje, ktre wykonuj na
	      duych obiektach "large-object" zwracaj komunikat:
			    <I>"invalid large obj descriptor"</I>?</H4>

    <P>Musisz uy <CODE>BEGIN WORK</CODE> i <CODE>COMMIT</CODE>
    przed i po uyciu uchwytu do duego obiektu, tzn. musisz nimi otoczy
    funkcje <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>

    <P>Obecnie PostgreSQL uywjc "rule" zamyka uchwyt do duego obiektu
	 przy kadym wywoaniu "commit". Wic pierwsze prba zrobienia
	 czegokolwiek z uchwytem spowoduje wypisanie: <I>invalid large obj 
	 descriptor</I>. Kod, ktry do tej pory dziaa (przynajmniej
	 wikszo razy) bdzie teraz generowa informacj o bdzie jeli nie
	 bdziesz korzysta z transakcji.</P>

    <P>Jeli uywasz interfejsu klienta jak <SMALL>ODBC</SMALL>  by moe
	 bdziesz musia ustawi <CODE>auto-commit off.</CODE></P>

    <H4><A name="4.21">4.21</A>) Jak stworzy kolumn ktrej domyln
	      wartoci bdzie biecy czas?</H4>

    <P>Uyj <I>CURRENT_TIMESTAMP</I>:</P>
<PRE>
<CODE>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
</CODE>
</PRE>
    <H4><A name="4.22">4.22</A>) Dlaczego zapytania uywajce
	     <CODE><SMALL>IN</SMALL></CODE> sa takie wolne?</H4>

    <P>W wersjach wczeniejszych ni 7.4 czymy podzapytania w outer queries 
	 poprzez sekwencyjne przeszukiwanie wynikw podzapytania dla kadego rzdu 
	 z outer query. Jeli podzapytanie zwraca jedynie kilka rzdw a
	 zewntrzne zapytanie zwraca ich wiele, IN jest najszybsze.
	 Aby przyspieszy inne zapytania mona zastpi <CODE>IN</CODE> przez 
    <CODE>EXISTS</CODE>:</P>
<PRE>
<CODE>SELECT *
    FROM tab
    WHERE col IN (SELECT subcol FROM subtab)
</CODE>
</PRE>
    na: 
<PRE>
<CODE>SELECT *
    FROM tab
    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
</CODE>
</PRE>
	<P>
	Aby to rozwizanie byo szybkie, subcol powinna by kolumn
	indeksowan.
	</P>
	<P>
	W wersji 7.4 i pniejszych, IN w rzeczywistoci uywa tej samej
	wyrafinowanej techniki czenia jak normalne zapytania i jest
	preferowane nad uywaniem EXISTS.
	</P>
    <H4><A name="4.23">4.23</A>) Jak wykona "outer join"?</H4>

    <P>PostgreSQL ma zaimplementowane outer join
	 wykorzystujc standardow skadni SQL. Poniej dwa przykady:</P>
	 
<PRE>
    SELECT *
    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
</PRE>
    or 
<PRE>
    SELECT *
    FROM t1 LEFT OUTER JOIN t2 USING (col);
</PRE>

    <P>Te dwa identyczne zapytania cz kolumn t1.col z kolumn t2.col,
	 ale take zwrc niepoczone rzdy w t1 (te, ktre nie pasuj w t2).
    <SMALL>RIGHT</SMALL> join dodaby niepoczone rzdy z tabeli t2.
    <SMALL>FULL</SMALL> join zwrciby rzdy plus dodatkowo wszystkie
	 rzdy z tabel t1 i t2. Sowo <SMALL>OUTER</SMALL> jest opcjonalne i
	 jest dodawane domylnie przy
    <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL>, i <SMALL>FULL</SMALL>
	 join'ach. Zwyke join'y s nazywane <SMALL>INNER</SMALL> joins.</P>

    <P>W poprzednich wersjach "outer joins" mog by zasymulowane poprzez
	 uycie slowa kluczowego
    <SMALL>UNION</SMALL> i <SMALL>NOT IN</SMALL>. Dla przykadu, czc
	 tabele <I>tab1</I> i <I>tab2</I>, nastpujce zapytanie wykonuje
	 <I>outer</I> join:<BR>
    <BR>
    </P>
<PRE>
    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
</PRE>

    <H4><A name="4.24">4.24</A>) Jak wykonywa zapytanie uywajce kilku
	      baz danych jednoczenie?</H4>

    <P>Nie ma takiej moliwoci aby w zapytaniu odpytawa inn baze danych
	 poza biec. Poniewa PostgreSQL aduje specyficzne dla bazy danych
	 katalogi systemowe, nie jest do koca jasne jak zapytanie pomidzy
	 rnymi bazami danych powinno si zachowywa.</P>
	 
    <P><I>contrib/dblink</I> pozwala na wykonywanie zapyta poprzez rne
	 bazy danych wywoujc odpowiednie funkcje. Oczywicie klient moe czy 
	 si z rnymi bazami danych i czy informacj w ten sposb uzyskan
	 po stronie klienta.</P>

    <H4><A name="4.25">4.25</A>) Jak zwrci w funkcji wiele rzdw lub
	      kolumn?</H4>

     <P>Moesz w atwy sposb zwraca wiele rzdw lub kolumn uywajc
	  funkcji z: <A HREF="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.
     
	<H4><A name="4.26">4.26</A>) Dlaczego nie mog w sposb pewny
	     tworzy/usuwa tabel tymczasowych w funkcjach PL/PgSQL?</H4>
	<P>
	PL/PgSQL przechowuje w cache zawarto funkcji, niepodanym efektem tego
	jest to, e gdy taka funkcja korzysta z tabel tymczasowych, ktre s
	pniej kasowane i odtwarzane, a funkcja wywoywana jest ponownie,jej
	wywoanie nie powiedzie si poniewa cachowana funkcja wci bdzie
	wskazywa na stara tablic tymczasow. Rozwizaniem tego problemu jest
	uywanie EXECUTE aby korzysta z tabel tymczasowych w PL/PgSQL. To
	spowoduje, e zapytanie bdzie parsowane przy kadym wywoaniu
	funkcji.
	</P>
	
	<H4><A name="4.27">4.27) Jakie s moliwoci replikacji w PostgreSQL?</H4>
	<P>
	Jest kilka opcji aby stosowa replikacj typu master/slave. Ten typ
	pozwala jedynie masterowi na dokonywanie zmian w bazie danych, a
	slave moe jedynie te zmiany odczytywa. Na stronie 
	<A
	HREF="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</A>
	znajduje si ich lista. Replikacja typu multi-master jest w trakcie
	prac, opis projektu znajduje si pod adresem: <A
	HREF="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>.
	</P>

	<H4><A name="4.28">4.28) Jakie moliwoci szyfrowania oferuje
	PostgreSQL?</H4>
	<P>
	<UL>
	<LI>contrib/pgcrypto zawiera wiele funkcji za pomoc, ktrych moemy uywa
	kryptografii w zapytaniach SQL.
	<LI>Aby szyfrowa transmisj od klienta do serwera, ten musi mie
	ustawion opcj ssl na true w pliku postgresql.conf, odpowiedni
	wpis host lub hostssl musi wystpowa w pliku pg_hba.conf, oraz
	sslmode nie moe by wyczone w kliencie. (Warto zwrci uwag, e
	moliwe jest take uywanie transportw szyfrujcw przez strony
	trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem dla SSL
	przez PostgreSQL).
	<LI>Hasa uytkownikw bazy danych s automatycznie szyfrowane od
	wersji 7.3. W poprzednich wersjach, naley t funkcjonalno poprzez
	wczenie opcji PASSWORD_ENCRYPTION w postgresql.conf. 
	<LI>Serwer moe dziaa uywajc szyfrowanego systemu plikw.
	</UL>
</P>

    <H2 align="center">Rozwijanie PostgreSQL</H2>
    <H4><A name="5.1">5.1</A>) Napisaem wasn funkcj. Kiedy uyj jej
	 w <I>psql</I>, program zrzuca pami (dump core)?</H4>

    <P>Problem moe by spowodowany przez bardzo wiele rzeczy. Sprbuj
	 najpierw przetestowa Twoj funkcj w samodzielnie dziaajcym programie.
	 </P>

    <H4><A name="5.2">5.2</A>) Jak mog doda/zgosi nowe typy czy
	 funkcje do PostgreSQL?</H4>

    <P>Wylij Twoje propozycje na list mailow <I>pgsql-hackers</I>,
    wtedy prawdopodobnie Twj kod znajdzie si w katalogu <I>contrib/</I>.</P>

    <H4><A name="5.3">5.3</A>) Jak napisa funkcj C zwracajc krotk
	      (tuple)?</H4>

	<P>
	W wersjach PostgreSQL od numeru 7.3, funckje zwracajce tabele s w
	plni wspierane w C, PL/PgSQL i SQL. Sprawd w Programmer's Guide aby
	uzyska wicej informacji. Przykad funkcji napisanej w C zwracajcej
	tabel zosta umieszczony w <I>contrib/tablefunc</I>.
	</P>

    <H4><A name="5.4">5.4</A>)  Zmieniem plik rdowy. Dlaczego po
	      rekompilacji nie wida zmiany?</H4>

    <P>Pliki <I>Makefiles</I> nie maj dorzuconych odpowiednich
	 zalenoci dla plikw nagwkowych (include files). Wykonaj najpierw
	 <I>make clean</I>, a nastpnie ponownie <I>make</I>.
    Jeli uywasz <SMALL>GCC</SMALL> moesz uy opcji
    <I>--enable-depend</I> przy wykonywaniu <I>configure</I> aby
	 kompilator mg okreli zalenoci samodzielnie.
	 </P>
  </BODY>
</HTML>