mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			1577 lines
		
	
	
		
			67 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			1577 lines
		
	
	
		
			67 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<!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 t³umaczenia: Pi±tek 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>T³umaczenie: Marcin Mazurek (<A href=
 | 
						|
    "mailto:m.mazurek@netsync.pl">m.mazurek@netsync.pl</A>)<BR>
 | 
						|
    </P>
 | 
						|
 | 
						|
    <P>Najbardziej aktualn± wersjê tego dokumentu mo¿na 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 dotycz±ce konkretnych systemów operacyjnych
 | 
						|
	 mo¿na 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 ogólne</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 dzia³a
 | 
						|
	  PostreSQL?<BR>
 | 
						|
     <A href="#1.4">1.4</A>) Na jakich nie-Unixowych systemach dzia³a
 | 
						|
	  PostgreSQL?<BR>
 | 
						|
     <A href="#1.5">1.5</A>) Sk±d mogê ¶ci±gn±æ PostgreSQL?<BR>
 | 
						|
     <A href="#1.6">1.6</A>) Gdzie mo¿na szukaæ wsparcia technicznego?<BR>
 | 
						|
     <A href="#1.7">1.7</A>) Jaka jest ostatnia dostêpna wersja?<BR>
 | 
						|
     <A href="#1.8">1.8</A>) Jaka dokumentacja jest dostêpna?<BR>
 | 
						|
     <A href="#1.9">1.9</A>) Gdzie mogê znale¼æ informacjê o znanych
 | 
						|
	  b³êdach czy brakuj±cych rozwi±zanich?<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 rozwi±zany problem Y2K?<BR>
 | 
						|
     <A href="#1.12">1.12</A>) Jak mogê siê przy³±czyæ do grupy osób
 | 
						|
	  bezpo¶rednio pracuj±cych nad rozwojem PostgreSQL?<BR>
 | 
						|
     <A href="#1.13">1.13</A>) Jak mogê zg³aszaæ b³êdy?<BR>
 | 
						|
     <A href="#1.14">1.14</A>) Jak mo¿na porównaæ PostgreSQL w stosunku
 | 
						|
	  do innych <SMALL>DBMS</SMALL>?<BR>
 | 
						|
     <A href="#1.15">1.15</A>) W jaki sposób mogê wesprzeæ finansowo
 | 
						|
    PostgreSQL?<BR>
 | 
						|
    
 | 
						|
	 <H2 align="center">Pytania u¿ytkowników</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± narzêdzia pozwalaj±ce na dostêp 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 jêzyków programowania mo¿na
 | 
						|
	  siê komunikowaæ z PostgreSQL?<BR>
 | 
						|
     
 | 
						|
 | 
						|
    <H2 align="center">Pytania dotycz±ce 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 b³êdzie: <I>IpcMemoryCreate</I>. Dlaczego?<BR>
 | 
						|
     <A href="#3.4">3.4</A>) Podczas startu <I>postmaster'a</I>,
 | 
						|
     otrzymujê komunikat o b³êdzie: <I>IpcSemaphoreCreate</I>. Dlaczego?<BR>
 | 
						|
     <A href="#3.5">3.5</A>) W jaki sposób mogê kontrolowaæ po³±czenia z
 | 
						|
	  innych hostów?<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± mo¿liwo¶ci wyszukiwania b³êdów?<BR>
 | 
						|
     <A href="#3.8">3.8</A>) Sk±d siê bierze komunikat: <I>"Sorry, too many
 | 
						|
    clients"</I> podczas próby po³±czenia 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 skryptów dump i restore?<BR>
 | 
						|
 | 
						|
    <H2 align="center">Pytania dotycz±ce u¿ytkowania</H2>
 | 
						|
    <A href="#4.1">4.1</A>) Jaka jest ró¿nica pomiêdzy kursorami
 | 
						|
	 binarnymi (binary cursors) i zwyk³ymi kursorami (normal cursors)?<BR>
 | 
						|
     <A href="#4.2">4.2</A>) Jak mogê pobraæ za pomoc± <SMALL>SELECT</SMALL>
 | 
						|
	  jedynie kilka pierwszych wyników 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 rzêdu,
 | 
						|
	  tabeli i bazy danych?<BR>
 | 
						|
     <A href="#4.6">4.6</A>) Jak du¿o 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 u¿ytkownicy s± utworzeni?<BR>
 | 
						|
     <A href="#4.8">4.8</A>) Moje zapytania s± wolne lub nie u¿ywaj±
 | 
						|
	  kluczy. Dlaczego?<BR>
 | 
						|
     <A href="#4.9">4.9</A>) Jak mogê sprawdziæ w jakis sposób "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ê u¿ywaæ wyra¿eñ regularnych w
 | 
						|
	  zapytaniach i zapytañ case-insensitive w wyra¿eniach regularnych?
 | 
						|
	  Jak korzystaæ z indeksów 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 ró¿nica pomiêdzy ró¿nymi typami
 | 
						|
	  tekstowymi (character types)?<BR>
 | 
						|
     <A href="#4.15.1">4.15.1</A>) Jak mogê utworzyæ pole typu int, które samo
 | 
						|
	  zwiêksza 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 u¿ycie <I>currval()</I> i
 | 
						|
    <I>nextval()</I> nie doprowadzi do "race condition" z innymi
 | 
						|
	 u¿ytkownikami?<BR>
 | 
						|
     <A href="#4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie s±
 | 
						|
	  ponownie u¿ywane przy przerwaniu transakcji?
 | 
						|
    Sk±d 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 niektórych terminów w 
 | 
						|
    PostgreSQL?<BR>
 | 
						|
     <A href="#4.18">4.18</A>) Sk±d bierze siê ten b³±d: <I>"ERROR: Memory
 | 
						|
    exhausted in AllocSetAlloc()"</I>?<BR>
 | 
						|
     <A href="#4.19">4.19</A>) Jak sprawdziæ jakiej wersji PostgreSQL
 | 
						|
    u¿ywam?<BR>
 | 
						|
     <A href="#4.20">4.20</A>) Dlaczego operacje, które wykonujê na
 | 
						|
	  du¿ych obiektach "large-object" zwracaj± komunikat:
 | 
						|
    <I>"invalid large obj descriptor"</I>?<BR>
 | 
						|
     <A href="#4.21">4.21</A>) Jak stworzyæ kolumnê której domy¶ln±
 | 
						|
	  warto¶ci± bêdzie bie¿±cy czas?<BR>
 | 
						|
     <A href="#4.22">4.22</A>) Dlaczego zapytania u¿ywaj±ce
 | 
						|
    <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 u¿ywaj±ce kilku
 | 
						|
	  baz danych jednocze¶nie?<BR>
 | 
						|
     <A href="#4.25">4.25</A>) Jak zwróciæ w funkcji wiele rzêdów lub
 | 
						|
	  kolumn?<BR>
 | 
						|
     <A href="#4.26">4.26</A>) Dlaczego nie mogê w sposób pewny
 | 
						|
	  tworzyæ/usuwaæ tabel tymczasowych w funkcjach PL/PgSQL?<BR>
 | 
						|
     <A href="#4.27">4.27</A>) Jakie s± mo¿liwo¶ci replikacji w
 | 
						|
	  PostgreSQL?<BR>
 | 
						|
     <A href="#4.28">4.28</A>) Jakie mo¿liwo¶ci szyfrowania oferuje
 | 
						|
	  PostgreSQL?<BR>
 | 
						|
    
 | 
						|
    <H2 align="center">Rozwijanie PostgreSQL</H2>
 | 
						|
    <A href="#5.1">5.1</A>) Napisa³em w³asn± funkcjê. Kiedy u¿yjê jej w
 | 
						|
	 <I>psql</I>, program zrzuca pamiêæ (dump core)?<BR>
 | 
						|
     <A href="#5.2">5.2</A>) Jak mogê dodaæ/zg³osiæ nowe typy czy funkcje
 | 
						|
	  do PostgreSQL?<BR>
 | 
						|
     <A href="#5.3">5.3</A>) Jak napisaæ funkcjê C zwracaj±c± krotkê
 | 
						|
	  (tuple)?<BR>
 | 
						|
     <A href="#5.4">5.4</A>) Zmieni³em plik ¼ród³owy. Dlaczego po
 | 
						|
	  rekompilacji nie widaæ zmiany?<BR>
 | 
						|
     
 | 
						|
    <HR>
 | 
						|
 | 
						|
    <H2 align="center">Pytania ogólne</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>. Czêsto podczas
 | 
						|
	 rozmów u¿ywany jest termin "Postgres"</P>
 | 
						|
 | 
						|
    <P>PostgreSQL jest rozszerzeniem systemu zarz±dzania bazami danych -
 | 
						|
	 POSTGRES, kolejn± generacj± rozwojowego prototypu <SMALL>DBMS</SMALL>.
 | 
						|
    Mimo, ¿e PostgreSQL zachowa³ bardzo dobrze zbudowany model danych
 | 
						|
	 (data model) i bogaty zestaw typów danych POSTGRES'a, zast±pi³
 | 
						|
	 PostQuel'owy jêzyk zapytañ z rozbudowanym podzbiorem jêzyka 
 | 
						|
	 <SMALL>SQL</SMALL>. PostgreSQL jest oprogramowaniem darmowym 
 | 
						|
	 z dostêpnymi ca³ymi ¼ród³ami.
 | 
						|
	 </P>
 | 
						|
 | 
						|
    <P>Rozwój PostgreSQL jest prowadzony przez grupê ludzi z Internetu,
 | 
						|
	 komunikuj±cych 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ê przy³±czyæ). Ta grupa ludzi jest 
 | 
						|
	 odpowiedzialna za ca³y rozwój 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 osób pomog³o przy portowaniu, testowaniu, debugowaniu i
 | 
						|
	 rozwijaniu kodu. Oryginalny kod Postgresa, na którym zosta³ oparty
 | 
						|
	 PostgreSQL, by³ wysi³kiem studentów oraz pracowników pracuj±cych pod
 | 
						|
	 kierownictwem profesora Michael'a Stonebraker'a z University of
 | 
						|
	 California w Berkeley.</P>
 | 
						|
 | 
						|
    <P>Oryginaln± nazw± oprogramowania w Berkeley by³ Postgres.  Po
 | 
						|
	 dodaniu obs³ugi <SMALL>SQL</SMALL> w 1995, nazwa zosta³a zmieniona
 | 
						|
    na Postgres95. Pod koniec roku 1996 nazwa zosta³a zmieniona na
 | 
						|
    PostgreSQL.</P>
 | 
						|
 | 
						|
    <H4><A name="1.2">1.2</A>) Jak± licencj± chroniony jest
 | 
						|
    PostgreSQL?</H4>
 | 
						|
 | 
						|
    <P>PostgreSQL objêty jest nastêpuj±c± 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 powy¿ej, jest klasyczn± licencj± BSD.
 | 
						|
    Nie posiada ona ¿adnych restrykcji co do u¿ywania kodu ¼ród³owego.
 | 
						|
	 Podoba nam siê i nie zamierzamy jej zmieniaæ.
 | 
						|
 | 
						|
    <H4><A name="1.3">1.3</A>) Na jakich systemach Unixowych dzia³a
 | 
						|
	      PostreSQL?</H4>
 | 
						|
 | 
						|
    <P>PostgreSQL powinien dzia³aæ na wszystkich nowych Unix-podobnych
 | 
						|
	 systemach. Platformy, które zosta³y szczegó³owo przetestowane podczas
 | 
						|
	 publikowania PostgreSQL s± wymienione w dokumentacji opisuj±cej
 | 
						|
	 instalacjê.</P>
 | 
						|
 | 
						|
    <H4><A name="1.4">1.4</A>) Na jakich nie-Unixowych systemach dzia³a
 | 
						|
	      PostgreSQL?</H4>
 | 
						|
 | 
						|
    <P><STRONG>Klient</STRONG></P>
 | 
						|
 | 
						|
    <P>Mo¿liwa jest kompilacja bibliteki C <I>libpq</I>, psql oraz
 | 
						|
	 innych interfejsów 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 mo¿e dzia³aæ na dowolnej wspieranej platformie 
 | 
						|
	 Unixowej. Plik <I>win32.mak</I> jest do³±czony
 | 
						|
	 do ¼róde³, aby mo¿na by³o stworzyæ bibliotekê <I>libpq</I> oraz
 | 
						|
	 program <I>psql</I> dzia³aj±ce w ¶rodowisku Win32. PostgreSQL mo¿e siê 
 | 
						|
	 tak¿e komunikowaæ z klientami <SMALL>ODBC</SMALL>.</P>
 | 
						|
 | 
						|
    <P><STRONG>Serwer</STRONG></P>
 | 
						|
 | 
						|
    <P>Serwer mo¿e byæ uruchamiany na Windows NT i Win2k u¿ywaj±c
 | 
						|
	 bibliotek Cygwin, Cygnus Unix/NT. W pliku <I>pgsql/doc/FAQ_MSWIN</I>
 | 
						|
	 znajduj±cym siê w ¼ród³ach 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. Je¶li 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 tak¿e port pod Novell Netware 6 dostêpny pod adresem <A
 | 
						|
	 href="http://forge.novell.com">http://forge.novell.com</A>.
 | 
						|
	 </P>
 | 
						|
 | 
						|
    <H4><A name="1.5">1.5</A>) Sk±d mo¿na ¶ci±gn±æ PostgreSQL?</H4>
 | 
						|
 | 
						|
    <P>G³ówny serwer ftp z dostêpem "anonymous" dla PostgreSQL znajduje
 | 
						|
	 siê <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
 | 
						|
	 je¶li szukasz mirrorów sprawd¼ nasz± g³ówn± stronê www.<P>
 | 
						|
 | 
						|
    <H4><A name="1.6">1.6</A>) Gdzie mo¿na szukaæ wsparcia technicznego?</H4>
 | 
						|
 | 
						|
    <P>Adres g³ównej listy mailowej: <A href=
 | 
						|
    "mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
 | 
						|
    Jest ona przeznaczona dyskusjom dotycz±cym spraw zwi±zanych z PostgreSQL.
 | 
						|
    ¯eby zapisac siê na listê, wy¶lij email z nastêpuj±cymi liniami w
 | 
						|
	 tre¶ci 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>Dostêpna jest tak¿e lista wysy³aj±ca digesty. Aby zapisaæ siê na
 | 
						|
	 ni±, wy¶lij email na adres:
 | 
						|
    <A href=
 | 
						|
    "mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
 | 
						|
    z tre¶ci± maila zawieraj±c±:</P>
 | 
						|
<PRE>
 | 
						|
    subscribe
 | 
						|
    end
 | 
						|
</PRE>
 | 
						|
	Digesty s± wysy³ane do cz³onków listy, kiedy na g³ówn± listê dotrze ok
 | 
						|
	30k wiadomo¶ci.
 | 
						|
 | 
						|
    <P>Dostêpna jest tak¿e lista po¶wiêcona b³êdom znalezionym w
 | 
						|
	 PostgreSQL. Aby zapisaæ siê na ni± wy¶lij email na adres:
 | 
						|
    <A href=
 | 
						|
    "mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
 | 
						|
    z tre¶ci± maila zawieraj±c±:</P>
 | 
						|
<PRE>
 | 
						|
    subscribe
 | 
						|
    end
 | 
						|
</PRE>
 | 
						|
    Lista po¶wiêcona dyskusjom developerów jest dostêpna pod adresem:
 | 
						|
    <A href=
 | 
						|
    "mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
 | 
						|
	 Aby siê na ni± zapisaæ wy¶lij na jej adres mail z tre¶ci±:
 | 
						|
<PRE>
 | 
						|
    subscribe
 | 
						|
    end
 | 
						|
</PRE>
 | 
						|
 | 
						|
    <P>Dodatkowe informacje o listach mailowych dotycz±cych PostgreSQL
 | 
						|
	 mo¿na 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
 | 
						|
	 po³±czenia siê z kana³em u¿ywam Unixowego polecenia <CODE>irc -c
 | 
						|
    '#PostgreSQL' "$USER" irc.phoenix.net.</CODE></P>
 | 
						|
 | 
						|
    <P>Lista firm oferuj±cych 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 dostêpna wersja?</H4>
 | 
						|
 | 
						|
    <P>Ostatnia dostêpna wersja PostgreSQL to 7.4.1.</P>
 | 
						|
 | 
						|
    <P>Planujemy publikowanie kolejnych wersji co sze¶æ do o¶miu miesiêcy.</P>
 | 
						|
 | 
						|
    <H4><A name="1.8">1.8</A>) Jaka dokumentacja jest dostêpna?</H4>
 | 
						|
 | 
						|
    <P>Kilka manuali, stron podêcznika man, oraz kilka przyk³adów do
 | 
						|
	 testowania s± za³±czone w samej dystrybucji. Znajduj± siê one w
 | 
						|
	 katalogu <I>/doc</I>. Manual mo¿e byæ tak¿e przegl±dany poprzez
 | 
						|
	 strony www pod adresem <A href=
 | 
						|
    "http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P>
 | 
						|
	
 | 
						|
    <P>Istniej± tak¿e dwie ksi±¿ki dostêpne 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 ksi±¿ek o PostgreSQL, które mo¿na kupiæ znajduje siê pod adresem
 | 
						|
	 <A href=
 | 
						|
    "http://techdocs.PostgreSQL.org/techdocs/bookreviews.php">
 | 
						|
	 http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>.
 | 
						|
    Zbiór technicznych artyku³ów 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 których
 | 
						|
	 mo¿na sprawdziæ informacje dotycz±ce typów, operatorów, funkcji,
 | 
						|
	 agregatów itd.</P>
 | 
						|
 | 
						|
    <P>Na naszej stronie mo¿na znale¼æ du¿o wiêcej dokumentacji.</P>
 | 
						|
 | 
						|
    <H4><A name="1.9">1.9</A>) Gdzie mo¿na znale¼æ informacjê o znanych
 | 
						|
	      b³êdach czy brakuj±cych rozwi±zanich?</H4>
 | 
						|
 | 
						|
    <P>PostgreSQL wspiera rozszerzony podzbiór standardu <SMALL>SQL</SMALL>-92.
 | 
						|
    Sprawd¼ nasz± listê <A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
 | 
						|
    aby znale¼æ informacjê o znanych problemach, brakuj±cych
 | 
						|
	 rozwi±zaniach czy przysz³ych planach.</P>
 | 
						|
 | 
						|
    <H4><A name="1.10">1.10</A>) Jak mogê siê nauczyæ
 | 
						|
    <SMALL>SQL</SMALL>?</H4>
 | 
						|
 | 
						|
    <P>Ksi±¿ka 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 ksi±zka o PostgreSQL
 | 
						|
	 dostêpna pod adresem: <A href=
 | 
						|
    "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
 | 
						|
    Dobry tutorial mo¿esz 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 u¿ytkowników 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 rozwi±zany 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ê przy³±czyæ do grupy osób
 | 
						|
	      bezpo¶rednio pracuj±cych nad rozwojem PostgreSQL?</H4>
 | 
						|
 | 
						|
    <P>Przede wszystkim ¶ci±gnij ostatnie dostêpne ¼ród³a i przeczytaj
 | 
						|
	 dokumentacjê przeznaczon± dla developerów na naszej stronie www lub
 | 
						|
	 dostêpn± tak¿e w ¼ród³ach PostgreSQL. Nastêpnie zapisz siê na listy
 | 
						|
	 mailowe <I>pgsql-hackers</I> i
 | 
						|
    <I>pgsql-patches</I>. I na koniec, wysy³aj nam wysokiej jako¶ci
 | 
						|
	 patch'e na listê pgsql-patches.</P>
 | 
						|
 | 
						|
    <P>Jest oko³o 12 osób, które maj± uprawnienia do commit'owania w
 | 
						|
    <SMALL>CVS</SMALL> PostgreSQL'a. Ka¿dy z nich submitowa³ tak wiele
 | 
						|
	 wysokiej jako¶ci patchy, ¿e sta³o siê niemo¿liwe dla obecnych
 | 
						|
	 commiterów byæ z nimi na bie¿±co, wiêc musieli¶my im ufaæ i mieæ
 | 
						|
	 pewno¶æ, ¿e ich poprawki s± wysokiej jako¶ci.</P>
 | 
						|
 | 
						|
    <H4><A name="1.13">1.13</A>) Jak mogê zg³aszaæ b³êdy?</H4>
 | 
						|
 | 
						|
    <P>Zajrzyj na stronê <A href=
 | 
						|
    "http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>, na
 | 
						|
	 której opisane s± wskazówki jak zg³aszaæ informacje o b³êdach.</P>
 | 
						|
 | 
						|
    <P>Zajrzyj tak¿e 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 mo¿na porównaæ PostgreSQL w stosunku
 | 
						|
	      do innych <SMALL>DBMS</SMALL>?</H4>
 | 
						|
 | 
						|
    <P>Jest kilka sposobów oceny softwaru: mo¿liwo¶ci,
 | 
						|
    wydajno¶æ, stabilno¶æ, wsparcie i cena.</P>
 | 
						|
 | 
						|
    <DL>
 | 
						|
      <DT><B>Mo¿liwo¶ci</B></DT>
 | 
						|
 | 
						|
      <DD>PostgreSQL posiada mo¿liwo¶ci dostêpne w du¿ych, komercyjnych
 | 
						|
		systemach <SMALL>DBMS</SMALL>, takie jak transakcje, podzapytania
 | 
						|
		(subselects), triggery, widoki, klucze obce, referential integrity,
 | 
						|
		oraz wyrafinowany system blokowania. Mamy tak¿e w³a¶ciow¶ci których
 | 
						|
		inni nie posiadaj±, jak typy definiowane przez u¿ytkownika,
 | 
						|
		dziedziczenie, rules, multi-version concurrency control, która
 | 
						|
		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 niektórych sytuacjach jest szybszy w
 | 
						|
		niektórych wolniejszy. W porównianiu do MySQL lub mniejszych baz
 | 
						|
		danych jeste¶my szybsi przy wielu u¿ytkownikach, skomplikowaych
 | 
						|
		zapytaniach i du¿ym obci±¿eniu podczas. MySQL jest szybszy dla
 | 
						|
		prostych SELECTów wykonywanych przez niewielu u¿ytkowników.
 | 
						|
		Spowodowane jest to narzutem, który siê pojawia przy transakcjach.
 | 
						|
		Oczywi¶cie MySQL nie ma wiêkszo¶ci z rozwi±zañ opisanych powy¿ej
 | 
						|
		w sekcji <I> Mo¿liwo¶ci </I>. PostgreSQL zosta³ stworzony z my¶l± o
 | 
						|
		stabilno¶ci, oraz szerokiej gamie mo¿liwo¶ci, ale mimo to staramy
 | 
						|
		siê w ka¿dej wersji poprawiaæ jego wydajno¶æ.
 | 
						|
		Ciekawe porównanie PostgreSQL i MySQL mo¿na 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±, która 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 warto¶ci. Staramy siê publikowaæ kod
 | 
						|
		stabilny, dobrze przetestowany, z minimum mo¿liwych b³êdów. Ka¿de
 | 
						|
		wydanie poprzedza co najmniej miesi±c testów wersji beta. Patrz±c na
 | 
						|
		historiê wydañ PostgreSQL widaæ, ¿e dostarczamy stabilne, dobrze
 | 
						|
		sprawdzone wersje, które s± gotowe do u¿ycia w ¶rodowisku
 | 
						|
		produkcyjnym. My¶limy, ¿e proces publikowania kolejnych wersji
 | 
						|
		opracowany przez nas jest jednym z lepszych w¶ród innych twórców
 | 
						|
		oprogramowania bazodanowego.<BR>
 | 
						|
      <BR>
 | 
						|
      </DD>
 | 
						|
 | 
						|
      <DT><B>Wsparcie</B></DT>
 | 
						|
 | 
						|
      <DD>Dziêki naszym listom mailowym masz dostêp do du¿ej liczby
 | 
						|
		programistów i u¿ytkowników, którzy pomagaj± rozwi±zaæ ka¿dy
 | 
						|
		napotkany problem. Chocia¿ nie mo¿emy gwarantowaæ znalezienia
 | 
						|
		rozwi±zania danego problemu, nie ró¿nimy siê w tym od innych
 | 
						|
		komercyjnych systemów <SMALL>DBMS</SMALL>. Bezpo¶redni kontakt z
 | 
						|
		programistami, u¿ytkownikami, dokumentacj± i kodem ¼ród³owym
 | 
						|
		sprawiaj±, ¿e wsparcie oferowane PostgreSQL niejednokrotnie jest
 | 
						|
		lepsze ni¿ w innych systemach <SMALL>DBMS</SMALL>. Istnieje tak¿e
 | 
						|
		mo¿liwo¶æ skorzystania z komercyjnego wsparcia dla tych, których
 | 
						|
		takiego rozwi±zania potrzebuj±.
 | 
						|
      (Sprawd¼ <A href="#1.6">ten punkt FAQ</A>.)<BR>
 | 
						|
      <BR>
 | 
						|
      </DD>
 | 
						|
 | 
						|
      <DT><B>Cena</B></DT>
 | 
						|
 | 
						|
      <DD>Korzystanie z PostgreSQL jest darmowe, zarówno w przypadku
 | 
						|
		komercyjnym jak i niekomercyjnym. Mo¿esz korzystaæ z naszego kodu
 | 
						|
		¼ród³owego w Twoim produkcie bez ¿adnych ograniczeñ, poza tymi
 | 
						|
		wymienionymi w licencji BSD przytoczonej powy¿ej.<BR>
 | 
						|
      <BR>
 | 
						|
      </DD>
 | 
						|
    </DL>
 | 
						|
 | 
						|
    <H4><A name="1.15">1.15</A>) W jaki sposób mogê wesprzeæ finansowo
 | 
						|
	     PostgreSQL?</H4>
 | 
						|
 | 
						|
    <P>PostgreSQL korzysta z najlepszej infrastruktury od samego pocz±tku
 | 
						|
	 istnienia projektu, czyli roku 1996 kiedy rozpoczeli¶my pracê. Wszystko 
 | 
						|
	 to zawdziêczamy Marc'owi Fournier'owi, który stworzy³ t± infrastrukturê 
 | 
						|
	 i zarz±dza ni± od lat.</P>
 | 
						|
 | 
						|
    <P>Wysokiej jako¶ci infrastruktura jest bardzo wa¿na dla ka¿dego
 | 
						|
	 projektu open-source. Zapobiega przerwom w rozwoju projektu i
 | 
						|
	 jakimkolwiek przestojom.</P>
 | 
						|
 | 
						|
    <P>Oczywi¶cie korzystanie z wysokiej jako¶ci infrastruktury nie jest
 | 
						|
	 tanie. Istnieje wiele ró¿nych miesiêcznych, czy jednorazowych
 | 
						|
	 wydatków, które trzeba ponosiæ aby wszystko dzia³a³o jak nale¿y.
 | 
						|
	 Je¶li Ty, b±d¼ Twoja firma mo¿e wspomóc finansowo rozwój 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 rozwój projektu PostgreSQL i nie s±
 | 
						|
	 przeznaczane na finansowanie jakiejkolwiek firmy. Je¶li wolisz, 
 | 
						|
	 mo¿esz wys³aæ czek na adres kontaktowy.</P>
 | 
						|
    <HR>
 | 
						|
	 Je¶li mo¿esz siê pochwaliæ udanymi wdro¿eniami PostgreSQL, prosimy
 | 
						|
	 aby¶ zg³osi³ 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>Dostêpne s± dwa driwery <SMALL>ODBC</SMALL>: PsqlODBC
 | 
						|
    i OpenLink <SMALL>ODBC</SMALL>.</P>
 | 
						|
 | 
						|
    <P>Mo¿esz 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> mo¿e byæ pobrany z adresu: <A href=
 | 
						|
    "http://www.openlinksw.com/">http://www.openlinksw.com</A>.
 | 
						|
	 Wspó³pracuje ze standardowym oprogramowaniem klienckim <SMALL>ODBC</SMALL>
 | 
						|
	 wiêc w ten sposób mo¿esz korzystaæ z PostgreSQL <SMALL>ODBC</SMALL>
 | 
						|
	 dostêpnego na ka¿dej pltaformie któr± wspiera (Win, Mac, Unix, VMS).</P>
 | 
						|
 | 
						|
    <P>Autorzy bêd± prawdopodobnie sprzedawaæ ten produkt osobom które
 | 
						|
	 wymagaj± komercyjnego wsparcia, ale wersja darmowa bêdzie zawsze
 | 
						|
	 dostêpna. Wszystkie pytania mo¿esz wysy³aæ 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± narzêdzia pozwalaj±ce na dostêp do
 | 
						|
	      PostgreSQL przez www?</H4>
 | 
						|
 | 
						|
    <P>Dobry podrêcznik dla pocz±tkuj±cych o dostêpie do bazy danych
 | 
						|
	 przez www mo¿esz znale¼æ pod adresem:
 | 
						|
    <A href="http://www.webreview.com">http://www.webreview.com</A></P>
 | 
						|
 | 
						|
    <P>Do integracji z www, ¶wietnym rozwi±zaniem jest PHP. Mo¿esz
 | 
						|
	 znale¼æ wiêcej informacji na ten temat pod adresem
 | 
						|
    <A href="http://www.php.net">http://www.php.net</A>.</P>
 | 
						|
 | 
						|
    <P>Wiele osób w przypadku skomplikowanych rozwi±zañ uzywa Perl'a i
 | 
						|
	 modu³u 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 interfejsów graficznych dla PostgreSQL.
 | 
						|
	 W¶ród 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
 | 
						|
	tak¿e PHPPgAdmin ( http://phppgadmin.sourceforge.net/ ), webowy
 | 
						|
	interfejs dla PostgreSQL.
 | 
						|
	</P>
 | 
						|
	<P>
 | 
						|
	Wiêcej 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 jêzyków programowania
 | 
						|
	 mo¿na siê komunikowaæ z PostgreSQL?</H4>
 | 
						|
	 
 | 
						|
    <P>Najbardziej popularne jêzyki posiiadaj± w³asny interfejs dla
 | 
						|
	 PostgreSQL. Sprawd¼ listê rozszerzeñ dla intersuj±cego Ciebie jêzyka
 | 
						|
	 programowania.</P>
 | 
						|
	 
 | 
						|
    <P>Ze ¼ród³ami PostreSQL dystrubuowane s± interfejsy dla
 | 
						|
	 nastêpuj±cych jêzyków 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± dostêpne pod adresem: 
 | 
						|
	<A href="http://gborg.postgresql.org"> http://gborg.postgresql.org</A> w
 | 
						|
	sekcji Drivers/Interfaces.
 | 
						|
    <HR>
 | 
						|
 | 
						|
    <H2 align="center">Pytania dotycz±ce 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>U¿yj 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 b³êdzie: <I>Bad System Call</I> lub "core dumped".
 | 
						|
			Dlaczego?</H4>
 | 
						|
 | 
						|
 | 
						|
    <P>Ten b³±d mo¿e byæ wynikiem wielu problemów, ale na pocz±tek
 | 
						|
	 sprawd¼ czy masz zainstalowane rozszerzenia systemu V w j±drze
 | 
						|
	 systemu. PostgreSQL wymaga do pracy zainstalowanej obs³ugi pamiêci
 | 
						|
	 dzielonej i semaforów.</P>
 | 
						|
 | 
						|
    <H4><A name="3.3">3.3</A>) Podczas startu <I>postmaster'a</I>,
 | 
						|
	      otrzymujê komunikat o b³êdzie: <I>IpcMemoryCreate</I>.
 | 
						|
			Dlaczego?</H4>
 | 
						|
 | 
						|
    <P>Albo nie masz poprawnie skonfigurowanej obs³ugi pamiêci dzielonej
 | 
						|
	 w j±drze systemu, albo musisz zwiêkszyæ jej dostêpny rozmiar.
 | 
						|
    Dok³adna ilo¶æ jak± potrzebujesz jest zale¿na od architektury systemu
 | 
						|
	 na jakim pracujesz, jak du¿o buforów oraz jak du¿o procesów backendu
 | 
						|
	 skonfigurowa³e¶ dla <I>postmaster'a</I>. Dla wiêkszo¶ci systemów, z
 | 
						|
	 domy¶ln± liczb± buforów i procesów potrzebujesz minimum w
 | 
						|
	 przybli¿eniu 1MB. Zobacz  <A href=
 | 
						|
    "http://www.postgresql.org/idocs/index.php?kernel-resources.html">PostgreSQL
 | 
						|
    Administrator's Guide</A> gdzie szczegó³owo zosta³o opisane
 | 
						|
	 wykorzystanie pamiêci dzielonej i semaforów.</P>
 | 
						|
 | 
						|
    <H4><A name="3.4">3.4</A>) Podczas startu <I>postmaster'a</I>,
 | 
						|
	      otrzymujê komunikat o b³êdzie: <I>IpcSemaphoreCreate</I>.
 | 
						|
			Dlaczego?</H4>
 | 
						|
			
 | 
						|
    <P>Je¶li tre¶æ b³êdu brzmi: <I>IpcSemaphoreCreate: semget failed
 | 
						|
	 (No space left on device)</I> oznacza to, ¿e j±dro systemu nie jest
 | 
						|
	 skonfigurowane do obs³ugi wystarczaj±cej liczby semaforów.
 | 
						|
	 Postgres wymaga jednego semafor'a na potencjalny jeden proces backend.
 | 
						|
	 Tymczasowym rozwi±zaniem jest uruchomienie programu <I>postmaster</I>
 | 
						|
	 z mniejsz±  maksymaln± liczb± procesów backend.
 | 
						|
	 U¿yj opcji <I>-N</i> z parameterem mniejszym od domy¶lnego - 32.   
 | 
						|
	 Bardziej trwa³ym rozwi±zaniem jest zwiêkszenie parametrów
 | 
						|
	 <SMALL>SEMMNS</SMALL> i <SMALL>SEMMNI</SMALL> j±dra twojego systemu.</P>
 | 
						|
 | 
						|
	 <P>Niedzia³aj±ce semafory mog± spowodowaæ niepoprawne zamkniêcie
 | 
						|
	 systemu w czasie intensywnego korzystania z bazy.</P>
 | 
						|
	 
 | 
						|
	 <P>Je¶li tre¶æ b³êdu jest inna, mo¿e to oznaczaæ, ¿e obs³uga semaforów 
 | 
						|
	 nie zosta³a w³±czona do j±dra wcale. Zobacz PostgreSQL 
 | 
						|
	 Administrator's Guide po bardziej szczegó³owe informacje o pamiêci 
 | 
						|
	 dzielonej i semaforach.</P>
 | 
						|
 | 
						|
    <H4><A name="3.5">3.5</A>) W jaki sposób mogê kontrolowaæ po³±czenia
 | 
						|
	 z innych hostów?</H4>
 | 
						|
 | 
						|
    <P>Domy¶lnie PostgreSQL pozwala jedynie na po³±czenia za pomoc±
 | 
						|
	 socketów Unixowych z lokalnego hosta. Inne hosty nie bêd±  mog³y siê
 | 
						|
	 po³±czyæ z serwerem dopóki nie zostanie dodana opcja <I>-i</I> do
 | 
						|
	 <I>postmaster'a</I>,
 | 
						|
    <B>oraz</B> nie umo¿liwi siê autoryzacji na podstawie adresu hostów
 | 
						|
	 modyfikuj±c odpowiednio plik
 | 
						|
    <I>$PGDATA/pg_hba.conf</I>. To zmiany pozwol± na po³±czenia 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 w±tpienia mog± przyspieszyæ wykonywanie zapytañ.
 | 
						|
    Polecenie <SMALL>EXPLAIN</SMALL> pozwala zobaczyæ jak PostgreSQL
 | 
						|
	 interpretuje Twoje zapytanie i które indeksy s± u¿ywane.</P>
 | 
						|
 | 
						|
    <P>Je¶li wykonujesz bardzo du¿o <SMALL>INSERTów</SMALL>, mo¿e warto
 | 
						|
	 je wykonaæ za pomoc± jednego du¿ego pliku u¿ywaj±c polecenia
 | 
						|
	<SMALL>COPY</SMALL>. Jest to du¿o szybsze ni¿ pojedyncze
 | 
						|
    <SMALL>INSERTy.</SMALL> Po drugie polecenia SQL nie zawarte w bloku
 | 
						|
	 okre¶laj±cym transakcjê - <SMALL>BEGIN WORK/COMMIT</SMALL>, s±
 | 
						|
	 traktowane jako pojedyncza transakcja. Rozwa¿ wykonanie kilku
 | 
						|
	 poleceñ/zdañ SQL w jednym bloku transakcji. To redukuje narzut
 | 
						|
	 nak³adany przez transakcjê. Przy du¿ych zmianach w danych, warto
 | 
						|
	 usun±æ i stworzyæ na nowo indeksy.</P>
 | 
						|
 | 
						|
    <P>Jest kilka opcji pozwalaj±cych na poprawienie wydajno¶ci.
 | 
						|
	 Mo¿esz wy³±czyæ <I>fsync()</I> poprzez uruchomienie <I>postmaster'a</I>
 | 
						|
	 z opcjami <I>-o -F</I>. To spowoduje, ¿e
 | 
						|
    <I>fsync()</I> nie bêdzie zrzuca³ danych na dysk po ka¿dej
 | 
						|
	 transakcji.</P>
 | 
						|
 | 
						|
    <P>Mo¿esz tak¿e uruchomiæ <I>postmaster'a</I> z opcj± <I>-B</I>
 | 
						|
	 aby zwiêkszyæ wielko¶æ pamiêci dzielonej u¿ywanej przez procesy
 | 
						|
	 backendów. Je¶li ustawisz t± warto¶æ zbyt wysoko i przekroczysz limity
 | 
						|
	 ustawione przez kernel na pamiêæ dzielon±, <I>postmaster</I>  mo¿e siê
 | 
						|
	 nie uruchomiæ. Ka¿dy bufor zajmuje 8K a domy¶lna ilo¶æ buforów to 64.</P>
 | 
						|
 | 
						|
    <P>Mo¿esz tak¿e u¿yæ opcji <I>-S</I> dla backendu aby zwiêkszyæ
 | 
						|
	 maksymaln± warto¶æ pamiêci u¿ywan± przez proces backendu podczas
 | 
						|
	 sortowania. Opcja <I>-S</I> jest ustawiana warto¶ci± podawan± w
 | 
						|
	 kilobajtach, domy¶lna warto¶æ to 512K.</P>
 | 
						|
 | 
						|
    <P>Mo¿esz tak¿e u¿yæ polecenia <SMALL>CLUSTER</SMALL> aby pogrupowaæ
 | 
						|
	 dane w tabelach wg indeksu. Zobacz opis polecenia <SMALL>CLUSTER</SMALL>
 | 
						|
    w manualu ¿eby dowiedzieæ siê wiêcej.</P>
 | 
						|
 | 
						|
    <H4><A name="3.7">3.7</A>) Jakie s± mo¿liwo¶ci wyszukiwania
 | 
						|
	 b³êdów?</H4>
 | 
						|
 | 
						|
    <P>PostgreSQL ma kilka mo¿liwo¶ci na raportowanie informacji o
 | 
						|
	 jego statusie, które 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± postêp
 | 
						|
	 procesu backend i zatrzymuj± program kiedy wydarzy siê co¶
 | 
						|
	 nieoczekiwanego.</P>
 | 
						|
 | 
						|
    <P>Zarówno <I>postmaster</I> jak i <I>postgres</I> maj± kilka opcji
 | 
						|
	 do debugowania. Za ka¿dym razem kiedy uruchamiasz <I>postmaster'a</I>,
 | 
						|
    upewnij siê, ¿e wysy³asz standardowe wyj¶cie i error do pliku z
 | 
						|
	 logami, np. w ten sposób:</P>
 | 
						|
<PRE>
 | 
						|
    cd /usr/local/pgsql
 | 
						|
    ./bin/postmaster >server.log 2>&1 &
 | 
						|
</PRE>
 | 
						|
 | 
						|
    <P>To utworzy plik server.log w g³ównym katalogu PostgreSQL.
 | 
						|
	 Ten plik zawiera po¿yteczne informacje o problemach i b³êdach, które
 | 
						|
	 wydarzy³y siê podczas pracy serwera. <I>Postmaster</I> posiada opcjê
 | 
						|
	 <I>-d</I>, która pozwala na raportowanie bardzo szczególowych
 | 
						|
	 informacji. Do opcji <I>-d</I> podajemy liczbê, która okre¶la
 | 
						|
	 szczegó³owo¶æ wysy³anych informacji. Musisz mieæ ¶wiadomo¶æ, ¿e
 | 
						|
	 wysoki poziom logowania bêdzie powodowa³ tworzenie bardzo duzych
 | 
						|
	 plików z logami.</P>
 | 
						|
 | 
						|
    <P>Je¶li <I>postmaster</I> nie zosta³ uruchomiony, mo¿esz uruchomiæ
 | 
						|
    <I>postgres'owy</I> backend z linii poleceñ, i uruchomiæ Twoje
 | 
						|
	 polecenie <SMALL>SQL</SMALL> bezpo¶rednio na nim.
 | 
						|
	 Taki sposób jest polecany <B>jedynie</B> w przypadku debugowania.
 | 
						|
	 Zwróæ uwagê, ¿e w tym wypadku zapytanie koñczy znak nowej linii a nie
 | 
						|
	 ¶rednik. Je¶li skompilowa³e¶ z opcjami debugowania mozesz u¿yæ
 | 
						|
	 debuggera aby sprawdziæ co siê dzieje. Poniew¿ backend nie zosta³
 | 
						|
	 uruchomiony przez <I>postmaster'a</I>, nie dzia³a w identycznym
 | 
						|
	 ¶rodowisku, co oznacza ¿e powtórzenie warunków w jakich wyst±pi³y
 | 
						|
	 problemy moze byæ problemem.</P>
 | 
						|
 | 
						|
    <P>Je¶li <I>postmaster</I> dzia³a, uruchom <I>psql</I> w jednym z
 | 
						|
	 okien, nastêpnie znajd¼ <SMALL>PID</SMALL> procesu <I>postgres</I>
 | 
						|
    u¿ywanego przez <I>psql</I>. U¿yj debuggera aby do
 | 
						|
	 <SMALL>PID'u</SMALL> <I>postgres'a</I>. Mo¿esz ustawiaæ pu³apki
 | 
						|
	 (breakpoints) w debuggerze i wykonywaæ zapytania z <I>psql</I>. 
 | 
						|
	 Je¶li debugujesz uruchamianie <I>postgres'a</I>, mo¿esz ustawiæ zmienn±
 | 
						|
	 PGOPTIONS="-W n", nastêpnie uruchomiæ <I>psql</I>. 
 | 
						|
	 Opcja ta pozwoli spowolniæ uruchomienie na	 
 | 
						|
	 <I>n</I> sekund aby¶ móg³ siê po³±czyæ z procesem za pomoc±
 | 
						|
	 debugera, ustawiæ jakiekolwiek pu³apki i kontynuowaæ proces
 | 
						|
	 uruchamiania.</P>
 | 
						|
 | 
						|
    <P><I>postgres</I> mo¿e byæ uruchamiany z opcjami <I>-s, -A</I> i
 | 
						|
	 <I>-t</I>, które mog± byæ bardzo przydatne przy debuggowaniu i ocenie
 | 
						|
	 wydajno¶ci.</P>
 | 
						|
 | 
						|
    <P>Mo¿esz tak¿e 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 bie¿±cym katalogu klienta. Linux wymaga aby kompilowaæ
 | 
						|
	 z opcj± <I>-DLINUX_PROFILE</I> aby profilowanie odbywa³o siê
 | 
						|
	 poprawnie.</P>
 | 
						|
 | 
						|
    <H4><A name="3.8">3.8</A>) Sk±d siê bierze komunikat: <I>"Sorry, too
 | 
						|
	 many clients"</I> podczas próby po³±czenia siê z baz± danych?</H4>
 | 
						|
 | 
						|
    <P>Musisz zwiêkszyæ limit ilo¶ci jednoczesnych procesów bacekendu
 | 
						|
	 dla procesu <I>postmaster'a</I>.</P>
 | 
						|
 | 
						|
    <P>Domy¶lny limit to 32 procesy. Mo¿esz go zwiêkszyæ przez restart
 | 
						|
    <I>postmaster</I> z odpowiedni± warto¶ci± ustawian± opcjê <I>-N</I> w
 | 
						|
	 pliku <I>postgresql.conf</I>.</P>
 | 
						|
 | 
						|
    <P>We¼ pod uwagê, ¿e je¶li zwiêkszysz warto¶æ podan± w opcji
 | 
						|
	 <I>-N</I> na wiêcej ni¿ 32 musisz tak¿e zwiêkszyæ warto¶æ w opcji
 | 
						|
    <I>-B</I> ponad jej domy¶ln± warto¶æ 64; warto¶æ <I>-B</I> musi byæ
 | 
						|
	 co najmniej dwa razy wiêksza od warto¶ci podanej w opcji 
 | 
						|
    <I>-N</I>, a prawdopodobnie powinna byæ w rzeczywisto¶ci jeszcze
 | 
						|
	 wiêksza dla optymalnej wydajno¶ci.
 | 
						|
    Dla du¿ej liczby procesów backendu na pewno zauwa¿ysz, ¿e trzeba
 | 
						|
	 zwiêkszyæ ró¿ne parametry j±dra Unixa. Rzeczy, które powniene¶
 | 
						|
	 sprawdziæ to maksymalna liczba bloków pamiêci dzielonej, 
 | 
						|
	 <SMALL>SHMMAX;</SMALL> maksymalna liczba semaforów, <SMALL>SEMMNS</SMALL>
 | 
						|
	 oraz <SMALL>SEMMNI;</SMALL> 
 | 
						|
    maksymalna liczba procesów, <SMALL>NPROC;</SMALL> maksymalna liczba
 | 
						|
	 procesów na jednego u¿ytkownika, <SMALL>MAXUPRC;</SMALL> i maksymalna
 | 
						|
	 liczba otwartych plików, <SMALL>NFILE</SMALL> oraz
 | 
						|
    <SMALL>NINODE.</SMALL> Powód dla którego PostgreSQL ma limit na
 | 
						|
	 maksymaln± liczbê procesów backendu to obawa o wyczerpanie zasobów
 | 
						|
	 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 
 | 
						|
	 przyk³adu, je¶li jaka¶ operacja sortowania jest wymagana do wykonania
 | 
						|
    <SMALL>ORDER BY,</SMALL> a samo sortowanie wymaga wiêcej  miejsca ni¿
 | 
						|
	 parametr backendu
 | 
						|
    <I>-S</I> ustawi³ do wykorzystania, wtedy tymczasowe pliki s± u¿ywane
 | 
						|
	 do przechowywania tych danych.</P>
 | 
						|
 | 
						|
    <P>Pliki tymczasowe powinny byæ usuniête automatycznie, ale mog³o siê
 | 
						|
	 to nie staæ je¶li proces backendu w miêdzyczasie nie zakoñczy³ siê
 | 
						|
	 poprawnie podczas operacji sortowania. Je¶li w danym momencie nie
 | 
						|
	 dzia³aj± ¿adne procesy backendów mozesz spokojnie usun±æ pliki
 | 
						|
    pg_tempNNN.NN.</P>
 | 
						|
 | 
						|
	 <H4><A name="3.9">3.9</A>) Dlaczego konieczne jest przy upgradzie
 | 
						|
	      PostgreSQL korzystanie ze skryptów dump i restore?</H4>
 | 
						|
	 <P>
 | 
						|
	 Twórcy PostgreSQL dokonuj± jedynie ma³ych zmian pomiêdzy ma³ymi
 | 
						|
	 upgradami wersji, np z 7.2 do 7.2.1, wtedy upgrade nie wymaga
 | 
						|
	 korzystania z dump i restore. Przy wiêkszych zmianach, np. z wersji
 | 
						|
	 7.2 do 7.3, czêsto zmianymaj± wp³yw na format przechowywanych danych.
 | 
						|
	 Zmiany te s± na tyle skomplikowane, ¿e nie utrzymujemy zgodo¶ci z
 | 
						|
	 poprzednimi wersjami PostgreSQL. dump pozwala na wydostanie danych w
 | 
						|
	 takiej postaci, w której ³atwe jest ich zaimportowanie do nowszych
 | 
						|
	 wersji bez k³opotu.
 | 
						|
	 </P>
 | 
						|
	 <P>
 | 
						|
	 W wydaniach gdzie zmiany nie dotycz± formatu danych na dysku, mo¿na
 | 
						|
	 wykorzystaæ skryptu pg_upgrade, do upgradu bez u¿ycia dump/restore.
 | 
						|
	 Dokumentacja do danego wydania zawiera informacjê czy mo¿liwe jest
 | 
						|
	 u¿ycie pg_upgrade.
 | 
						|
	 </P>
 | 
						|
    <HR>
 | 
						|
 | 
						|
    <H2 align="center">Pytania dotycz±ce u¿ywania</H2>
 | 
						|
 | 
						|
    <H4><A name="4.1">4.1</A>) Jaka jest ró¿nica pomiêdzy kursorami
 | 
						|
	     binarnymi (binary cursors) i zwyk³ymi 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 wyników
 | 
						|
	 zapytania?</H4>
 | 
						|
	 
 | 
						|
    <P>Zobacz w manualu opis polecenia <SMALL>FETCH</SMALL> lub u¿yj
 | 
						|
    polecenia <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
 | 
						|
 | 
						|
    <P>Nawet je¶li chesz pobraæ kilka pierwszych rzêdów z wyniku
 | 
						|
	 zapytania, ca³e zapytanie musi zostaæ wykonane. Byc mo¿e powiniene¶
 | 
						|
	 skorzystaæ z polecenia <SMALL>ORDER BY.</SMALL>
 | 
						|
	 Je¶li istnieje indeks który odpowiada polom okre¶lonym przez
 | 
						|
	 <SMALL>ORDER BY</SMALL>, PostgreSQL mo¿e wykorzystaæ jedynie kilka
 | 
						|
	 pierwszych rzêdów, byæ mo¿e bêdzie konieczno¶æ wykonania zapytania do
 | 
						|
	 momentu a¿ zostan± znalezione po¿±dane wyniki.</P>
 | 
						|
	 <P>
 | 
						|
	 Aby otrzymaæ losowy rz±d, u¿yj:
 | 
						|
	 <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>Mo¿esz sprawdziæ zawarto¶æ ¼róde³ <I>psql</I>, a konkretnie plik
 | 
						|
    <I>pgsql/src/bin/psql/describe.c</I>. Zawiera on polecenia
 | 
						|
    <SMALL>SQL</SMALL> które generuja wyniki komend z backslashem.
 | 
						|
    Mo¿esz tak¿e uruchomiæ <I>psql</I> z opcj±
 | 
						|
    <I>-E</I> wtedy po wykonaniu polecenia z backslashem wy¶wietlane
 | 
						|
	 bêdzie zapytanie, które w rzeczywisto¶ci jest wykonywane.</P>
 | 
						|
 | 
						|
    <H4><A name="4.4">4.4</A>) Jak usun±æ kolumnê z tabeli lub zmieniæ
 | 
						|
	 jej typ?</H4>
 | 
						|
 | 
						|
    <P>DROP COLUMNT zosta³o dodane w wersji 7.3 przy poleceniu ALTER
 | 
						|
	 TABLE DROP COLUMN. We wcze¶ñiejszych wersjach mo¿esz zrobiæ tak:
 | 
						|
	 </P>
 | 
						|
<PRE>
 | 
						|
	 BEGIN;
 | 
						|
	 LOCAL TABLE old_table;
 | 
						|
    SELECT ...  -- wybierz wszystkie kolumny poza t± jedn± której 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 mo¿esz 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 rzêdu,
 | 
						|
	      tabeli i bazy danych?</H4>
 | 
						|
	 
 | 
						|
    <P>Oto wszystkie ograniczenia:</P>
 | 
						|
<PRE>
 | 
						|
    Maksymalny rozmiar dla bazdy danych?     nieograniczony ( istniej±
 | 
						|
	 bazy danych o wielko¶ci 32 TB databases )
 | 
						|
    Maksymalny rozmiar dla tabeli?           32 TB
 | 
						|
    Maksymalny rozmiar dla rzêdu?            1.6 TB
 | 
						|
    Maksymalny rozmiar pola?                 1 GB
 | 
						|
    Maksymalna liczba rzêdów w tabeli?       nieograniczona
 | 
						|
    Maksymalna liczba kolumn w tabeli?       250-1600 w zale¿ono¶ci od typów kolumn
 | 
						|
    Makasymalna liczba indeksów na tabeli?   nieograniczona
 | 
						|
</PRE>
 | 
						|
 | 
						|
	Oczywi¶cie "nieograniczony" nie jest prawd± tak do koñca, istniej±
 | 
						|
	ograniczenia wynikaj±ce z dostêpnego miejsca na dysku, pamiêci/swapa.
 | 
						|
	Kiedy wielko¶ci te bêd± bardzo du¿e mo¿e odbiæ siê to na wydajno¶ci.
 | 
						|
 | 
						|
    <P>Maksymalny rozmiar tabeli, czyli 32 TB nie wymaga od systemu
 | 
						|
	 operacyjnego wsparcia dla du¿ych plików. Du¿e tabele s± przechowywane
 | 
						|
	 jako pliki o rozmiarze 1 GB, wiêc ograniczenia co do wielko¶ci plików
 | 
						|
	 narzucone przez system plików nie s± istotne.</P>
 | 
						|
 | 
						|
    <P>Masymalny rozmiar tabeli i maksymalna liczba kolumn mo¿e byæ
 | 
						|
	 zwiêkszona je¶li zwiêkszymy domy¶lny rozmiar bloku (block size) do
 | 
						|
	 32k.</P>
 | 
						|
 | 
						|
    <H4><A name="4.6">4.6</A>) Jak du¿o miejsca w bazie danych jest
 | 
						|
	      konieczne aby przechowywaæ dane ze zwyczajnego pliku
 | 
						|
			tekstowego?</H4>
 | 
						|
 | 
						|
    <P>Baza danych PostgreSQL mo¿e potrzebowaæ do piêciu razy wiêcej
 | 
						|
	 miejsca na przechowywanie danych z plików tekstowych ni¿ ich
 | 
						|
	 objêto¶æ.</P>
 | 
						|
 | 
						|
    <P>Jako przyk³ad mo¿emy rozwa¿yæ plik sk³adaj±cy siê z 100,000 linii
 | 
						|
	 zbudowanych z liczby ca³kowitej oraz opisu tekstowego w ka¿dej.
 | 
						|
	 Za³ó¿my, ¿e ¶rednio ka¿dy ³añcuch tekstu w linii zajmuje 20
 | 
						|
	 bajtów. Ca³y plik powinien zajmowaæ ok. 2.8 MB. Rozmiar pliku bazy danych w
 | 
						|
	 PostgreSQL zawieraj±cego te dane mozna oszacowaæ na oko³o 6.4MB:</P>
 | 
						|
 | 
						|
<PRE>
 | 
						|
    36 bajtów: nag³ówek ka¿dego rzêdu w przybli¿eniu)
 | 
						|
    24 bajty:  jedno pole int i jedno pole typu text
 | 
						|
   + 4 bajty:  wka¼nik na stronie do krotki
 | 
						|
   --------------------------------------------------
 | 
						|
    64 bajty w jednym rzêdzie
 | 
						|
 | 
						|
	Strona danych w PostgreSQL zajmuje 8192 bajtów (8 KB), wiêc:
 | 
						|
 | 
						|
   8192 bajtów na stronê
 | 
						|
   ---------------------   =  128 rzêdów na jedn± strone w bazie (zaokr±glone w dó³)
 | 
						|
     64 bajtów na rz±d
 | 
						|
 | 
						|
   100000 rzêdów danych
 | 
						|
   -----------------------  =  782 stron w bazie danych (zaokr±glone w górê)
 | 
						|
      128 rzêdów na stronê
 | 
						|
 | 
						|
782 stron w bazie * 8192 bajtów na stronê  =  6,406,144 bajtów (6.4 MB)
 | 
						|
</PRE>
 | 
						|
 | 
						|
    <P>Indeksy nie powoduj± du¿ego narzutu na zajmowane miejsce, 
 | 
						|
	 ale zawieraj± pewne dane,
 | 
						|
	 wiêc w pewnych przypadkach moga byæ ca³kiem du¿e.</P>
 | 
						|
	 <P> NULLe s± przechowywane jako mapy bitowe, wiêc u¿ywaj± bardzo ma³o
 | 
						|
	 miejsca.
 | 
						|
	 </P>
 | 
						|
 | 
						|
    <H4><A name="4.7">4.7</A>) Jak mogê sprawdziæ jakie tabele, klucze,
 | 
						|
	      bazy danych i u¿ytkownicy s± utworzeni?</H4>
 | 
						|
	 
 | 
						|
    <P><I>psql</I> ma ca³kiem du¿± ilo¶æ poleceñ z backslashem aby
 | 
						|
	 wydobyæ takie informacje. Wprowad¼ \? aby zobaczyæ ich spis. Istniej±
 | 
						|
	 tak¿e tablice systemowe rozpoczynaj±ce siê od <i>pg_</i>, zawieraj±ce
 | 
						|
	 interesuj±ce Ciebie informacje. Wykonanie <i>psql -l</i> poka¿e spis
 | 
						|
	 wszystkich baz danych.</P>
 | 
						|
 | 
						|
    <P>Obejrzyj tak¿e plik <I>pgsql/src/tutorial/syscat.source</I>.
 | 
						|
	 Zawiera on wiele z zapytañ typu <SMALL>SELECT</SMALL>, które s±
 | 
						|
	 potrzebne aby wydobyæ informacje z tablic systemowych.</P>
 | 
						|
 | 
						|
    <H4><A name="4.8">4.8</A>) Moje zapytania s± wolne lub nie u¿ywaj±
 | 
						|
	      kluczy. Dlaczego?</H4>
 | 
						|
			
 | 
						|
	Indeksy nie s± u¿ywane automatycznie przez k±¿de z zapytañ. Ideksy s±
 | 
						|
	u¿ywane jedynie gdy tabela jest odpowiedniego rozmiaru, wiêkszego ni¿
 | 
						|
	wymagany minimalny, a zapytanie wybiera jedynie ma³y procent
 | 
						|
	zawarto¶ci tabeli. Wynika to z tego, ¿e losowy dostep do dysku
 | 
						|
	powodowany przez ideksowane poszukiwanie jest czasami wolniejsze ni¿
 | 
						|
	poszukiwanie sekwencyjne bez u¿ycia kluczy.
 | 
						|
	
 | 
						|
    <P>¯eby zdecydowaæ czy indeks powinien byc u¿ywany, PostgreSQL musi
 | 
						|
	 mieæ statystyki dotycz±ce danej tabeli. S± one gromadzone przez
 | 
						|
	 u¿ycie polecenia <SMALL>VACUUM ANALYZE</SMALL>, lub poprostu
 | 
						|
	 <SMALL>ANALYZE</SMALL>. u¿ywaj±c statystyk, optymalizator wie ile
 | 
						|
	 rzêdów jest w tabeli i mo¿e lepiej okre¶liæ czy indeksy powinny byæ
 | 
						|
	 u¿yte. Statystyki mog± byæ tak¿e pomocne w okre¶leniu najlepszej
 | 
						|
	 kolejno¶ci wykonania z³±czenia (join) i jego sposobu. Gromadzenie
 | 
						|
	 statystyk powinno siê odbywaæ w okre¶lonych interwa³ach czasu
 | 
						|
	 poniewa¿ dane w tabelach zmieniaj± siê.</P>
 | 
						|
 | 
						|
    <P>Indeksy nie s± zazwyczaj u¿ywane przez <SMALL>ORDER BY</SMALL> lub
 | 
						|
	 przy wykonywaniu z³±czeñ (join). Sekwencyjne przeszukiwanie po którym
 | 
						|
	 nastêpuje sortowanie jest zazwyczaj szybsze niê wyszukiwanie za
 | 
						|
	 pomoc± indeksu na du¿ej tabeli.</P>
 | 
						|
	 Jakkolwiek <SMALL>LIMIT</SMALL> w po³±czeniu z <SMALL>ORDER BY</SMALL>
 | 
						|
	czêsto bêdzie wykorzystywa³ indeksy poniewa¿ jedynie ma³a czê¶æ z
 | 
						|
	tabeli jest zwracana. W rzeczywisto¶ci, chocia¿ MAX() i MIN() nie
 | 
						|
	u¿ywaj± indeksów, mo¿liwe jest aby zwróciæ te warto¶ci u¿ywaj±c
 | 
						|
	indeksów poprzez u¿ycie ORDER BY i LIMIT.
 | 
						|
	</P>
 | 
						|
	<PRE>
 | 
						|
    SELECT col
 | 
						|
    FROM tab
 | 
						|
    ORDER BY col [ DESC ]
 | 
						|
    LIMIT 1;					 
 | 
						|
	</PRE>
 | 
						|
	<P>
 | 
						|
	Je¶li uwa¿asz, ¿e optimizer myli siê wybieraj±c sequential scan, u¿yj
 | 
						|
	SET enable_seqscan TO 'off' i uruchom testy aby sprawdziæ czy wtym
 | 
						|
	wypadku zapytanie bêdzie szybciej wykonywane.
 | 
						|
 | 
						|
    <P>Kiedy u¿ywa siê operatorów dopasuj±cych takich jak
 | 
						|
	 <SMALL>LIKE</SMALL> lub <I>~</I>, indeksy bêd± u¿ywane jedynie w
 | 
						|
	 pewnych wypadkach:</P>
 | 
						|
	 <UL>
 | 
						|
	 <LI>Pocz±tek wyszukiwania jest oparty na pocz±tku ³añcucha 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>Pocz±tek wyszukiwania nie mo¿e siê zaczynaæ od klas znaków, 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 sposób "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 u¿ywany do indeksowania danych przestrzennych.
 | 
						|
	 Indeks hasuuj±cy nie nadaje siê do wyszukiwania odleg³o¶ci.
 | 
						|
    Natomiast indeks typu B-tree mo¿e wyszukiwaæ odleglo¶ci jedynie w
 | 
						|
	 jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z
 | 
						|
	 przestrzeniami wielo-wymiarowymi. Dla przyk³adu, je¶li zostanie
 | 
						|
	 za³o¿ony indeks typu R-tree na polu typu <I>point</I>, system mo¿e
 | 
						|
	 bardziej wydajnie odpowiadaæ na zapytania typu
 | 
						|
    "select all points within a bounding rectangle."</P>
 | 
						|
 | 
						|
    <P>¬ród³owym dokumentem opisuj±cym oryginalnie projektowanie R-tree
 | 
						|
	 indeksów 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 mo¿esz znale¼æ tak¿e 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 mo¿liwo¶ci
 | 
						|
	 indeksowania w wiêcej wymiarowych przestrzeniach. W praktyce,
 | 
						|
	 rozbudowa indeksów R-tree wymaga trochê pracy, a w tej chwili nie
 | 
						|
	 dysponujemy jak±kolwiek 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ñ ³±cz±c wiele tabel za pomoc± algorytmów
 | 
						|
	 genetycznych (Genetic Algorithm (GA)). Pozwala na u¿ywanie du¿ych
 | 
						|
	 zapytañ ³±cz±cych tabele (join queries) bez wykorzystywania
 | 
						|
	 zasobo¿ernego wyszukiwania.</P>
 | 
						|
 | 
						|
    <H4><A name="4.12">4.12</A>) Jak mogê u¿ywaæ wyra¿eñ regularnych w
 | 
						|
	      zapytaniach i zapytañ case-insensitive w wyra¿eniach
 | 
						|
			regularnych?
 | 
						|
			     Jak korzystaæ z indeksów dla zapytañ case-insensitive?</H4>
 | 
						|
 | 
						|
    <P>Operator <I>~</I> moze byæ wykorzystywany do wyszukiwania za
 | 
						|
	 pomoc± wyra¿eñ regularnych, a 
 | 
						|
    <I>~*</I> do wyszukiwania case-insensitive z wyra¿eniami
 | 
						|
	 regularnymi. 
 | 
						|
    Wariant case-insensitive dla <SMALL>LIKE</SMALL> zosta³ nazwany
 | 
						|
    <SMALL>ILIKE</SMALL>.</P>
 | 
						|
 | 
						|
    <P>Porównania case-insensitive s± zazwyczaj wykonywane w nastêpuj±cy
 | 
						|
	 sposób:</P>
 | 
						|
<PRE>
 | 
						|
    SELECT *
 | 
						|
    FROM tab
 | 
						|
    WHERE lower(col) = 'abc'
 | 
						|
   
 | 
						|
</PRE>
 | 
						|
	W tym wypadku standardowe indeksy nie bêd± u¿ywane. Mo¿esz 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>Mo¿esz to sprawdziæ, testuj±c warto¶æ kolumny warunkiem 
 | 
						|
	 <SMALL>IS NULL</SMALL> albo <SMALL>IS NOT NULL</SMALL>.</P>
 | 
						|
 | 
						|
    <H4><A name="4.14">4.14</A>) Jaka jest ró¿nica pomiêdzy ró¿nymi
 | 
						|
	 typami tekstowymi (character types)?</H4>
 | 
						|
<PRE>
 | 
						|
Type            Nazwa wewnêtrzna   Uwagi
 | 
						|
--------------------------------------------------
 | 
						|
VARCHAR(n)      varchar            rozmiar okre¶la maksymaln± d³ugo¶æ, nie ma tutaj wype³niania
 | 
						|
CHAR(n)         bpchar             wype³niane pustymi znakami do podanej d³ugo¶ci
 | 
						|
TEXT            text               bez limitu na d³ugo¶æ ³añcucha
 | 
						|
BYTEA           bytea              zmiennej d³ugo¶ci tablica bajtów (null-byte safe)
 | 
						|
"char"          char            	  1 znak
 | 
						|
</PRE>
 | 
						|
 | 
						|
    <P>Je¶li bêdziesz przegl±daæ katalogi systemowe lub komunikaty o
 | 
						|
	 b³êdach czêsto spotkasz siê z podanymi powy¿ej nazwami
 | 
						|
	 wewnêtrznymi.</P>
 | 
						|
 | 
						|
    <P>Pierwsze cztery typy powy¿ej to tzw typy "varlena" (np. pierwsze
 | 
						|
	 cztery bajty na dysku to d³ugo¶æ, po których jest data). Dlatego
 | 
						|
	 faktyczna d³ugo¶c takiego ³añcucha jest trochê wiêksza ni¿
 | 
						|
	 zadeklarowany rozmiar. Te typy tak¿e podlegaj± kompresji lub mog± byæ
 | 
						|
	 przechowywane out-of-line jako <SMALL>TOAST</SMALL>, wiêc faktyczne
 | 
						|
	 zu¿ycie miejsca na dysku mo¿e byæ mniejsze ni¿ oczekiwane.</P>
 | 
						|
 | 
						|
	 <SMALL>VARCHAR(n)</SMALL> jest
 | 
						|
	 najodpowiedniejszy do przechowywania ³añcuchów o ró¿nej d³ugo¶ci
 | 
						|
	 ale okre¶la on maksymaln± jego d³ugo¶æ. 
 | 
						|
	 
 | 
						|
	 <SMALL>TEXT</SMALL> jest najlepszy dla ³añcuchów o dowolnej d³ugo¶ci,
 | 
						|
	 nie przekraczaj±cej 1GB.</P>
 | 
						|
 | 
						|
	<P>
 | 
						|
	<SMALL>CHAR(n)</SMALL> jast najlepszym typem do przechowywania
 | 
						|
	 ³añcuchów o tej samej d³ugo¶ci. CHAR(n) wype³nia dane do ¿adanej
 | 
						|
	 d³ugo¶ci, podczas gdy VARCHAR(n) przechowuje jedynie dane
 | 
						|
	 dostarczone.
 | 
						|
	
 | 
						|
	<SMALL>BYTEA</SMALL> s³u¿y do przechowywania danych binarnych,
 | 
						|
	 w szczególno¶ci dla danych zawieraj±cych <SMALL>NULL</SMALL> bajty.
 | 
						|
	 Wszystkie typy opisane tutaj maja podobne charakterystyki je¶li
 | 
						|
	 chodzi o wydajno¶æ.</P>
 | 
						|
 | 
						|
    <H4><A name="4.15.1">4.15.1</A>) Jak mogê utworzyæ pole które samo
 | 
						|
	      zwiêksza 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 przt³umaczone 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>
 | 
						|
    Wiêcej informacji o sekwencjach znajdziesz w manualu o
 | 
						|
	 <I>create_sequence</I>. Mo¿esz tak¿e u¿yæ  pola <I>OID</I> jako
 | 
						|
	 unikalnej warto¶ci dla ka¿dego rzêdu danych. Je¶li bêdziesz
 | 
						|
	 potrzebowa³ z backupowaæ dane robi±c dump bazy i odtworzyæ j±, musisz
 | 
						|
	 u¿yc <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 warto¶ci typu 
 | 
						|
	 <SMALL>SERIAL</SMALL> z sekwencji za pomoc± funkcji <I>nextval()</I>
 | 
						|
    <I>zanim</I> zostanie wstawiona, a pó¼niej nale¿y jej u¿yæ. U¿ywaj±c
 | 
						|
	 przyk³adu z tabeli z punktu <A href="#4.15.1">4.15.1</A>, mo¿e to
 | 
						|
	 wygl±daæ w Perlu na przyk³ad w ten sposób:</P>
 | 
						|
 | 
						|
<PRE>
 | 
						|
    new_id = output of "SELECT nextval('person_id_seq')"
 | 
						|
    INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
 | 
						|
</PRE>
 | 
						|
	Bêdziesz mia³ wtedy t± warto¶æ przechowan± w zmiennej 
 | 
						|
    <CODE>new_id</CODE> do u¿ytku w innych zapytaniach (np. jako klucz
 | 
						|
	 obcy do tabeli <CODE>person</CODE>). Warto zwróciæ uwagê, ¿e nazwa
 | 
						|
	 automatycznie utworzonej sekwencji
 | 
						|
    <SMALL>SEQUENCE</SMALL> bêdzie nastêpuj±ca:
 | 
						|
    <<I>tabela</I>>_<<I>kolumnatypuserial</I>>_<I>seq</I>,
 | 
						|
	 gdzie 
 | 
						|
    <I>tabela</I> i <I>kolumnatypuserial</I> s± nazwami Twojej tabeli i
 | 
						|
	 Twojej kolumny typu <SMALL>SERIAL</SMALL>. 
 | 
						|
 | 
						|
    <P>Inne rozwi±zanie to u¿ycie funkcji <I>currval</I>() na pola typu
 | 
						|
    <SMALL>SERIAL</SMALL> po dodaniu nowej warto¶ci do rzêdu zawieraj±cego
 | 
						|
	 kolumnê typu <SMALL>SERIAL</SMALL> z wstawion± domy¶lnie warto¶ci±,
 | 
						|
	 np.</P>
 | 
						|
<PRE>
 | 
						|
    INSERT INTO person (name) VALUES ('Blaise Pascal');
 | 
						|
    new_id = output of "SELECT currval('person_id_seq')";
 | 
						|
</PRE>
 | 
						|
	Ostatecznie mo¿esz u¿yæ <A href="#4.16"><SMALL>OID</SMALL></A>
 | 
						|
	zwracanej po wykonaniu <SMALL>INSERT</SMALL>, chocia¿ to jest najmniej
 | 
						|
	przeno¶ne rozwi±zanie.
 | 
						|
   W Perlu, wykorzystuj±c bibliotekê DBI z modu³em Edmunda Mergla
 | 
						|
	DBD::Pg, oid jest dostêpny poprzez <I>$sth->{pg_oid_status}</I> po
 | 
						|
	wykonaniu <I>$sth->execute()</I>. 
 | 
						|
 | 
						|
    <H4><A name="4.15.3">4.15.3</A>) Czy u¿ycie <I>currval()</I> i
 | 
						|
	     <I>nextval()</I> nie doprowadzi do race condition z innymi
 | 
						|
		      u¿ytkownikami?</H4>
 | 
						|
 | 
						|
    <P>Nie. currval() zwraca bie¿±c± warto¶æ przypisan± przez Twój
 | 
						|
	 backend, a nie przez wszystkich u¿ytkowników.</P>
 | 
						|
 | 
						|
    <H4><A name="4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie s±
 | 
						|
	      ponownie u¿ywane przy przerwaniu transakcji?
 | 
						|
	    Sk±d siê bior± luki w numerowaniu kolumny tabeli
 | 
						|
				     sekwancjami/SERIALem?</H4>
 | 
						|
 | 
						|
    <P>Aby poprawiæ zbie¿no¶æ (concurrency), warto¶ci sekwencji s±
 | 
						|
	 podawane dzia³aj±cym transakcjom kiedy tego potrzebuj± i nie s±
 | 
						|
	 blokowane dopóki transakcja siê nie zakoñczy. 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 rozwi±zaniem problemu
 | 
						|
	 unikalnych numerów rzêdów. Ka¿dy rz±d 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 u¿ytkownika sa równe lub wiêksze
 | 
						|
	 podanej wcze¶niej warto¶ci. Domy¶lnie
 | 
						|
    wszystkie <SMALL>OID</SMALL>y s± unikalne nie tylko w pojedyñczej
 | 
						|
	 tabeli czy bazie danych ale w ca³ej instalacji PostgreSQL.</P>
 | 
						|
 | 
						|
    <P>PostgreSQL u¿ywa <SMALL>OIDów</SMALL> w swoim wewnêtrznym systemie
 | 
						|
	 tabel, aby mo¿na by³o je ³±czyæ.
 | 
						|
    Te <SMALL>OIDy</SMALL> mog± byc u¿ywane aby identyfikowac rzêdy w
 | 
						|
	 tabelach i wykorzystywaæ je w z³±czeniach tych tabel. Zaleca siê aby¶
 | 
						|
	 u¿ywa³ typu <SMALL>OID</SMALL> aby przechowywaæ warto¶ci
 | 
						|
    <SMALL>OID</SMALL>. Mo¿esz utworzyæ indeks na polu 
 | 
						|
    <SMALL>OID</SMALL> aby dostêp do niego by³ szybszy.</P>
 | 
						|
 | 
						|
    <P><SMALL>OID</SMALL> s± przypisane do wszystkich rzêdów z jednego
 | 
						|
	 g³ównego miejsca i u¿ywane sa przez wszystkie bazy danych. Je¶li
 | 
						|
	 chcia³by¶ zmieniæ <SMALL>OID</SMALL> na co¶ innego, lub je¶li
 | 
						|
	 chcia³by¶ 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
 | 
						|
	 ca³kowite i skoñcz± siê po osi±gniêciu czterech miliardów. Nikt jak
 | 
						|
	 dot±d nie zg³osi³ aby co¶ takiego siê stalo, ale mamy zamiar pozbyæ
 | 
						|
	 siê tego ograniczenia zanim kto¶ to zg³osi.</P>
 | 
						|
 | 
						|
    <P><SMALL>TID</SMALL> s± u¿ywane aby zidentyfikowaæ konkretne rzêdy z
 | 
						|
	 blokami i warto¶ci± ofsetów. <SMALL>TIDy</SMALL> zmieniaj± siê wraz
 | 
						|
	 ze zmianami rzêdów. Sa u¿ywane przez indeksy, aby wskazywaæ do
 | 
						|
	 fizycznych rzêdów.</P>
 | 
						|
 | 
						|
    <H4><A name="4.17">4.17</A>) Jakie jest znaczenie niektórych terminów
 | 
						|
	 w PostgreSQL?</H4>
 | 
						|
 | 
						|
    <P>W czê¶ci kodu ¼ród³owego i starszej dokumentacji u¿ywamy terminów,
 | 
						|
	 które maj± bardziej ogólne znaczenie. Oto niektóre 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ê terminów zwi±zanych z bazami danych mo¿esz 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>) Sk±d bierze siê ten b³±d <I>"ERROR:
 | 
						|
	 Memory exhausted in AllocSetAlloc()"</I>?</H4>
 | 
						|
 | 
						|
    <P>
 | 
						|
	 Prawdopodobnie wyczerpa³a Ci siê pamiêæ wirtualna (virtual memory) 
 | 
						|
	 w systemie lub Twój kernel ma zbyt nisko
 | 
						|
	 ustawione limity dla pewnych zasobów. Spróbuj wykonaæ nastêpuj±ce
 | 
						|
	 polecenia zanim uruchomisz <I>postmaster'a</I>:</P>
 | 
						|
<PRE>
 | 
						|
    ulimit -d 262144
 | 
						|
    limit datasize 256m
 | 
						|
</PRE>
 | 
						|
	W zale¿no¶ci od shell'a jakiego u¿ywasz jedno z tych poleceñ mo¿e nie
 | 
						|
	zadzia³aæ, ale to ustawienie pozwoli ustawiæ segment danych dla
 | 
						|
	procesu znacznie wiêkszy i byæ mo¿e pozwoli wykonaæ zapytanie.
 | 
						|
	To polecenie zadzia³a dla bie¿±cego procesu oraz wszytkich podprocesów
 | 
						|
	utworzonych po wykonaniu polecenia. Je¶li ten problem wystêpuje z
 | 
						|
	klientem <SMALL>SQL</SMALL>, poniewa¿ backend zwraca zbyt du¿o danych,
 | 
						|
	spróbuj wykonaæ to polecenie przed uruchomieniem klienta.
 | 
						|
 | 
						|
    <H4><A name="4.19">4.19</A>) Jak sprawdziæ jakiej wersji PostgreSQL
 | 
						|
	     u¿ywam?</H4>
 | 
						|
 | 
						|
    <P>W <I>psql</I>, wpisz <CODE>select version();</CODE></P>
 | 
						|
 | 
						|
    <H4><A name="4.20">4.20</A>) Dlaczego operacje, które wykonujê na
 | 
						|
	      du¿ych obiektach "large-object" zwracaj± komunikat:
 | 
						|
			    <I>"invalid large obj descriptor"</I>?</H4>
 | 
						|
 | 
						|
    <P>Musisz u¿yæ <CODE>BEGIN WORK</CODE> i <CODE>COMMIT</CODE>
 | 
						|
    przed i po u¿yciu uchwytu do du¿ego obiektu, tzn. musisz nimi otoczyæ
 | 
						|
    funkcje <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
 | 
						|
 | 
						|
    <P>Obecnie PostgreSQL u¿ywj±c "rule" zamyka uchwyt do du¿ego obiektu
 | 
						|
	 przy ka¿dym wywo³aniu "commit". Wiêc pierwsze próba zrobienia
 | 
						|
	 czegokolwiek z uchwytem spowoduje wypisanie: <I>invalid large obj 
 | 
						|
	 descriptor</I>. Kod, który do tej pory dzia³a³ (przynajmniej
 | 
						|
	 wiêkszo¶æ razy) bêdzie teraz generowa³ informacjê o b³êdzie je¶li nie
 | 
						|
	 bêdziesz korzysta³ z transakcji.</P>
 | 
						|
 | 
						|
    <P>Je¶li u¿ywasz interfejsu klienta jak <SMALL>ODBC</SMALL>  byæ mo¿e
 | 
						|
	 bêdziesz musia³ ustawiæ <CODE>auto-commit off.</CODE></P>
 | 
						|
 | 
						|
    <H4><A name="4.21">4.21</A>) Jak stworzyæ kolumnê której domy¶ln±
 | 
						|
	      warto¶ci± bêdzie bie¿±cy czas?</H4>
 | 
						|
 | 
						|
    <P>U¿yj <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 u¿ywaj±ce
 | 
						|
	     <CODE><SMALL>IN</SMALL></CODE> sa takie wolne?</H4>
 | 
						|
 | 
						|
    <P>W wersjach wcze¶niejszych ni¿ 7.4 ³±czymy podzapytania w outer queries 
 | 
						|
	 poprzez sekwencyjne przeszukiwanie wyników podzapytania dla ka¿dego rzêdu 
 | 
						|
	 z outer query. Je¶li podzapytanie zwraca jedynie kilka rzêdów a
 | 
						|
	 zewnêtrzne zapytanie zwraca ich wiele, IN jest najszybsze.
 | 
						|
	 Aby przyspieszyæ inne zapytania mo¿na zast±piæ <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 rozwi±zanie by³o szybkie, subcol powinna byæ kolumn±
 | 
						|
	indeksowan±.
 | 
						|
	</P>
 | 
						|
	<P>
 | 
						|
	W wersji 7.4 i pó¼niejszych, IN w rzeczywisto¶ci u¿ywa tej samej
 | 
						|
	wyrafinowanej techniki ³±czenia jak normalne zapytania i jest
 | 
						|
	preferowane nad u¿ywaniem EXISTS.
 | 
						|
	</P>
 | 
						|
    <H4><A name="4.23">4.23</A>) Jak wykonaæ "outer join"?</H4>
 | 
						|
 | 
						|
    <P>PostgreSQL ma zaimplementowane outer join
 | 
						|
	 wykorzystuj±c standardow± sk³adniê SQL. Poni¿ej dwa przyk³ady:</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 tak¿e zwróc± niepo³±czone rzêdy w t1 (te, które nie pasuj± w t2).
 | 
						|
    <SMALL>RIGHT</SMALL> join doda³by niepo³±czone rzêdy z tabeli t2.
 | 
						|
    <SMALL>FULL</SMALL> join zwróci³by rzêdy plus dodatkowo wszystkie
 | 
						|
	 rzêdy z tabel t1 i t2. S³owo <SMALL>OUTER</SMALL> jest opcjonalne i
 | 
						|
	 jest dodawane domy¶lnie przy
 | 
						|
    <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL>, i <SMALL>FULL</SMALL>
 | 
						|
	 join'ach. Zwyk³e join'y s± nazywane <SMALL>INNER</SMALL> joins.</P>
 | 
						|
 | 
						|
    <P>W poprzednich wersjach "outer joins" mog± byæ zasymulowane poprzez
 | 
						|
	 u¿ycie slowa kluczowego
 | 
						|
    <SMALL>UNION</SMALL> i <SMALL>NOT IN</SMALL>. Dla przyk³adu, ³±cz±c
 | 
						|
	 tabele <I>tab1</I> i <I>tab2</I>, nastêpuj±ce 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 u¿ywaj±ce kilku
 | 
						|
	      baz danych jednocze¶nie?</H4>
 | 
						|
 | 
						|
    <P>Nie ma takiej mo¿liwo¶ci aby w zapytaniu odpytawaæ inn± baze danych
 | 
						|
	 poza bie¿±c±. Poniewa¿ PostgreSQL ³aduje specyficzne dla bazy danych
 | 
						|
	 katalogi systemowe, nie jest do koñca jasne jak zapytanie pomiêdzy
 | 
						|
	 ró¿nymi bazami danych powinno siê zachowywaæ.</P>
 | 
						|
	 
 | 
						|
    <P><I>contrib/dblink</I> pozwala na wykonywanie zapytañ poprzez ró¿ne
 | 
						|
	 bazy danych wywo³uj±c odpowiednie funkcje. Oczywi¶cie klient mo¿e ³±czyæ 
 | 
						|
	 siê z ró¿nymi bazami danych i ³±czyæ informacjê w ten sposób uzyskan±
 | 
						|
	 po stronie klienta.</P>
 | 
						|
 | 
						|
    <H4><A name="4.25">4.25</A>) Jak zwróciæ w funkcji wiele rzêdów lub
 | 
						|
	      kolumn?</H4>
 | 
						|
 | 
						|
     <P>Mo¿esz w ³atwy sposób zwracaæ wiele rzêdów lub kolumn u¿ywaj±c
 | 
						|
	  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 sposób pewny
 | 
						|
	     tworzyæ/usuwaæ tabel tymczasowych w funkcjach PL/PgSQL?</H4>
 | 
						|
	<P>
 | 
						|
	PL/PgSQL przechowuje w cache zawarto¶æ funkcji, niepo¿±danym efektem tego
 | 
						|
	jest to, ¿e gdy taka funkcja korzysta z tabel tymczasowych, które s±
 | 
						|
	pó¼niej kasowane i odtwarzane, a funkcja wywo³ywana jest ponownie,jej
 | 
						|
	wywo³anie nie powiedzie siê poniewa¿ cachowana funkcja wci±¿ bêdzie
 | 
						|
	wskazywaæ na stara tablicê tymczasow±. Rozwi±zaniem tego problemu jest
 | 
						|
	u¿ywanie EXECUTE aby korzystaæ z tabel tymczasowych w PL/PgSQL. To
 | 
						|
	spowoduje, ¿e zapytanie bêdzie parsowane przy ka¿dym wywo³aniu
 | 
						|
	funkcji.
 | 
						|
	</P>
 | 
						|
	
 | 
						|
	<H4><A name="4.27">4.27) Jakie s± mo¿liwo¶ci 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 mo¿e 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 mo¿liwo¶ci szyfrowania oferuje
 | 
						|
	PostgreSQL?</H4>
 | 
						|
	<P>
 | 
						|
	<UL>
 | 
						|
	<LI>contrib/pgcrypto zawiera wiele funkcji za pomoc±, których mo¿emy u¿ywaæ
 | 
						|
	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 wystêpowaæ w pliku pg_hba.conf, oraz
 | 
						|
	sslmode nie mo¿e byæ wy³±czone w kliencie. (Warto zwróciæ uwagê, ¿e
 | 
						|
	mo¿liwe jest tak¿e u¿ywanie transportów szyfruj±ców przez strony
 | 
						|
	trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem dla SSL
 | 
						|
	przez PostgreSQL).
 | 
						|
	<LI>Has³a u¿ytkowników bazy danych s± automatycznie szyfrowane od
 | 
						|
	wersji 7.3. W poprzednich wersjach, nale¿y t± funkcjonalno¶æ poprzez
 | 
						|
	w³±czenie opcji PASSWORD_ENCRYPTION w postgresql.conf. 
 | 
						|
	<LI>Serwer mo¿e dzia³aæ u¿ywaj±c szyfrowanego systemu plików.
 | 
						|
	</UL>
 | 
						|
</P>
 | 
						|
 | 
						|
    <H2 align="center">Rozwijanie PostgreSQL</H2>
 | 
						|
 | 
						|
    <H4><A name="5.1">5.1</A>) Napisa³em w³asn± funkcjê. Kiedy u¿yjê jej
 | 
						|
	 w <I>psql</I>, program zrzuca pamiêæ (dump core)?</H4>
 | 
						|
 | 
						|
    <P>Problem mo¿e byæ spowodowany przez bardzo wiele rzeczy. Spróbuj
 | 
						|
	 najpierw przetestowaæ Twoj± funkcjê w samodzielnie dzia³aj±cym programie.
 | 
						|
	 </P>
 | 
						|
 | 
						|
    <H4><A name="5.2">5.2</A>) Jak mogê dodaæ/zg³osiæ nowe typy czy
 | 
						|
	 funkcje do PostgreSQL?</H4>
 | 
						|
 | 
						|
    <P>Wy¶lij Twoje propozycje na listê mailow± <I>pgsql-hackers</I>,
 | 
						|
    wtedy prawdopodobnie Twój kod znajdzie siê w katalogu <I>contrib/</I>.</P>
 | 
						|
 | 
						|
    <H4><A name="5.3">5.3</A>) Jak napisaæ funkcjê C zwracaj±c± krotkê
 | 
						|
	      (tuple)?</H4>
 | 
						|
 | 
						|
	<P>
 | 
						|
	W wersjach PostgreSQL od numeru 7.3, funckje zwracaj±ce tabele s± w
 | 
						|
	pêlni wspierane w C, PL/PgSQL i SQL. Sprawd¼ w Programmer's Guide aby
 | 
						|
	uzyskaæ wiêcej informacji. Przyk³ad funkcji napisanej w C zwracaj±cej
 | 
						|
	tabelê zosta³ umieszczony w <I>contrib/tablefunc</I>.
 | 
						|
	</P>
 | 
						|
 | 
						|
    <H4><A name="5.4">5.4</A>)  Zmieni³em plik ¼ród³owy. Dlaczego po
 | 
						|
	      rekompilacji nie widaæ zmiany?</H4>
 | 
						|
 | 
						|
    <P>Pliki <I>Makefiles</I> nie maj± dorzuconych odpowiednich
 | 
						|
	 zale¿no¶ci dla plików nag³ówkowych (include files). Wykonaj najpierw
 | 
						|
	 <I>make clean</I>, a nastêpnie ponownie <I>make</I>.
 | 
						|
    Je¶li u¿ywasz <SMALL>GCC</SMALL> mo¿esz u¿yæ opcji
 | 
						|
    <I>--enable-depend</I> przy wykonywaniu <I>configure</I> aby
 | 
						|
	 kompilator móg³ okre¶liæ zale¿no¶ci samodzielnie.
 | 
						|
	 </P>
 | 
						|
  </BODY>
 | 
						|
</HTML>
 | 
						|
 |