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 >server.log 2>&1 &
</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:
<<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 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->{pg_oid_status}</I> po
wykonaniu <I>$sth->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>