Select Git revision
FAQ_polish.html
-
Bruce Momjian authoredBruce Momjian authored
FAQ_polish.html 61.85 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: Thu Apr 18 00:44:51 EDT 2002</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/faq-english.html">http://www.PostgreSQL.org/docs/faq-english.html</A>.</P>
<P>Odpowiedzi na pytania dotyczce konkretnych systemw operacyjnych
mona znale pod adresem:
<A href=
"http://www.PostgreSQL.org/users-lounge/docs/faq.html">http://www.PostgreSQL.org/users-lounge/docs/faq.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?
Narzdzie do raportowania? Interfejs dla "embedded query language"?<BR>
<A href="#2.4">2.4</A>) Za pomoc jakich jzykw programowania mona
si komunikowa z PostgreSQL?<BR>
<H2 align="center">Pytania administratora</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 komunikato 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>) Co to za pliki typu <I>pg_sorttempNNN.NN</I>
, ktre znajduj si w katalogu z plikami bazy danych?<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?<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>
<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>.</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
poniej jak si przyczy). Ta grupa ludzi jest odpowiedzialna za
cay rozwj PostgreSQL.</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-2002, 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> C, 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>win31.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/faq-mswin.html">MS Windows FAQ</A>
na naszych stronach. Nie planujemy tworzy portu przeznaczonego
docelowo dla platformy Microsoft.</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://www.postgresql.org/users-lounge/commercial-support.html">http://www.postgresql.org/users-lounge/commercial-support.html</A>.</P>
<H4><A name="1.7">1.7</A>) Jaka jest ostatnia dostpna wersja?</H4>
<P>Ostatnia dostpna wersja PostgreSQL to 7.2.1.</P>
<P>Planujemy publikowanie kolejnych wersji co cztery miesice.</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/users-lounge/docs/">http://www.PostgreSQL.org/users-lounge/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://www.postgresql.org/books/">http://www.postgresql.org/books/</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,
aggregatw 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, majc pewno e s to poprawki
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 blokowaiem (lock contention).<BR>
<BR>
</DD>
<DT><B>Wydajno</B></DT>
<DD>PostgreSQL dziaa w dwch trybach. Standardowy tryb <I>fsync</I>
zrzuca kad zakoczon transakcj na dysk, gwarantujc w ten
sposb to, e jeli system operacyjny si zawiesi lub straci
zasilanie wcigu kilku nastepnych sekund, wszystkie Twoje dane
zostan bezpiecznie zapisane na dysku. W tym trybie, jestemy
wolniejsi ni wikszo komercyjnych baz danych, czciowo dlatego
e niewiele z nich wykonuje taki sposb zapisywania danych jako
domylne ustawienie.
W trybie <I>no-fsync</I> z reguy jestemy szybsi ni komercyjne
bazy danych, chocia w tym wypadku zawieszenie si systemu moe
spowodowa uszkodzenie danych. Pracujemy nad tym, aby stworzy
poredni tryb, ktry powoduje mniejsz redukcj wydajnoci ni tryb
fsync i pozwoli na integralno danych w przecigu 30 sekund do
zaamania si systemu operacyjnego.<BR>
<BR>
Porwnujc do MySQL czy innych prostych baz danych, jestemy
wolniejsi przy wykonywaniu insertw/updatw przez narzut
spowodowany przez transakcje. Oczywicie MySQL nie posiada adnej z
wymienionych wyej <I>moliwoci</I>. PostgreSQL zosta zbudowany
aby by DBMS elastycznym i bogatym z rnorakie moliwoci,
aczkolwiek dbamy, aby poprawia jego wydajno poprzez analiz
kodu rdowego i profilowanie. Ciekawe porwnanie PostgreSQL i MySQL
mona znale pod adresem <A href=
"http://openacs.org/why-not-mysql.html">http://openacs.org/why-not-mysql.html</A><BR>
<BR>
Kade poczenie klienta jest obsugiwane przez nas poprzez
stworzenie nowego procesu Unixowego. Procesy backendu dziel
bufory danych oraz informacj o blokadach. Uywajc wielu
procesorw, rne backendy mog bez problemu dziaa na rnych
procesorach.<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 conajmniej 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, tzn. szeciu lat. 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 rznych 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://www.pgsql.com/pg_goodies">http://www.pgsql.com/pg_goodies</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>
<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>PsqlODBC jest doczony do rde. Wicej informacji na jego temat
moesz znale pod adresem: <A href=
"ftp://ftp.PostgreSQL.org/pub/odbc/">ftp://ftp.PostgreSQL.org/pub/odbc/</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 plaformie 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>
<P>Sprawd take rozdzia o <A href=
"http://www.postgresql.org/devel-corner/docs/programmer/odbc.html">ODBC
w "Programmer's Guide"</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>Inny znajduje si pod adresem: <A href=
"http://www.phone.net/home/mwm/hotlist/">http://www.phone.net/home/mwm/hotlist/.</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.</P>
<H4><A name="2.3">2.3</A>) Czy istnieje jakie GUI dla PostgreSQL?
Narzdzie do raportowania? Interfejs dla "embedded query
language"?</H4>
<P>Mamy cakiem miy interfejs graficzny, ktry zosta nazwany
<I>pgaccess</I> i jest on dostarczany jako cz rde.
<I>pgaccess</I> posiada take generator raportw. Mona go znale
pod adresem <A href=
"http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A></P>
<P>Udostpnilimy take <I>ecpg</I>, ktry jest "embedded SQL query
language interface" dla jzyka C.</P>
<H4><A name="2.4">2.4</A>) Za pomoc jakich jzykw programowania
mona si komunikowa z PostgreSQL?</H4>
<P>Mamy wsparcie dla:</P>
<UL>
<LI>C (libpq)</LI>
<LI>C++ (libpq++)</LI>
<LI>Embedded C (ecpg)</LI>
<LI>Java (jdbc)</LI>
<LI>Perl (perl5)</LI>
<LI>ODBC (odbc)</LI>
<LI>Python (PyGreSQL)</LI>
<LI>TCL (libpgtcl)</LI>
<LI>C Easy API (libpgeasy)</LI>
<LI>Embedded <SMALL>HTML</SMALL> (<A href=
"http://www.php.net">PHP z http://www.php.net</A>)</LI>
</UL>
<HR>
<H2 align="center">Pytania administratora</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
powodowany 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>
<P>W wersjach PostgreSQL wczeniejszych ni 6.5, maksymalna liczba
backendw bya ustawiona na 64, a zmiana tej wartoci wymaga
rekompliacji po zmianie staej MaxBackendId w pliku
<I>include/storage/sinvaladt.h</I>.</P>
<H4><A name="3.9">3.9</A>) Co to s za pliki typu:
<I>pg_sorttempNNN.NN</I>,
ktre znajduj si w katalogu z plikami bazy danych?</H4>
<P>S to 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
paratmetr 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>
<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>
<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?</H4>
<P>Nie mamy zaimplementowanego <SMALL>ALTER TABLE DROP
COLUMN,</SMALL> ale moesz zrobi tak:</P>
<PRE>
SELECT ... -- wybierz zawarto wszystkich kolumn 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>
<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 500 GB databases )
Maksymalny rozmiar dla tabeli? 16 TB
Maksymalny rozmiar dla rzdu? nieograniczony w 7.1 i pniejszych
Maksymalny rozmiar pola? 1 GB w 7.1 and later
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 16 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>
<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 indeksw poniewz jedynie maa czc z
tabeli jest zwracana.
<P>Kiedy uywa si operatorw dopasujcych takich jak
<SMALL>LIKE</SMALL> lub <I>~</I>, indeksy bd uywane jedynie jeli
pocztek wyszukiwania jest oparty na pocztku acucha tekstu.
Dlatego, aby uywac indeksw,
dopasowania operatorem <SMALL>LIKE</SMALL> nie mog si zaczyna
<I>%</I>, a dopasowania operatorem <I>~</I> (dopasowania regularne)
musz si zaczyna znakiem specjalnym <I>^</I>.</P>
<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> i jest dostpny w PostgreSQL 7.1 i pniejszych
wersjach.</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
--------------------------------------------------
"char" char 1 znak
CHAR(#) bpchar wypeniane pustymi znakami do podanej dugoci
VARCHAR(#) varchar rozmiar okrela maksymaln dugo, nie ma tutaj wypeniania
TEXT text bez limitu na dugo acucha
BYTEA bytea zmiennej dugoci tablica bajtw (null-byte safe)
</PRE>
<P>Jeli bdziesz przeglda katalogi systemowe lub komunikaty o
bdach czsto spotkasz si z podanymi powyej nazwami
wewntrznymi.</P>
<P>Ostatnie 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>
<P><SMALL>CHAR()</SMALL> jast najlepszym typem do przechowywania
acuchw o tej samej dugoci. <SMALL>VARCHAR()</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.
<SMALL>BYTEA</SMALL> suy do przechowywania danych binarnych,
w szczeglnoci dla danych zawierajcych <SMALL>NULL</SMALL> bajty.</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://www.comptechnews.com/~reaster/dbdesign.html">http://www.comptechnews.com/~reaster/dbdesign.html</A></P>
<H4><A name="4.18">4.18</A>) Skd bierze si ten bd <I>"ERROR:
Memory exhausted in AllocSetAlloc()"</I>?</H4>
<P>Jeli uywasz wersji starszej ni 7.1, upgrade moe rozwiza ten
problem. Jest take mozliwe, e po prostu 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>Obecnie czymy podzapytania w outer queries poprzez sekwencyjne
przeszukiwanie wynikw podzapytania dla kadego rzdu z outer query.
Mona to omin zastpujc <CODE>IN</CODE> przez
<CODE>EXISTS</CODE>:</P>
<PRE>
<CODE>SELECT *
FROM tab
WHERE col1 IN (SELECT col2 FROM TAB2)
</CODE>
</PRE>
na:
<PRE>
<CODE>SELECT *
FROM tab
WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
</CODE>
</PRE>
Mamy zamiar poprawi to ograniczenie w przyszych wydaniach.
<H4><A name="4.23">4.23</A>) Jak wykona "outer join"?</H4>
<P>PostgreSQL 7.1 i pniejsze wersje maj zaimplementowane outer join
wykorzystujc standardow skadnie 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>Oczywicie klient moe czy si z rnymi bazami danych i czy
informacj w ten sposb uzyskan.</P>
<H4><A name="4.25">4.25</A>) Jak zwrci w funkcji wiele rzdw lub
kolumn?</H4>
<P>Moesz zwraca zbiory z funkcji PL/pgSQL uywajc
<i>refcursors</i>. Zobacz <a
href="http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html">
http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html,</a>
sekcj 23.7.3.3.</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>To wymaga wysiku tak olbrzymiego, e nawet autorzy nigdy tego nie
prubowali, chocia z zaloe wynika, e jest to moliwe.</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
</BODY>
</HTML>