1449 lines
62 KiB
HTML
1449 lines
62 KiB
HTML
|
<!DOCTYPE html PUBLIC "-//W3C//DTD html 4.01 transitional//EN">
|
|||
|
|
|||
|
<HTML>
|
|||
|
<!-- DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN" -->
|
|||
|
<!-- HTML -->
|
|||
|
|
|||
|
<HEAD>
|
|||
|
<META name="generator" content="HTML Tidy, see www.w3.org">
|
|||
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
|
|||
|
<TITLE>PostgreSQL FAQ</TITLE>
|
|||
|
</HEAD>
|
|||
|
|
|||
|
<BODY bgcolor="#ffffff" text="#000000" link="#ff0000" vlink="#a00000"
|
|||
|
alink="#0000ff">
|
|||
|
|
|||
|
<H1>Frequently Asked Questions (FAQ) o PostgreSQL</H1>
|
|||
|
|
|||
|
<P>Ostatnia aktualizacja: 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>T<EFBFBD>umaczenie: Marcin Mazurek (<A href=
|
|||
|
"mailto:m.mazurek@netsync.pl">m.mazurek@netsync.pl</A>)<BR>
|
|||
|
</P>
|
|||
|
|
|||
|
|
|||
|
<P>Najbardziej aktualn<6C> wersj<73> tego dokumentu mo<6D>na znale<6C><65> 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 dotycz<63>ce konkretnych system<65>w operacyjnych
|
|||
|
mo<6D>na znale<6C><65> 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 og<6F>lne</H2>
|
|||
|
<A href="#1.1">1.1</A>) Co to jest PostgreSQL? Jak to wymawia<69>?<BR>
|
|||
|
<A href="#1.2">1.2</A>) Jak<61> licencj<63> chroniony jest PostgreSQL?<BR>
|
|||
|
<A href="#1.3">1.3</A>) Na jakich systemach Unixowych dzia<69>a
|
|||
|
PostreSQL?<BR>
|
|||
|
<A href="#1.4">1.4</A>) Na jakich nie-Unixowych systemach dzia<69>a
|
|||
|
PostgreSQL?<BR>
|
|||
|
<A href="#1.5">1.5</A>) Sk<53>d mog<6F> <20>ci<63>gn<67><6E> PostgreSQL?<BR>
|
|||
|
<A href="#1.6">1.6</A>) Gdzie mo<6D>na szuka<6B> wsparcia technicznego?<BR>
|
|||
|
<A href="#1.7">1.7</A>) Jaka jest ostatnia dost<73>pna wersja?<BR>
|
|||
|
<A href="#1.8">1.8</A>) Jaka dokumentacja jest dost<73>pna?<BR>
|
|||
|
<A href="#1.9">1.9</A>) Gdzie mog<6F> znale<6C><65> informacj<63> o znanych
|
|||
|
b<><62>dach czy brakuj<75>cych rozwi<77>zanich?<BR>
|
|||
|
<A href="#1.10">1.10</A>) Jak mog<6F> si<73> nauczy<7A> <SMALL>SQL</SMALL>?<BR>
|
|||
|
<A href="#1.11">1.11</A>) Czy PostgreSQL ma rozwi<77>zany problem Y2K?<BR>
|
|||
|
<A href="#1.12">1.12</A>) Jak mog<6F> si<73> przy<7A><79>czy<7A> do grupy os<6F>b
|
|||
|
bezpo<70>rednio pracuj<75>cych nad rozwojem PostgreSQL?<BR>
|
|||
|
<A href="#1.13">1.13</A>) Jak mog<6F> zg<7A>asza<7A> b<><62>dy?<BR>
|
|||
|
<A href="#1.14">1.14</A>) Jak mo<6D>na por<6F>wna<6E> PostgreSQL w stosunku
|
|||
|
do innych <SMALL>DBMS</SMALL>?<BR>
|
|||
|
<A href="#1.15">1.15</A>) W jaki spos<6F>b mog<6F> wesprze<7A> finansowo
|
|||
|
PostgreSQL?<BR>
|
|||
|
|
|||
|
<H2 align="center">Pytania u<>ytkownik<69>w</H2>
|
|||
|
<A href="#2.1">2.1</A>) Czy s<> jakie<69> driwery <SMALL>ODBC</SMALL> dla
|
|||
|
PostgreSQL?<BR>
|
|||
|
<A href="#2.2">2.2</A>) Jakie istniej<65> narz<72>dzia pozwalaj<61>ce na dost<73>p do
|
|||
|
PostgreSQL przez www?<BR>
|
|||
|
<A href="#2.3">2.3</A>) Czy istnieje jakie<69> GUI dla PostgreSQL?
|
|||
|
Narz<72>dzie do raportowania? Interfejs dla "embedded query language"?<BR>
|
|||
|
<A href="#2.4">2.4</A>) Za pomoc<6F> jakich j<>zyk<79>w programowania mo<6D>na
|
|||
|
si<73> komunikowa<77> z PostgreSQL?<BR>
|
|||
|
|
|||
|
|
|||
|
<H2 align="center">Pytania administratora</H2>
|
|||
|
<A href="#3.1">3.1</A>) Jak mog<6F> zainstalowa<77> PostgreSQL w innej
|
|||
|
lokalizacji ni<6E> <I>/usr/local/pgsql</I>?<BR>
|
|||
|
<A href="#3.2">3.2</A>) Podczas startu <I>postmaster'a</I>,
|
|||
|
otrzymuj<75> 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<75> komunikato b<><62>dzie: <I>IpcMemoryCreate</I>. Dlaczego?<BR>
|
|||
|
<A href="#3.4">3.4</A>) Podczas startu <I>postmaster'a</I>,
|
|||
|
otrzymuj<75> komunikat o b<><62>dzie: <I>IpcSemaphoreCreate</I>. Dlaczego?<BR>
|
|||
|
<A href="#3.5">3.5</A>) W jaki spos<6F>b mog<6F> kontrolowa<77> po<70><6F>czenia z
|
|||
|
innych host<73>w?<BR>
|
|||
|
<A href="#3.6">3.6</A>) Jak powinienem skonfigurowa<77> system baz
|
|||
|
danych aby uzyska<6B> lepsz<73> wydajno<6E><6F>?<BR>
|
|||
|
<A href="#3.7">3.7</A>) Jakie s<> mo<6D>liwo<77>ci wyszukiwania b<><62>d<EFBFBD>w?<BR>
|
|||
|
<A href="#3.8">3.8</A>) Sk<53>d si<73> bierze komunikat: <I>"Sorry, too many
|
|||
|
clients"</I> podczas pr<70>by po<70><6F>czenia si<73> z baz<61> danych?<BR>
|
|||
|
<A href="#3.9">3.9</A>) Co to za pliki typu <I>pg_sorttempNNN.NN</I>
|
|||
|
, kt<6B>re znajduj<75> si<73> w katalogu z plikami bazy danych?<BR>
|
|||
|
|
|||
|
|
|||
|
<H2 align="center">Pytania dotycz<63>ce u<>ytkowania</H2>
|
|||
|
<A href="#4.1">4.1</A>) Jaka jest r<><72>nica pomi<6D>dzy kursorami
|
|||
|
binarnymi (binary cursors) i zwyk<79>ymi kursorami (normal cursors)?<BR>
|
|||
|
<A href="#4.2">4.2</A>) Jak mog<6F> pobra<72> za pomoc<6F> <SMALL>SELECT</SMALL>
|
|||
|
jedynie kilka pierwszych wynik<69>w zapytania?<BR>
|
|||
|
<A href="#4.3">4.3</A>) Jak mog<6F> uzyska<6B> list<73> wszystkich tabel czy
|
|||
|
innych rzeczy pod <I>psql</I>?<BR>
|
|||
|
<A href="#4.4">4.4</A>) Jak usun<75><6E> kolumn<6D> z tabeli?<BR>
|
|||
|
<A href="#4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rz<72>du,
|
|||
|
tabeli i bazy danych?<BR>
|
|||
|
<A href="#4.6">4.6</A>) Jak du<64>o miejsca w bazie danych jest
|
|||
|
potrzebne aby przechowa<77> dane ze zwyczajnego pliku tekstowego?<BR>
|
|||
|
<A href="#4.7">4.7</A>) Jak mog<6F> sprawdzi<7A> jakie tabele, klucze,
|
|||
|
bazy danych i u<>ytkownicy s<> utworzeni?<BR>
|
|||
|
<A href="#4.8">4.8</A>) Moje zapytania s<> wolne lub nie u<>ywaj<61>
|
|||
|
kluczy. Dlaczego?<BR>
|
|||
|
<A href="#4.9">4.9</A>) Jak mog<6F> sprawdzi<7A> w jakis spos<6F>b "query
|
|||
|
optimizer" wykonuje moje zapytanie?<BR>
|
|||
|
<A href="#4.10">4.10</A>) Co to jest "R-tree index"?<BR>
|
|||
|
<A href="#4.11">4.11</A>) Co to jest "Genetic Query Optimizer"?<BR>
|
|||
|
<A href="#4.12">4.12</A>) Jak mog<6F> u<>ywa<77> wyra<72>e<EFBFBD> regularnych w
|
|||
|
zapytaniach i zapyta<74> case-insensitive w wyra<72>eniach regularnych?
|
|||
|
Jak korzysta<74> z indeks<6B>w dla zapyta<74> case-insensitive?<BR>
|
|||
|
<A href="#4.13">4.13</A>) Jak sprawdzi<7A> w zapytaniu czy pole ma
|
|||
|
warto<74><6F> <SMALL>NULL</SMALL>?<BR>
|
|||
|
<A href="#4.14">4.14</A>) Jaka jest r<><72>nica pomi<6D>dzy r<><72>nymi typami
|
|||
|
tekstowymi (character types)?<BR>
|
|||
|
<A href="#4.15.1">4.15.1</A>) Jak mog<6F> utworzy<7A> pole typu int, kt<6B>re samo
|
|||
|
zwi<77>ksza swoj<6F> warto<74><6F>?<BR>
|
|||
|
<A href="#4.15.2">4.15.2</A>) Jak pobra<72> warto<74><6F> pola typu
|
|||
|
<SMALL>SERIAL</SMALL> po wykonaniu insert'u?<BR>
|
|||
|
<A href="#4.15.3">4.15.3</A>) Czy u<>ycie <I>currval()</I> i
|
|||
|
<I>nextval()</I> nie doprowadzi do "race condition" z innymi
|
|||
|
u<>ytkownikami?<BR>
|
|||
|
<A href="#4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie s<>
|
|||
|
ponownie u<>ywane przy przerwaniu transakcji?
|
|||
|
Sk<53>d si<73> bior<6F> luki w numerowaniu kolumny tabeli sekwencjami/SERIALem?<BR>
|
|||
|
<A href="#4.16">4.16</A>) Co to jest <SMALL>OID</SMALL>? Co to jest
|
|||
|
<SMALL>TID</SMALL>?<BR>
|
|||
|
<A href="#4.17">4.17</A>) Jakie jest znaczenie niekt<6B>rych termin<69>w w
|
|||
|
PostgreSQL?<BR>
|
|||
|
<A href="#4.18">4.18</A>) Sk<53>d bierze si<73> ten b<><62>d: <I>"ERROR: Memory
|
|||
|
exhausted in AllocSetAlloc()"</I>?<BR>
|
|||
|
<A href="#4.19">4.19</A>) Jak sprawdzi<7A> jakiej wersji PostgreSQL
|
|||
|
u<>ywam?<BR>
|
|||
|
<A href="#4.20">4.20</A>) Dlaczego operacje, kt<6B>re wykonuj<75> na
|
|||
|
du<64>ych obiektach "large-object" zwracaj<61> komunikat:
|
|||
|
<I>"invalid large obj descriptor"</I>?<BR>
|
|||
|
<A href="#4.21">4.21</A>) Jak stworzy<7A> kolumn<6D> kt<6B>rej domy<6D>ln<6C>
|
|||
|
warto<74>ci<63> b<>dzie bie<69><65>cy czas?<BR>
|
|||
|
<A href="#4.22">4.22</A>) Dlaczego zapytania u<>ywaj<61>ce
|
|||
|
<CODE><SMALL>IN</SMALL></CODE> s<> takie wolne?<BR>
|
|||
|
<A href="#4.23">4.23</A>) Jak wykona<6E> "outer join"?<BR>
|
|||
|
<A href="#4.24">4.24</A>) Jak wykonywa<77> zapytanie u<>ywaj<61>ce kilku
|
|||
|
baz danych jednocze<7A>nie?<BR>
|
|||
|
<A href="#4.25">4.25</A>) Jak zwr<77>ci<63> w funkcji wiele rz<72>d<EFBFBD>w lub
|
|||
|
kolumn?<BR>
|
|||
|
|
|||
|
|
|||
|
<H2 align="center">Rozwijanie PostgreSQL</H2>
|
|||
|
<A href="#5.1">5.1</A>) Napisa<73>em w<>asn<73> funkcj<63>. Kiedy u<>yj<79> jej w
|
|||
|
<I>psql</I>, program zrzuca pami<6D><69> (dump core)?<BR>
|
|||
|
<A href="#5.2">5.2</A>) Jak mog<6F> doda<64>/zg<7A>osi<73> nowe typy czy funkcje
|
|||
|
do PostgreSQL?<BR>
|
|||
|
<A href="#5.3">5.3</A>) Jak napisa<73> funkcj<63> C zwracaj<61>c<EFBFBD> krotk<74>
|
|||
|
(tuple)?<BR>
|
|||
|
<A href="#5.4">5.4</A>) Zmieni<6E>em plik <20>r<EFBFBD>d<EFBFBD>owy. Dlaczego po
|
|||
|
rekompilacji nie wida<64> zmiany?<BR>
|
|||
|
|
|||
|
<HR>
|
|||
|
|
|||
|
<H2 align="center">Pytania og<6F>lne</H2>
|
|||
|
|
|||
|
<H4><A name="1.1">1.1</A>) Co to jest PostgreSQL? Jak to wymawia<69>?</H4>
|
|||
|
|
|||
|
<P>PostgreSQL wymawia si<73> <I>Post-Gres-kju-el</I>.</P>
|
|||
|
|
|||
|
<P>PostgreSQL jest rozszerzeniem systemu zarz<72>dzania bazami danych -
|
|||
|
POSTGRES, kolejn<6A> generacj<63> rozwojowego prototypu <SMALL>DBMS</SMALL>.
|
|||
|
Mimo, <20>e PostgreSQL zachowa<77> bardzo dobrze zbudowany model danych
|
|||
|
(data model) i bogaty zestaw typ<79>w danych POSTGRES'a, zast<73>pi<70>
|
|||
|
PostQuel'owy j<>zyk zapyta<74> z rozbudowanym podzbiorem j<>zyka
|
|||
|
<SMALL>SQL</SMALL>. PostgreSQL jest oprogramowaniem darmowym
|
|||
|
z dost<73>pnymi ca<63>ymi <20>r<EFBFBD>d<EFBFBD>ami.
|
|||
|
</P>
|
|||
|
|
|||
|
<P>Rozw<EFBFBD>j PostgreSQL jest prowadzony przez grup<75> ludzi z Internetu,
|
|||
|
komunikuj<75>cych si<73> poprzez mailowe listy dyskusyjne PostgreSQL.
|
|||
|
Obecnym koordynatorem jest Marc G. Fournier (<A href=
|
|||
|
"mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (Zobacz
|
|||
|
poni<6E>ej jak si<73> przy<7A><79>czy<7A>). Ta grupa ludzi jest odpowiedzialna za
|
|||
|
ca<63>y rozw<7A>j PostgreSQL.</P>
|
|||
|
|
|||
|
<P>Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen.
|
|||
|
Wiele innych os<6F>b pomog<6F>o przy portowaniu, testowaniu, debugowaniu, i
|
|||
|
rozwijaniu kodu. Oryginalny kod Postgresa, na kt<6B>rym zosta<74> oparty
|
|||
|
PostgreSQL, by<62> wysi<73>kiem student<6E>w oraz pracownik<69>w pracuj<75>cych pod
|
|||
|
kierownictwem profesora Michael'a Stonebraker'a z University of
|
|||
|
California w Berkeley.</P>
|
|||
|
|
|||
|
<P>Oryginaln<EFBFBD> nazw<7A> oprogramowania w Berkeley by<62> Postgres. Po
|
|||
|
dodaniu obs<62>ugi <SMALL>SQL</SMALL> w 1995, nazwa zosta<74>a zmieniona
|
|||
|
na Postgres95. Pod koniec roku 1996 nazwa zosta<74>a zmieniona na
|
|||
|
PostgreSQL.</P>
|
|||
|
|
|||
|
<H4><A name="1.2">1.2</A>) Jak<61> licencj<63> chroniony jest
|
|||
|
PostgreSQL?</H4>
|
|||
|
|
|||
|
<P>PostgreSQL obj<62>ty jest nast<73>puj<75>c<EFBFBD> licencj<63>:</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 powy<77>ej, jest klasyczn<7A> licencj<63> BSD.
|
|||
|
Nie posiada ona <20>adnych restrykcji co do u<>ywania kodu <20>r<EFBFBD>d<EFBFBD>owego.
|
|||
|
Podoba nam si<73> i nie zamierzamy jej zmienia<69>.
|
|||
|
|
|||
|
<H4><A name="1.3">1.3</A>) Na jakich systemach Unixowych dzia<69>a
|
|||
|
PostreSQL?</H4>
|
|||
|
|
|||
|
<P>PostgreSQL powinien dzia<69>a<EFBFBD> na wszystkich nowych Unix-podobnych
|
|||
|
systemach. Platformy, kt<6B>re zosta<74>y szczeg<65><67>owo przetestowane podczas
|
|||
|
publikowania PostgreSQL s<> wymienione w dokumentacji opisuj<75>cej
|
|||
|
instalacj<63>.</P>
|
|||
|
|
|||
|
<H4><A name="1.4">1.4</A>) Na jakich nie-Unixowych systemach dzia<69>a
|
|||
|
PostgreSQL?</H4>
|
|||
|
|
|||
|
<P><STRONG>Klient</STRONG></P>
|
|||
|
|
|||
|
<P>Mo<EFBFBD>liwa jest kompilacja bibliteki C <I>libpq</I> C, psql oraz
|
|||
|
innych interfejs<6A>w i uruchamianie ich na platformie MS Windows. W tym
|
|||
|
wypadku klient jest uruchamiany na MS Windows a z serwerem komunikuje si<73>
|
|||
|
poprzez TCP/IP. Serwer mo<6D>e dzia<69>a<EFBFBD> na dowolnej wspieranej platformie
|
|||
|
Unixowej. Plik <I>win31.mak</I> jest do<64><6F>czony
|
|||
|
do <20>r<EFBFBD>de<64>, aby mo<6D>na by<62>o stworzy<7A> bibliotek<65> <I>libpq</I> oraz
|
|||
|
program <I>psql</I> dzia<69>aj<61>ce w <20>rodowisku Win32. PostgreSQL mo<6D>e si<73>
|
|||
|
tak<61>e komunikowa<77> z klientami <SMALL>ODBC</SMALL>.</P>
|
|||
|
|
|||
|
<P><STRONG>Serwer</STRONG></P>
|
|||
|
|
|||
|
<P>Serwer mo<6D>e by<62> uruchamiany na Windows NT i Win2k u<>ywaj<61>c
|
|||
|
bibliotek Cygwin, Cygnus Unix/NT. W pliku <I>pgsql/doc/FAQ_MSWIN</I>
|
|||
|
znajduj<75>cym si<73> w <20>r<EFBFBD>d<EFBFBD>ach lub pod adresem: <A href=
|
|||
|
"http://www.postgresql.org/docs/faq-mswin.html">MS Windows FAQ</A>
|
|||
|
na naszych stronach. Nie planujemy tworzy<7A> portu przeznaczonego
|
|||
|
docelowo dla platformy Microsoft.</P>
|
|||
|
|
|||
|
<H4><A name="1.5">1.5</A>) Sk<53>d mo<6D>na <20>ci<63>gn<67><6E> PostgreSQL?</H4>
|
|||
|
|
|||
|
<P>G<EFBFBD><EFBFBD>wny serwer ftp z dost<73>pem "anonymous" dla PostgreSQL znajduje
|
|||
|
si<73> <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
|
|||
|
je<6A>li szukasz mirror<6F>w sprawd<77> nasz<73> g<><67>wn<77> stron<6F> www.<P>
|
|||
|
|
|||
|
<H4><A name="1.6">1.6</A>) Gdzie mo<6D>na szuka<6B> wsparcia technicznego?</H4>
|
|||
|
|
|||
|
<P>Adres g<><67>wnej listy mailowej: <A href=
|
|||
|
"mailto:pgsql-general@PostgreSQL.org">pgsql-general@PostgreSQL.org</A>.
|
|||
|
Jest ona przeznaczona dyskusjom dotycz<63>cym spraw zwi<77>zanych z PostgreSQL.
|
|||
|
<20>eby zapisac si<73> na list<73>, wy<77>lij email z nast<73>puj<75>cymi liniami w
|
|||
|
tre<72>ci maila (nie w temacie):</P>
|
|||
|
<PRE>
|
|||
|
subscribe
|
|||
|
end
|
|||
|
</PRE>
|
|||
|
|
|||
|
<P>na adres: <A href=
|
|||
|
"mailto:pgsql-general-request@PostgreSQL.org">pgsql-general-request@PostgreSQL.org</A>.</P>
|
|||
|
|
|||
|
<P>Dost<EFBFBD>pna jest tak<61>e lista wysy<73>aj<61>ca digesty. Aby zapisa<73> si<73> na
|
|||
|
ni<6E>, wy<77>lij email na adres:
|
|||
|
<A href=
|
|||
|
"mailto:pgsql-general-digest-request@PostgreSQL.org">pgsql-general-digest-request@PostgreSQL.org</A>
|
|||
|
z tre<72>ci<63> maila zawieraj<61>c<EFBFBD>:</P>
|
|||
|
<PRE>
|
|||
|
subscribe
|
|||
|
end
|
|||
|
</PRE>
|
|||
|
Digesty s<> wysy<73>ane do cz<63>onk<6E>w listy, kiedy na g<><67>wn<77> list<73> dotrze ok
|
|||
|
30k wiadomo<6D>ci.
|
|||
|
|
|||
|
<P>Dost<EFBFBD>pna jest tak<61>e lista po<70>wi<77>cona b<><62>dom znalezionym w
|
|||
|
PostgreSQL. Aby zapisa<73> si<73> na ni<6E> wy<77>lij email na adres:
|
|||
|
<A href=
|
|||
|
"mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
|
|||
|
z tre<72>ci<63> maila zawieraj<61>c<EFBFBD>:</P>
|
|||
|
<PRE>
|
|||
|
subscribe
|
|||
|
end
|
|||
|
</PRE>
|
|||
|
Lista po<70>wi<77>cona dyskusjom developer<65>w jest dost<73>pna pod adresem:
|
|||
|
<A href=
|
|||
|
"mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>
|
|||
|
Aby si<73> na ni<6E> zapisa<73> wy<77>lij na jej adres mail z tre<72>ci<63>:
|
|||
|
<PRE>
|
|||
|
subscribe
|
|||
|
end
|
|||
|
</PRE>
|
|||
|
|
|||
|
<P>Dodatkowe informacje o listach mailowych dotycz<63>cych PostgreSQL
|
|||
|
mo<6D>na znale<6C><65> 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<6E> IRC <I>#PostgreSQL</I>. Ja, do
|
|||
|
po<70><6F>czenia si<73> z kana<6E>em u<>ywam Unixowego polecenia <CODE>irc -c
|
|||
|
'#PostgreSQL' "$USER" irc.phoenix.net.</CODE></P>
|
|||
|
|
|||
|
<P>Lista firm oferuj<75>cych wsparcie na zasadach komercyjnych znajduje
|
|||
|
si<73> 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 dost<73>pna wersja?</H4>
|
|||
|
|
|||
|
<P>Ostatnia dost<73>pna wersja PostgreSQL to 7.2.1.</P>
|
|||
|
|
|||
|
<P>Planujemy publikowanie kolejnych wersji co cztery miesi<73>ce.</P>
|
|||
|
|
|||
|
<H4><A name="1.8">1.8</A>) Jaka dokumentacja jest dost<73>pna?</H4>
|
|||
|
|
|||
|
<P>Kilka manuali, stron pod<6F>cznika man, oraz kilka przyk<79>ad<61>w do
|
|||
|
testowania s<> za<7A><61>czone w samej dystrybucji. Znajduj<75> si<73> one w
|
|||
|
katalogu <I>/doc</I>. Manual mo<6D>e by<62> tak<61>e przegl<67>dany 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<EFBFBD> tak<61>e dwie ksi<73><69>ki dost<73>pne online pod adresami
|
|||
|
<A href=
|
|||
|
"http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
|
|||
|
i <A href=
|
|||
|
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>.
|
|||
|
Lista ksi<73><69>ek o PostgreSQL, kt<6B>re mo<6D>na kupi<70> znajduje si<73> pod adresem
|
|||
|
<A href=
|
|||
|
"http://www.postgresql.org/books/">http://www.postgresql.org/books/</A>.
|
|||
|
Zbi<62>r technicznych artyku<6B><75>w o PostgreSQL znajduje si<73> pod adresem <A
|
|||
|
href=
|
|||
|
"http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</A>.</P>
|
|||
|
|
|||
|
<P><I>psql</I> posiada kilka wbudowanych polece<63> \d, za pomoca kt<6B>rych
|
|||
|
mo<6D>na sprawdzi<7A> informacje dotycz<63>ce typ<79>w, operator<6F>w, funkcji,
|
|||
|
aggregat<61>w itd.</P>
|
|||
|
|
|||
|
<P>Na naszej stronie mo<6D>na znale<6C><65> du<64>o wi<77>cej dokumentacji.</P>
|
|||
|
|
|||
|
<H4><A name="1.9">1.9</A>) Gdzie mo<6D>na znale<6C><65> informacj<63> o znanych
|
|||
|
b<><62>dach czy brakuj<75>cych rozwi<77>zanich?</H4>
|
|||
|
|
|||
|
<P>PostgreSQL wspiera rozszerzony podzbi<62>r standardu <SMALL>SQL</SMALL>-92.
|
|||
|
Sprawd<77> nasz<73> list<73> <A href="http://developer.PostgreSQL.org/todo.php">TODO</A>
|
|||
|
aby znale<6C><65> informacj<63> o znanych problemach, brakuj<75>cych
|
|||
|
rozwi<77>zaniach czy przysz<73>ych planach.</P>
|
|||
|
|
|||
|
<H4><A name="1.10">1.10</A>) Jak mog<6F> si<73> nauczy<7A>
|
|||
|
<SMALL>SQL</SMALL>?</H4>
|
|||
|
|
|||
|
<P>Ksi<EFBFBD><EFBFBD>ka o PostgreSQL <A href=
|
|||
|
"http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
|
|||
|
uczy <SMALL>SQL</SMALL>. Jest jeszcze inna ksi<73>zka o PostgreSQL
|
|||
|
dost<73>pna pod adresem: <A href=
|
|||
|
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook.</A>
|
|||
|
Dobry tutorial mo<6D>esz znale<6C><65> pod adresem: <A href=
|
|||
|
"http://www.intermedia.net/support/sql/sqltut.shtm">http://www.intermedia.net/support/sql/sqltut.shtm,</A>
|
|||
|
oraz <A href=
|
|||
|
"http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM">
|
|||
|
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM,</A>
|
|||
|
i <A href=
|
|||
|
"http://sqlcourse.com/">http://sqlcourse.com.</A></P>
|
|||
|
|
|||
|
<P>Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition"
|
|||
|
pod adresem: <A href=
|
|||
|
"http://members.tripod.com/er4ebus/sql/index.htm">http://members.tripod.com/er4ebus/sql/index.htm</A></P>
|
|||
|
|
|||
|
<P>Wielu z naszych u<>ytkownik<69>w poleca <I>The Practical SQL Handbook</I>,
|
|||
|
Bowman, Judith S., et al., Addison-Wesley. Inni polecaj<61> <I>The
|
|||
|
Complete Reference SQL</I>, Groff et al., McGraw-Hill.</P>
|
|||
|
|
|||
|
<H4><A name="1.11">1.11</A>) Czy PostgreSQL ma rozwi<77>zany problem Y2K?</H4>
|
|||
|
|
|||
|
<P>Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz
|
|||
|
przed rokiem 2000 BC.</P>
|
|||
|
|
|||
|
<H4><A name="1.12">1.12</A>) Jak mog<6F> si<73> przy<7A><79>czy<7A> do grupy os<6F>b
|
|||
|
bezpo<70>rednio pracuj<75>cych nad rozwojem PostgreSQL?</H4>
|
|||
|
|
|||
|
<P>Przede wszystkim <20>ci<63>gnij ostatnie dost<73>pne <20>r<EFBFBD>d<EFBFBD>a i przeczytaj
|
|||
|
dokumentacj<63> przeznaczon<6F> dla developer<65>w na naszej stronie www lub
|
|||
|
dost<73>pn<70> tak<61>e w <20>r<EFBFBD>d<EFBFBD>ach PostgreSQL. Nast<73>pnie zapisz si<73> na listy
|
|||
|
mailowe <I>pgsql-hackers</I> i
|
|||
|
<I>pgsql-patches</I>. I na koniec, wysy<73>aj nam wysokiej jako<6B>ci
|
|||
|
patch'e na list<73> pgsql-patches.</P>
|
|||
|
|
|||
|
<P>Jest oko<6B>o 12 os<6F>b, kt<6B>re maj<61> uprawnienia do commit'owania w
|
|||
|
<SMALL>CVS</SMALL> PostgreSQL'a. Ka<4B>dy z nich submitowa<77> tak wiele
|
|||
|
wysokiej jako<6B>ci patchy, <20>e sta<74>o si<73> niemo<6D>liwe dla obecnych
|
|||
|
commiter<65>w by<62> z nimi na bie<69><65>co, maj<61>c pewno<6E><6F> <20>e s<> to poprawki
|
|||
|
wysokiej jako<6B>ci.</P>
|
|||
|
|
|||
|
<H4><A name="1.13">1.13</A>) Jak mog<6F> zg<7A>asza<7A> b<><62>dy?</H4>
|
|||
|
|
|||
|
<P>Zajrzyj na stron<6F> <A href=
|
|||
|
"http://www.postgresql.org/bugs/bugs.php">PostgreSQL BugTool</A>, na
|
|||
|
kt<6B>rej opisane s<> wskaz<61>wki jak zg<7A>asza<7A> informacje o b<><62>dach.</P>
|
|||
|
|
|||
|
<P>Zajrzyj tak<61>e na nasz ftp <A href=
|
|||
|
"ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>, aby
|
|||
|
sprawdzi<7A> czy nie ma nowszych wersji PostgreSQL czy patchy.</P>
|
|||
|
|
|||
|
<H4><A name="1.14">1.14</A>) Jak mo<6D>na por<6F>wna<6E> PostgreSQL w stosunku
|
|||
|
do innych <SMALL>DBMS</SMALL>?</H4>
|
|||
|
|
|||
|
<P>Jest kilka sposob<6F>w oceny softwaru: mo<6D>liwo<77>ci,
|
|||
|
wydajno<6E><6F>, stabilno<6E><6F>, wsparcie i cena.</P>
|
|||
|
|
|||
|
<DL>
|
|||
|
<DT><B>Mo<EFBFBD>liwo<EFBFBD>ci</B></DT>
|
|||
|
|
|||
|
<DD>PostgreSQL posiada mo<6D>liwo<77>ci dost<73>pne w du<64>ych, komercyjnych
|
|||
|
systemach <SMALL>DBMS</SMALL>, takie jak transakcje, podzapytania
|
|||
|
(subselects), triggery, widoki, klucze obce, referential integrity,
|
|||
|
oraz wyrafinowany system blokowania. Mamy tak<61>e w<>a<EFBFBD>ciow<6F>ci kt<6B>rych
|
|||
|
inni nie posiadaj<61>, jak typy definiowane przez u<>ytkownika,
|
|||
|
dziedziczenie, rules, multi-version concurrency control, kt<6B>ra
|
|||
|
redukuje problemy z blokowaiem (lock contention).<BR>
|
|||
|
<BR>
|
|||
|
</DD>
|
|||
|
|
|||
|
<DT><B>Wydajno<EFBFBD><EFBFBD></B></DT>
|
|||
|
|
|||
|
<DD>PostgreSQL dzia<69>a w dw<64>ch trybach. Standardowy tryb <I>fsync</I>
|
|||
|
zrzuca ka<6B>d<EFBFBD> zako<6B>czon<6F> transakcj<63> na dysk, gwarantuj<75>c w ten
|
|||
|
spos<6F>b to, <20>e je<6A>li system operacyjny si<73> zawiesi lub straci
|
|||
|
zasilanie wci<63>gu kilku nastepnych sekund, wszystkie Twoje dane
|
|||
|
zostan<61> bezpiecznie zapisane na dysku. W tym trybie, jeste<74>my
|
|||
|
wolniejsi ni<6E> wi<77>kszo<7A><6F> komercyjnych baz danych, cz<63><7A>ciowo dlatego
|
|||
|
<09>e niewiele z nich wykonuje taki spos<6F>b zapisywania danych jako
|
|||
|
domy<6D>lne ustawienie.
|
|||
|
W trybie <I>no-fsync</I> z regu<67>y jeste<74>my szybsi ni<6E> komercyjne
|
|||
|
bazy danych, chocia<69> w tym wypadku zawieszenie si<73> systemu mo<6D>e
|
|||
|
spowodowa<77> uszkodzenie danych. Pracujemy nad tym, aby stworzy<7A>
|
|||
|
po<70>redni tryb, kt<6B>ry powoduje mniejsz<73> redukcj<63> wydajno<6E>ci ni<6E> tryb
|
|||
|
fsync i pozwoli na integralno<6E><6F> danych w przeci<63>gu 30 sekund do
|
|||
|
za<7A>amania si<73> systemu operacyjnego.<BR>
|
|||
|
<BR>
|
|||
|
Por<6F>wnuj<75>c do MySQL czy innych prostych baz danych, jeste<74>my
|
|||
|
wolniejsi przy wykonywaniu insert<72>w/updat<61>w przez narzut
|
|||
|
spowodowany przez transakcje. Oczywi<77>cie MySQL nie posiada <20>adnej z
|
|||
|
wymienionych wy<77>ej <I>mo<EFBFBD>liwo<EFBFBD>ci</I>. PostgreSQL zosta<74> zbudowany
|
|||
|
aby by<62> DBMS elastycznym i bogatym z r<><72>norakie mo<6D>liwo<77>ci,
|
|||
|
aczkolwiek dbamy, aby poprawia<69> jego wydajno<6E><6F> poprzez analiz<69>
|
|||
|
kodu <20>r<EFBFBD>d<EFBFBD>owego i profilowanie. Ciekawe por<6F>wnanie PostgreSQL i MySQL
|
|||
|
mo<6D>na znale<6C><65> pod adresem <A href=
|
|||
|
"http://openacs.org/why-not-mysql.html">http://openacs.org/why-not-mysql.html</A><BR>
|
|||
|
|
|||
|
<BR>
|
|||
|
Ka<4B>de po<70><6F>czenie klienta jest obs<62>ugiwane przez nas poprzez
|
|||
|
stworzenie nowego procesu Unixowego. Procesy backendu dziel<65>
|
|||
|
bufory danych oraz informacj<63> o blokadach. U<>ywaj<61>c wielu
|
|||
|
procesor<6F>w, r<><72>ne backendy mog<6F> bez problemu dzia<69>a<EFBFBD> na r<><72>nych
|
|||
|
procesorach.<BR>
|
|||
|
<BR>
|
|||
|
</DD>
|
|||
|
|
|||
|
<DT><B>Stabilno<EFBFBD><EFBFBD></B></DT>
|
|||
|
|
|||
|
<DD>Zdajemy sobie spraw<61>, <20>e <SMALL>DBMS</SMALL> musi by<62> stabilny,
|
|||
|
w przeciwnym wypadku jest bez warto<74>ci. Staramy si<73> publikowa<77> kod
|
|||
|
stabilny, dobrze przetestowany, z minimum mo<6D>liwych b<><62>d<EFBFBD>w. Ka<4B>de
|
|||
|
wydanie poprzedza conajmniej miesi<73>c test<73>w wersji beta. Patrz<72>c na
|
|||
|
histori<72> wyda<64> PostgreSQL wida<64>, <20>e dostarczamy stabilne, dobrze
|
|||
|
sprawdzone wersje, kt<6B>re s<> gotowe do u<>ycia w <20>rodowisku
|
|||
|
produkcyjnym. My<4D>limy, <20>e proces publikowania kolejnych wersji
|
|||
|
opracowany przez nas jest jednym z lepszych w<>r<EFBFBD>d innych tw<74>rc<72>w
|
|||
|
oprogramowania bazodanowego.<BR>
|
|||
|
<BR>
|
|||
|
</DD>
|
|||
|
|
|||
|
<DT><B>Wsparcie</B></DT>
|
|||
|
|
|||
|
<DD>Dzi<EFBFBD>ki naszym listom mailowym masz dost<73>p do du<64>ej liczby
|
|||
|
programist<73>w i u<>ytkownik<69>w, kt<6B>rzy pomagaj<61> rozwi<77>za<7A> ka<6B>dy
|
|||
|
napotkany problem. Chocia<69> nie mo<6D>emy gwarantowa<77> znalezienia
|
|||
|
rozwi<77>zania danego problemu, nie r<><72>nimy si<73> w tym od innych
|
|||
|
komercyjnych system<65>w <SMALL>DBMS</SMALL>. Bezpo<70>redni kontakt z
|
|||
|
programistami, u<>ytkownikami, dokumentacj<63> i kodem <20>r<EFBFBD>d<EFBFBD>owym
|
|||
|
sprawiaj<61>, <20>e wsparcie oferowane PostgreSQL niejednokrotnie jest
|
|||
|
lepsze ni<6E> w innych systemach <SMALL>DBMS</SMALL>. Istnieje tak<61>e
|
|||
|
mo<6D>liwo<77><6F> skorzystania z komercyjnego wsparcia dla tych, kt<6B>rych
|
|||
|
takiego rozwi<77>zania potrzebuj<75>.
|
|||
|
(Sprawd<77> <A href="#1.6">ten punkt FAQ</A>.)<BR>
|
|||
|
<BR>
|
|||
|
</DD>
|
|||
|
|
|||
|
<DT><B>Cena</B></DT>
|
|||
|
|
|||
|
<DD>Korzystanie z PostgreSQL jest darmowe, zar<61>wno w przypadku
|
|||
|
komercyjnym jak i niekomercyjnym. Mo<4D>esz korzysta<74> z naszego kodu
|
|||
|
<09>r<EFBFBD>d<EFBFBD>owego w Twoim produkcie bez <20>adnych ogranicze<7A>, poza tymi
|
|||
|
wymienionymi w licencji BSD przytoczonej powy<77>ej.<BR>
|
|||
|
<BR>
|
|||
|
</DD>
|
|||
|
</DL>
|
|||
|
|
|||
|
<H4><A name="1.15">1.15</A>) W jaki spos<6F>b mog<6F> wesprze<7A> finansowo
|
|||
|
PostgreSQL?</H4>
|
|||
|
|
|||
|
<P>PostgreSQL korzysta z najlepszej infrastruktury od samego pocz<63>tku
|
|||
|
istnienia projektu, tzn. sze<7A>ciu lat. Wszystko to zawdzi<7A>czamy Marc'owi
|
|||
|
Fournier'owi, kt<6B>ry stworzy<7A> t<> infrastruktur<75> i zarz<72>dza ni<6E> od
|
|||
|
lat.</P>
|
|||
|
|
|||
|
<P>Wysokiej jako<6B>ci infrastruktura jest bardzo wa<77>na dla ka<6B>dego
|
|||
|
projektu open-source. Zapobiega przerwom w rozwoju projektu i
|
|||
|
jakimkolwiek przestojom.</P>
|
|||
|
|
|||
|
<P>Oczywi<EFBFBD>cie korzystanie z wysokiej jako<6B>ci infrastruktury nie jest
|
|||
|
tanie. Istnieje wiele r<>znych miesi<73>cznych, czy jednorazowych
|
|||
|
wydatk<74>w, kt<6B>re trzeba ponosi<73> aby wszystko dzia<69>a<EFBFBD>o jak nale<6C>y.
|
|||
|
Je<4A>li Ty, b<>d<EFBFBD> Twoja firma mo<6D>e wspom<6F>c finansowo rozw<7A>j PostgreSQL
|
|||
|
odwied<65> adres: <A href=
|
|||
|
"http://www.pgsql.com/pg_goodies">http://www.pgsql.com/pg_goodies</A>
|
|||
|
gdzie opisane jest jak to zrobi<62>.</P>
|
|||
|
|
|||
|
<P>Chocia<EFBFBD> na stronie wspomniana jest nazwa PostgreSQL Inc, "datki"
|
|||
|
s<> przeznaczone jedynie na rozw<7A>j projektu PostgreSQL i nie s<>
|
|||
|
przeznaczane na finansowanie jakiejkolwiek firmy. Je<4A>li wolisz,
|
|||
|
mo<6D>esz wys<79>a<EFBFBD> czek na adres kontaktowy.</P>
|
|||
|
<HR>
|
|||
|
|
|||
|
<H2 align="center">User Client Questions</H2>
|
|||
|
|
|||
|
<H4><A name="2.1">2.1</A>) Czy s<> jakie<69> driwery <SMALL>ODBC</SMALL> dla
|
|||
|
PostgreSQL?</H4>
|
|||
|
|
|||
|
<P>Dost<EFBFBD>pne s<> dwa driwery <SMALL>ODBC</SMALL>: PsqlODBC
|
|||
|
i OpenLink <SMALL>ODBC</SMALL>.</P>
|
|||
|
|
|||
|
<P>PsqlODBC jest do<64><6F>czony do <20>r<EFBFBD>de<64>. Wi<57>cej informacji na jego temat
|
|||
|
mo<6D>esz znale<6C><65> pod adresem: <A href=
|
|||
|
"ftp://ftp.PostgreSQL.org/pub/odbc/">ftp://ftp.PostgreSQL.org/pub/odbc/</A>.</P>
|
|||
|
|
|||
|
<P>OpenLink <SMALL>ODBC</SMALL> mo<6D>e by<62> pobrany z adresu: <A href=
|
|||
|
"http://www.openlinksw.com/">http://www.openlinksw.com</A>.
|
|||
|
Wsp<73><70>pracuje ze standardowym oprogramowaniem klienckim <SMALL>ODBC</SMALL>
|
|||
|
wi<77>c w ten spos<6F>b mo<6D>esz korzysta<74> z PostgreSQL <SMALL>ODBC</SMALL>
|
|||
|
dost<73>pnego na ka<6B>dej plaformie kt<6B>r<EFBFBD> wspiera (Win, Mac, Unix, VMS).</P>
|
|||
|
|
|||
|
<P>Autorzy b<>d<EFBFBD> prawdopodobnie sprzedawa<77> ten produkt osobom kt<6B>re
|
|||
|
wymagaj<61> komercyjnego wsparcia, ale wersja darmowa b<>dzie zawsze
|
|||
|
dost<73>pna. Wszystkie pytania mo<6D>esz wysy<73>a<EFBFBD> na adres: <A href=
|
|||
|
"mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P>
|
|||
|
|
|||
|
<P>Sprawd<EFBFBD> tak<61>e rozdzia<69> 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<65> narz<72>dzia pozwalaj<61>ce na dost<73>p do
|
|||
|
PostgreSQL przez www?</H4>
|
|||
|
|
|||
|
<P>Dobry podr<64>cznik dla pocz<63>tkuj<75>cych o dost<73>pie do bazy danych
|
|||
|
przez www mo<6D>esz znale<6C><65> pod adresem:
|
|||
|
<A href="http://www.webreview.com">http://www.webreview.com</A></P>
|
|||
|
|
|||
|
<P>Inny znajduje si<73> 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, <20>wietnym rozwi<77>zaniem jest PHP. Mo<4D>esz
|
|||
|
znale<6C><65> wi<77>cej informacji na ten temat pod adresem
|
|||
|
<A href="http://www.php.net">http://www.php.net</A>.</P>
|
|||
|
|
|||
|
<P>Wiele os<6F>b w przypadku skomplikowanych rozwi<77>za<7A> uzywa Perl'a i
|
|||
|
modu<64>u CGI.pl.</P>
|
|||
|
|
|||
|
<H4><A name="2.3">2.3</A>) Czy istnieje jakie<69> GUI dla PostgreSQL?
|
|||
|
Narz<72>dzie do raportowania? Interfejs dla "embedded query
|
|||
|
language"?</H4>
|
|||
|
|
|||
|
<P>Mamy ca<63>kiem mi<6D>y interfejs graficzny, kt<6B>ry zosta<74> nazwany
|
|||
|
<I>pgaccess</I> i jest on dostarczany jako cz<63><7A><EFBFBD> <20>r<EFBFBD>de<64>.
|
|||
|
<I>pgaccess</I> posiada tak<61>e generator raport<72>w. Mo<4D>na go znale<6C><65>
|
|||
|
pod adresem <A href=
|
|||
|
"http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A></P>
|
|||
|
|
|||
|
<P>Udost<EFBFBD>pnili<EFBFBD>my tak<61>e <I>ecpg</I>, kt<6B>ry jest "embedded SQL query
|
|||
|
language interface" dla j<>zyka C.</P>
|
|||
|
|
|||
|
<H4><A name="2.4">2.4</A>) Za pomoc<6F> jakich j<>zyk<79>w programowania
|
|||
|
mo<6D>na si<73> komunikowa<77> 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<6F> zainstalowa<77> PostgreSQL w innej
|
|||
|
lokalizacji ni<6E> <I>/usr/local/pgsql</I>?</H4>
|
|||
|
|
|||
|
<P>U<EFBFBD>yj opcji <I>--prefix</I> podczas uruchamiania skryptu
|
|||
|
<I>configure</I>.</P>
|
|||
|
|
|||
|
<H4><A name="3.2">3.2</A>) Podczas startu <I>postmaster'a</I>,
|
|||
|
otrzymuj<75> komunikat o b<><62>dzie: <I>Bad System Call</I> lub "core dumped".
|
|||
|
Dlaczego?</H4>
|
|||
|
|
|||
|
|
|||
|
<P>Ten b<><62>d mo<6D>e by<62> wynikiem wielu problem<65>w, ale na pocz<63>tek
|
|||
|
sprawd<77> czy masz zainstalowane rozszerzenia systemu V w j<>drze
|
|||
|
systemu. PostgreSQL wymaga do pracy zainstalowanej obs<62>ugi pami<6D>ci
|
|||
|
dzielonej i semafor<6F>w.</P>
|
|||
|
|
|||
|
<H4><A name="3.3">3.3</A>) Podczas startu <I>postmaster'a</I>,
|
|||
|
otrzymuj<75> komunikat o b<><62>dzie: <I>IpcMemoryCreate</I>.
|
|||
|
Dlaczego?</H4>
|
|||
|
|
|||
|
<P>Albo nie masz poprawnie skonfigurowanej obs<62>ugi pami<6D>ci dzielonej
|
|||
|
w j<>drze systemu, albo musisz zwi<77>kszy<7A> jej dost<73>pny rozmiar.
|
|||
|
Dok<6F>adna ilo<6C><6F> jak<61> potrzebujesz jest zale<6C>na od architektury systemu
|
|||
|
na jakim pracujesz, jak du<64>o bufor<6F>w oraz jak du<64>o proces<65>w backendu
|
|||
|
skonfigurowa<77>e<EFBFBD> dla <I>postmaster'a</I>. Dla wi<77>kszo<7A>ci system<65>w, z
|
|||
|
domy<6D>ln<6C> liczb<7A> bufor<6F>w i proces<65>w potrzebujesz minimum w
|
|||
|
przybli<6C>eniu 1MB. Zobacz <A href=
|
|||
|
"http://www.postgresql.org/idocs/index.php?kernel-resources.html">PostgreSQL
|
|||
|
Administrator's Guide</A> gdzie szczeg<65><67>owo zosta<74>o opisane
|
|||
|
wykorzystanie pami<6D>ci dzielonej i semafor<6F>w.</P>
|
|||
|
|
|||
|
<H4><A name="3.4">3.4</A>) Podczas startu <I>postmaster'a</I>,
|
|||
|
otrzymuj<75> komunikat o b<><62>dzie: <I>IpcSemaphoreCreate</I>.
|
|||
|
Dlaczego?</H4>
|
|||
|
|
|||
|
<P>Je<EFBFBD>li tre<72><65> b<><62>du brzmi: <I>IpcSemaphoreCreate: semget failed
|
|||
|
(No space left on device)</I> oznacza to, <20>e j<>dro systemu nie jest
|
|||
|
skonfigurowane do obs<62>ugi wystarczaj<61>cej liczby semafor<6F>w.
|
|||
|
Postgres wymaga jednego semafor'a na potencjalny jeden proces backend.
|
|||
|
Tymczasowym rozwi<77>zaniem jest uruchomienie programu <I>postmaster</I>
|
|||
|
z mniejsz<73> maksymaln<6C> liczb<7A> proces<65>w backend.
|
|||
|
U<>yj opcji <I>-N</i> z parameterem mniejszym od domy<6D>lnego - 32.
|
|||
|
Bardziej trwa<77>ym rozwi<77>zaniem jest zwi<77>kszenie parametr<74>w
|
|||
|
<SMALL>SEMMNS</SMALL> i <SMALL>SEMMNI</SMALL> j<>dra twojego systemu.</P>
|
|||
|
|
|||
|
<P>Niedzia<EFBFBD>aj<EFBFBD>ce semafory mog<6F> spowodowa<77> niepoprawne zamkni<6E>cie
|
|||
|
systemu w czasie intensywnego korzystania z bazy.</P>
|
|||
|
<P>Je<EFBFBD>li tre<72><65> b<><62>du jest inna, mo<6D>e to oznacza<7A>, <20>e obs<62>uga semafor<6F>w
|
|||
|
nie zosta<74>a w<><77>czona do j<>dra wcale. Zobacz PostgreSQL
|
|||
|
Administrator's Guide po bardziej szczeg<65><67>owe informacje o pami<6D>ci
|
|||
|
dzielonej i semaforach.</P>
|
|||
|
|
|||
|
<H4><A name="3.5">3.5</A>) W jaki spos<6F>b mog<6F> kontrolowa<77> po<70><6F>czenia
|
|||
|
z innych host<73>w?</H4>
|
|||
|
|
|||
|
<P>Domy<EFBFBD>lnie PostgreSQL pozwala jedynie na po<70><6F>czenia za pomoc<6F>
|
|||
|
socket<65>w Unixowych z lokalnego hosta. Inne hosty nie b<>d<EFBFBD> mog<6F>y si<73>
|
|||
|
po<70><6F>czy<7A> z serwerem dop<6F>ki nie zostanie dodana opcja <I>-i</I> do
|
|||
|
<I>postmaster'a</I>,
|
|||
|
<B>oraz</B> nie umo<6D>liwi si<73> autoryzacji na podstawie adresu host<73>w
|
|||
|
modyfikuj<75>c odpowiednio plik
|
|||
|
<I>$PGDATA/pg_hba.conf</I>. To zmiany pozwol<6F> na
|
|||
|
po<70><6F>czenia TCP/IP.</P>
|
|||
|
|
|||
|
<H4><A name="3.6">3.6</A>) Jak powinienem skonfigurowa<77> system baz
|
|||
|
danych aby uzyska<6B> lepsz<73> wydajno<6E><6F>?</H4>
|
|||
|
|
|||
|
<P>Indeksy bez w<>tpienia mog<6F> przyspieszy<7A> wykonywanie zapyta<74>.
|
|||
|
Polecenie <SMALL>EXPLAIN</SMALL> pozwala zobaczy<7A> jak PostgreSQL
|
|||
|
interpretuje Twoje zapytanie i kt<6B>re indeksy s<> u<>ywane.</P>
|
|||
|
|
|||
|
<P>Je<EFBFBD>li wykonujesz bardzo du<64>o <SMALL>INSERT<EFBFBD>w</SMALL>, mo<6D>e warto
|
|||
|
je wykona<6E> za pomoc<6F> jednego du<64>ego pliku u<>ywaj<61>c polecenia
|
|||
|
<SMALL>COPY</SMALL>. Jest to du<64>o szybsze ni<6E> pojedyncze
|
|||
|
<SMALL>INSERTy.</SMALL> Po drugie polecenia SQL nie zawarte w bloku
|
|||
|
okre<72>laj<61>cym transakcj<63> - <SMALL>BEGIN WORK/COMMIT</SMALL>, s<>
|
|||
|
traktowane jako pojedyncza transakcja. Rozwa<77> wykonanie kilku
|
|||
|
polece<63>/zda<64> SQL w jednym bloku transakcji. To redukuje narzut
|
|||
|
powodowany przez transakcj<63>. Przy du<64>ych zmianach w danych, warto
|
|||
|
usun<75><6E> i stworzy<7A> na nowo indeksy.</P>
|
|||
|
|
|||
|
<P>Jest kilka opcji pozwalaj<61>cych na poprawienie wydajno<6E>ci.
|
|||
|
Mo<4D>esz wy<77><79>czy<7A> <I>fsync()</I> poprzez uruchomienie <I>postmaster'a</I>
|
|||
|
z opcjami <I>-o -F</I>. To spowoduje, <20>e
|
|||
|
<I>fsync()</I> nie b<>dzie zrzuca<63> danych na dysk po ka<6B>dej
|
|||
|
transakcji.</P>
|
|||
|
|
|||
|
<P>Mo<EFBFBD>esz tak<61>e uruchomi<6D> <I>postmaster'a</I> z opcj<63> <I>-B</I>
|
|||
|
aby zwi<77>kszy<7A> wielko<6B><6F> pami<6D>ci dzielonej u<>ywanej przez procesy
|
|||
|
backend<6E>w. Je<4A>li ustawisz t<> warto<74><6F> zbyt wysoko i przekroczysz limity
|
|||
|
ustawione przez kernel na pami<6D><69> dzielon<6F>, <I>postmaster</I> mo<6D>e si<73>
|
|||
|
nie uruchomi<6D>. Ka<4B>dy bufor zajmuje 8K a domy<6D>lna ilo<6C><6F> bufor<6F>w to 64.</P>
|
|||
|
|
|||
|
<P>Mo<EFBFBD>esz tak<61>e u<>y<EFBFBD> opcji <I>-S</I> dla backendu aby zwi<77>kszy<7A>
|
|||
|
maksymaln<6C> warto<74><6F> pami<6D>ci u<>ywan<61> przez proces backendu podczas
|
|||
|
sortowania. Opcja <I>-S</I> jest ustawiana warto<74>ci<63> podawan<61> w
|
|||
|
kilobajtach, domy<6D>lna warto<74><6F> to 512K.</P>
|
|||
|
|
|||
|
<P>Mo<EFBFBD>esz tak<61>e u<>y<EFBFBD> polecenia <SMALL>CLUSTER</SMALL> aby pogrupowa<77>
|
|||
|
dane w tabelach wg indeksu. Zobacz opis polecenia <SMALL>CLUSTER</SMALL>
|
|||
|
w manualu <20>eby dowiedzie<69> si<73> wi<77>cej.</P>
|
|||
|
|
|||
|
<H4><A name="3.7">3.7</A>) Jakie s<> mo<6D>liwo<77>ci wyszukiwania
|
|||
|
b<><62>d<EFBFBD>w?</H4>
|
|||
|
|
|||
|
<P>PostgreSQL ma kilka mo<6D>liwo<77>ci na raportowanie informacji o
|
|||
|
jego statusie, kt<6B>re mog<6F> by<62> przydatne przy debugowaniu procesu.</P>
|
|||
|
|
|||
|
<P>Przede wszystkim uruchom skrypt <I>configure</I> z opcj<63>
|
|||
|
--enable-cassert, wiele funkcji <I>assert()</I> monitoruj<75> post<73>p
|
|||
|
procesu backend i zatrzymuj<75> program kiedy wydarzy si<73> co<63>
|
|||
|
nieoczekiwanego.</P>
|
|||
|
|
|||
|
<P>Zar<EFBFBD>wno <I>postmaster</I> jak i <I>postgres</I> maj<61> kilka opcji
|
|||
|
do debugowania. Za ka<6B>dym razem kiedy uruchamiasz <I>postmaster'a</I>,
|
|||
|
upewnij si<73>, <20>e wysy<73>asz standardowe wyj<79>cie i error do pliku z
|
|||
|
logami, np. w ten spos<6F>b:</P>
|
|||
|
<PRE>
|
|||
|
cd /usr/local/pgsql
|
|||
|
./bin/postmaster >server.log 2>&1 &
|
|||
|
</PRE>
|
|||
|
|
|||
|
<P>To utworzy plik server.log w g<><67>wnym katalogu PostgreSQL.
|
|||
|
Ten plik zawiera po<70>yteczne informacje o problemach i b<><62>dach, kt<6B>re
|
|||
|
wydarzy<7A>y si<73> podczas pracy serwera. <I>Postmaster</I> posiada opcj<63>
|
|||
|
<I>-d</I>, kt<6B>ra pozwala na raportowanie bardzo szczeg<65>lowych
|
|||
|
informacji. Do opcji <I>-d</I> podajemy liczb<7A>, kt<6B>ra okre<72>la
|
|||
|
szczeg<65><67>owo<77><6F> wysy<73>anych informacji. Musisz mie<69> <20>wiadomo<6D><6F>, <20>e
|
|||
|
wysoki poziom logowania b<>dzie powodowa<77> tworzenie bardzo duzych
|
|||
|
plik<69>w z logami.</P>
|
|||
|
|
|||
|
<P>Je<EFBFBD>li <I>postmaster</I> nie zosta<74> uruchomiony, mo<6D>esz uruchomi<6D>
|
|||
|
<I>postgres'owy</I> backend z linii polece<63>, i uruchomi<6D> Twoje
|
|||
|
polecenie <SMALL>SQL</SMALL> bezpo<70>rednio na nim.
|
|||
|
Taki spos<6F>b jest polecany <B>jedynie</B> w przypadku debugowania.
|
|||
|
Zwr<77><72> uwag<61>, <20>e w tym wypadku zapytanie ko<6B>czy znak nowej linii a nie
|
|||
|
<20>rednik. Je<4A>li skompilowa<77>e<EFBFBD> z opcjami debugowania mozesz u<>y<EFBFBD>
|
|||
|
debuggera aby sprawdzi<7A> co si<73> dzieje. Poniew<65> backend nie zosta<74>
|
|||
|
uruchomiony przez <I>postmaster'a</I>, nie dzia<69>a w identycznym
|
|||
|
<20>rodowisku, co oznacza <20>e powt<77>rzenie warunk<6E>w w jakich wyst<73>pi<70>y
|
|||
|
problemy moze by<62> problemem.</P>
|
|||
|
|
|||
|
<P>Je<EFBFBD>li <I>postmaster</I> dzia<69>a, uruchom <I>psql</I> w jednym z
|
|||
|
okien, nast<73>pnie znajd<6A> <SMALL>PID</SMALL> procesu <I>postgres</I>
|
|||
|
u<>ywanego przez <I>psql</I>. U<>yj debuggera aby do
|
|||
|
<SMALL>PID'u</SMALL> <I>postgres'a</I>. Mo<4D>esz ustawia<69> pu<70>apki
|
|||
|
(breakpoints) w debuggerze i wykonywa<77> zapytania z <I>psql</I>.
|
|||
|
Je<4A>li debugujesz uruchamianie <I>postgres'a</I>, mo<6D>esz ustawi<77> zmienn<6E>
|
|||
|
PGOPTIONS="-W n", nast<73>pnie uruchomi<6D> <I>psql</I>.
|
|||
|
Opcja ta pozwoli spowolni<6E> uruchomienie na
|
|||
|
<I>n</I> sekund aby<62> m<>g<EFBFBD> si<73> po<70><6F>czy<7A> z procesem za pomoc<6F>
|
|||
|
debugera, ustawi<77> jakiekolwiek pu<70>apki i kontynuowa<77> proces
|
|||
|
uruchamiania.</P>
|
|||
|
|
|||
|
<P><I>postgres</I> mo<6D>e by<62> uruchamiany z opcjami <I>-s, -A</I> i
|
|||
|
<I>-t</I>, kt<6B>re mog<6F> by<62> bardzo przydatne przy debuggowaniu i ocenie
|
|||
|
wydajno<6E>ci.</P>
|
|||
|
|
|||
|
<P>Mo<EFBFBD>esz tak<61>e skompilowa<77> z profilingiem aby zobaczy<7A> jakie funkcje
|
|||
|
ile czasu wykonuj<75> si<73>. Pliki profilowane dla backendu zostan<61>
|
|||
|
umieszczone w katalogu
|
|||
|
<I>pgsql/data/base/dbname</I>. Pliki profilu klienta zostan<61>
|
|||
|
umieszczone w bie<69><65>cym katalogu klienta. Linux wymaga aby kompilowa<77>
|
|||
|
z opcj<63> <I>-DLINUX_PROFILE</I> aby profilowanie odbywa<77>o si<73>
|
|||
|
poprawnie.</P>
|
|||
|
|
|||
|
<H4><A name="3.8">3.8</A>) Sk<53>d si<73> bierze komunikat: <I>"Sorry, too
|
|||
|
many clients"</I> podczas pr<70>by po<70><6F>czenia si<73> z baz<61> danych?</H4>
|
|||
|
|
|||
|
<P>Musisz zwi<77>kszy<7A> limit ilo<6C>ci jednoczesnych proces<65>w bacekendu
|
|||
|
dla procesu <I>postmaster'a</I>.</P>
|
|||
|
|
|||
|
<P>Domy<EFBFBD>lny limit to 32 procesy. Mo<4D>esz go zwi<77>kszy<7A> przez restart
|
|||
|
<I>postmaster</I> z odpowiedni<6E> warto<74>ci<63> ustawian<61> opcj<63> <I>-N</I> w
|
|||
|
pliku <I>postgresql.conf</I>.</P>
|
|||
|
|
|||
|
<P>We<EFBFBD> pod uwag<61>, <20>e je<6A>li zwi<77>kszysz warto<74><6F> podan<61> w opcji
|
|||
|
<I>-N</I> na wi<77>cej ni<6E> 32 musisz tak<61>e zwi<77>kszy<7A> warto<74><6F> w opcji
|
|||
|
<I>-B</I> ponad jej domy<6D>ln<6C> warto<74><6F> 64; warto<74><6F> <I>-B</I> musi by<62>
|
|||
|
co najmniej dwa razy wi<77>ksza od warto<74>ci podanej w opcji
|
|||
|
<I>-N</I>, a prawdopodobnie powinna by<62> w rzeczywisto<74>ci jeszcze
|
|||
|
wi<77>ksza dla optymalnej wydajno<6E>ci.
|
|||
|
Dla du<64>ej liczby proces<65>w backendu na pewno zauwa<77>ysz, <20>e trzeba
|
|||
|
zwi<77>kszy<7A> r<><72>ne parametry j<>dra Unixa. Rzeczy, kt<6B>re powniene<6E>
|
|||
|
sprawdzi<7A> to maksymalna liczba blok<6F>w pami<6D>ci dzielonej,
|
|||
|
<SMALL>SHMMAX;</SMALL> maksymalna liczba semafor<6F>w, <SMALL>SEMMNS</SMALL>
|
|||
|
oraz <SMALL>SEMMNI;</SMALL>
|
|||
|
maksymalna liczba proces<65>w, <SMALL>NPROC;</SMALL> maksymalna liczba
|
|||
|
proces<65>w na jednego u<>ytkownika, <SMALL>MAXUPRC;</SMALL> i maksymalna
|
|||
|
liczba otwartych plik<69>w, <SMALL>NFILE</SMALL> oraz
|
|||
|
<SMALL>NINODE.</SMALL> Pow<6F>d dla kt<6B>rego PostgreSQL ma limit na
|
|||
|
maksymaln<6C> liczb<7A> proces<65>w backendu to obawa o wyczerpanie zasob<6F>w
|
|||
|
systemu.</P>
|
|||
|
|
|||
|
<P>W wersjach PostgreSQL wcze<7A>niejszych ni<6E> 6.5, maksymalna liczba
|
|||
|
backend<6E>w by<62>a ustawiona na 64, a zmiana tej warto<74>ci wymaga
|
|||
|
rekompliacji po zmianie sta<74>ej 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>,
|
|||
|
kt<6B>re znajduj<75> si<73> w katalogu z plikami bazy danych?</H4>
|
|||
|
|
|||
|
<P>S<EFBFBD> to tymczasowe pliki utworzone przez executor. Dla przyk<79>adu,
|
|||
|
je<6A>li jaka<6B> operacja sortowania jest wymagana do wykonania
|
|||
|
<SMALL>ORDER BY,</SMALL> a samo sortowanie wymaga wi<77>cej miejsca ni<6E>
|
|||
|
paratmetr backendu
|
|||
|
<I>-S</I> ustawi<77> do wykorzystania, wtedy tymczasowe pliki s<> u<>ywane
|
|||
|
do przechowywania tych danych.</P>
|
|||
|
|
|||
|
<P>Pliki tymczasowe powinny by<62> usuni<6E>te automatycznie, ale mog<6F>o si<73>
|
|||
|
to nie sta<74> je<6A>li proces backendu w mi<6D>dzyczasie nie zako<6B>czy<7A> si<73>
|
|||
|
poprawnie podczas operacji sortowania. Je<4A>li w danym momencie nie
|
|||
|
dzia<69>aj<61> <20>adne procesy backend<6E>w mozesz spokojnie usun<75><6E> pliki
|
|||
|
pg_tempNNN.NN.</P>
|
|||
|
<HR>
|
|||
|
|
|||
|
<H2 align="center">Pytania dotycz<63>ce u<>ywania</H2>
|
|||
|
|
|||
|
<H4><A name="4.1">4.1</A>) Jaka jest r<><72>nica pomi<6D>dzy kursorami
|
|||
|
binarnymi (binary cursors) i zwyk<79>ymi kursorami (normal
|
|||
|
cursors)?</H4>
|
|||
|
|
|||
|
<P>Zobacz w manualu opis polecenia <SMALL>DECLARE</SMALL>.</P>
|
|||
|
|
|||
|
<H4><A name="4.2">4.2</A>) Jak mog<6F> pobra<72> za pomoc<6F>
|
|||
|
<SMALL>SELECT</SMALL> jedynie kilka pierwszych wynik<69>w
|
|||
|
zapytania?</H4>
|
|||
|
|
|||
|
<P>Zobacz w manualu opis polecenia <SMALL>FETCH</SMALL> lub u<>yj
|
|||
|
polecenia <SMALL>SELECT</SMALL> ... <SMALL>LIMIT</SMALL>....</P>
|
|||
|
|
|||
|
<P>Nawet je<6A>li chesz pobra<72> kilka pierwszych rz<72>d<EFBFBD>w z wyniku
|
|||
|
zapytania, ca<63>e zapytanie musi zosta<74> wykonane. Byc mo<6D>e powiniene<6E>
|
|||
|
skorzysta<74> z polecenia <SMALL>ORDER BY.</SMALL>
|
|||
|
Je<4A>li istnieje indeks kt<6B>ry odpowiada polom okre<72>lonym przez
|
|||
|
<SMALL>ORDER BY</SMALL>, PostgreSQL mo<6D>e wykorzysta<74> jedynie kilka
|
|||
|
pierwszych rz<72>d<EFBFBD>w, by<62> mo<6D>e b<>dzie konieczno<6E><6F> wykonania zapytania do
|
|||
|
momentu a<> zostan<61> znalezione po<70><6F>dane wyniki.</P>
|
|||
|
|
|||
|
<H4><A name="4.3">4.3</A>) Jak mog<6F> uzyska<6B> list<73> wszystkich tabel
|
|||
|
czy innych rzeczy pod <I>psql</I>?</H4>
|
|||
|
|
|||
|
<P>Mo<EFBFBD>esz sprawdzi<7A> zawarto<74><6F> <20>r<EFBFBD>de<64> <I>psql</I>, a konkretnie plik
|
|||
|
<I>pgsql/src/bin/psql/describe.c</I>. Zawiera on polecenia
|
|||
|
<SMALL>SQL</SMALL> kt<6B>re generuja wyniki komend z backslashem.
|
|||
|
Mo<4D>esz tak<61>e uruchomi<6D> <I>psql</I> z opcj<63>
|
|||
|
<I>-E</I> wtedy po wykonaniu polecenia z backslashem wy<77>wietlane
|
|||
|
b<>dzie zapytanie, kt<6B>re w rzeczywisto<74>ci jest wykonywane.</P>
|
|||
|
|
|||
|
<H4><A name="4.4">4.4</A>) Jak usun<75><6E> kolumn<6D> z tabeli?</H4>
|
|||
|
|
|||
|
<P>Nie mamy zaimplementowanego <SMALL>ALTER TABLE DROP
|
|||
|
COLUMN,</SMALL> ale mo<6D>esz zrobi<62> tak:</P>
|
|||
|
<PRE>
|
|||
|
SELECT ... -- wybierz zawarto<74><6F> wszystkich kolumn poza t<> jedn<64> kt<6B>rej chcesz si<73> pozby<62>
|
|||
|
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 rz<72>du,
|
|||
|
tabeli i bazy danych?</H4>
|
|||
|
|
|||
|
<P>Oto wszystkie ograniczenia:</P>
|
|||
|
<PRE>
|
|||
|
Maksymalny rozmiar dla bazdy danych? nieograniczony ( istniej<65> bazy danych o wielko<6B>ci 500 GB databases )
|
|||
|
Maksymalny rozmiar dla tabeli? 16 TB
|
|||
|
Maksymalny rozmiar dla rz<72>du? nieograniczony w 7.1 i p<><70>niejszych
|
|||
|
Maksymalny rozmiar pola? 1 GB w 7.1 and later
|
|||
|
Maksymalna liczba rz<72>d<EFBFBD>w w tabeli? nieograniczona
|
|||
|
Maksymalna liczba kolumn w tabeli? 250-1600 w zale<6C>ono<6E>ci od typ<79>w kolumn
|
|||
|
Makasymalna liczba indeks<6B>w na tabeli? nieograniczona
|
|||
|
</PRE>
|
|||
|
|
|||
|
Oczywi<77>cie "nieograniczony" nie jest prawd<77> tak do ko<6B>ca, istniej<65>
|
|||
|
ograniczenia wynikaj<61>ce z dost<73>pnego miejsca na dysku, pami<6D>ci/swapa.
|
|||
|
Kiedy wielko<6B>ci te b<>d<EFBFBD> bardzo du<64>e mo<6D>e odbi<62> si<73> to na wydajno<6E>ci.
|
|||
|
|
|||
|
<P>Maksymalny rozmiar tabeli, czyli 16 TB nie wymaga od systemu
|
|||
|
operacyjnego wsparcia dla du<64>ych plik<69>w. Du<44>e tabele s<> przechowywane
|
|||
|
jako pliki o rozmiarze 1 GB, wi<77>c ograniczenia co do wielko<6B>ci plik<69>w
|
|||
|
narzucone przez system plik<69>w nie s<> istotne.</P>
|
|||
|
|
|||
|
<P>Masymalny rozmiar tabeli i maksymalna liczba kolumn mo<6D>e by<62>
|
|||
|
zwi<77>kszona je<6A>li zwi<77>kszymy domy<6D>lny rozmiar bloku (block size) do
|
|||
|
32k.</P>
|
|||
|
|
|||
|
<H4><A name="4.6">4.6</A>) Jak du<64>o miejsca w bazie danych jest
|
|||
|
konieczne aby przechowywa<77> dane ze zwyczajnego pliku
|
|||
|
tekstowego?</H4>
|
|||
|
|
|||
|
<P>Baza danych PostgreSQL mo<6D>e potrzebowa<77> do pi<70>ciu razy wi<77>cej
|
|||
|
miejsca na przechowywanie danych z plik<69>w tekstowych ni<6E> ich
|
|||
|
obj<62>to<74><6F>.</P>
|
|||
|
|
|||
|
<P>Jako przyk<79>ad mo<6D>emy rozwa<77>y<EFBFBD> plik sk<73>adaj<61>cy si<73> z 100,000 linii
|
|||
|
zbudowanych z liczby ca<63>kowitej oraz opisu tekstowego w ka<6B>dej.
|
|||
|
Za<5A><61><EFBFBD>my, <20>e <20>rednio ka<6B>dy <20>a<EFBFBD>cuch tekstu w linii zajmuje 20
|
|||
|
bajt<6A>w. Ca<43>y plik powinien zajmowa<77> ok. 2.8 MB. Rozmiar pliku bazy danych w
|
|||
|
PostgreSQL zawieraj<61>cego te dane mozna oszacowa<77> na oko<6B>o 6.4MB:</P>
|
|||
|
|
|||
|
<PRE>
|
|||
|
36 bajt<6A>w: nag<61><67>wek ka<6B>dego rz<72>du w przybli<6C>eniu)
|
|||
|
24 bajty: jedno pole int i jedno pole typu text
|
|||
|
+ 4 bajty: wka<6B>nik na stronie do krotki
|
|||
|
--------------------------------------------------
|
|||
|
64 bajty w jednym rz<72>dzie
|
|||
|
|
|||
|
Strona danych w PostgreSQL zajmuje 8192 bajt<6A>w (8 KB), wi<77>c:
|
|||
|
|
|||
|
8192 bajt<6A>w na stron<6F>
|
|||
|
--------------------- = 128 rz<72>d<EFBFBD>w na jedn<64> strone w bazie (zaokr<6B>glone w d<><64>)
|
|||
|
64 bajt<6A>w na rz<72>d
|
|||
|
|
|||
|
100000 rz<72>d<EFBFBD>w danych
|
|||
|
----------------------- = 782 stron w bazie danych (zaokr<6B>glone w g<>r<EFBFBD>)
|
|||
|
128 rz<72>d<EFBFBD>w na stron<6F>
|
|||
|
|
|||
|
782 stron w bazie * 8192 bajt<6A>w na stron<6F> = 6,406,144 bajt<6A>w (6.4 MB)
|
|||
|
</PRE>
|
|||
|
|
|||
|
<P>Indeksy nie powoduj<75> du<64>ego narzutu na zajmowane miejsce,
|
|||
|
ale zawieraj<61> pewne dane,
|
|||
|
wi<77>c w pewnych przypadkach moga by<62> ca<63>kiem du<64>e.</P>
|
|||
|
|
|||
|
<H4><A name="4.7">4.7</A>) Jak mog<6F> sprawdzi<7A> jakie tabele, klucze,
|
|||
|
bazy danych i u<>ytkownicy s<> utworzeni?</H4>
|
|||
|
|
|||
|
<P><I>psql</I> ma ca<63>kiem du<64><75> ilo<6C><6F> polece<63> z backslashem aby
|
|||
|
wydoby<62> takie informacje. Wprowad<61> \? aby zobaczy<7A> ich spis. Istniej<65>
|
|||
|
tak<61>e tablice systemowe rozpoczynaj<61>ce si<73> od <i>pg_</i>, zawieraj<61>ce
|
|||
|
interesuj<75>ce Ciebie informacje. Wykonanie <i>psql -l</i> poka<6B>e spis
|
|||
|
wszystkich baz danych.</P>
|
|||
|
|
|||
|
<P>Obejrzyj tak<61>e plik <I>pgsql/src/tutorial/syscat.source</I>.
|
|||
|
Zawiera on wiele z zapyta<74> typu <SMALL>SELECT</SMALL>, kt<6B>re s<>
|
|||
|
potrzebne aby wydoby<62> informacje z tablic systemowych.</P>
|
|||
|
|
|||
|
<H4><A name="4.8">4.8</A>) Moje zapytania s<> wolne lub nie u<>ywaj<61>
|
|||
|
kluczy. Dlaczego?</H4>
|
|||
|
|
|||
|
Indeksy nie s<> u<>ywane automatycznie przez k<><6B>de z zapyta<74>. Ideksy s<>
|
|||
|
u<>ywane jedynie gdy tabela jest odpowiedniego rozmiaru, wi<77>kszego ni<6E>
|
|||
|
wymagany minimalny, a zapytanie wybiera jedynie ma<6D>y procent
|
|||
|
zawarto<74>ci tabeli. Wynika to z tego, <20>e losowy dostep do dysku
|
|||
|
powodowany przez ideksowane poszukiwanie jest czasami wolniejsze ni<6E>
|
|||
|
poszukiwanie sekwencyjne bez u<>ycia kluczy.
|
|||
|
|
|||
|
<P><EFBFBD>eby zdecydowa<77> czy indeks powinien byc u<>ywany, PostgreSQL musi
|
|||
|
mie<69> statystyki dotycz<63>ce danej tabeli. S<> one gromadzone przez
|
|||
|
u<>ycie polecenia <SMALL>VACUUM ANALYZE</SMALL>, lub poprostu
|
|||
|
<SMALL>ANALYZE</SMALL>. u<>ywaj<61>c statystyk, optymalizator wie ile
|
|||
|
rz<72>d<EFBFBD>w jest w tabeli i mo<6D>e lepiej okre<72>li<6C> czy indeksy powinny by<62>
|
|||
|
u<>yte. Statystyki mog<6F> by<62> tak<61>e pomocne w okre<72>leniu najlepszej
|
|||
|
kolejno<6E>ci wykonania z<><7A>czenia (join) i jego sposobu. Gromadzenie
|
|||
|
statystyk powinno si<73> odbywa<77> w okre<72>lonych interwa<77>ach czasu
|
|||
|
poniewa<77> dane w tabelach zmieniaj<61> si<73>.</P>
|
|||
|
|
|||
|
<P>Indeksy nie s<> zazwyczaj u<>ywane przez <SMALL>ORDER BY</SMALL> lub
|
|||
|
przy wykonywaniu z<><7A>cze<7A> (join). Sekwencyjne przeszukiwanie po kt<6B>rym
|
|||
|
nast<73>puje sortowanie jest zazwyczaj szybsze ni<6E> wyszukiwanie za
|
|||
|
pomoc<6F> indeksu na du<64>ej tabeli.</P>
|
|||
|
Jakkolwiek <SMALL>LIMIT</SMALL> w po<70><6F>czeniu z <SMALL>ORDER BY</SMALL>
|
|||
|
cz<63>sto b<>dzie wykorzystywa<77> indeks<6B>w poniew<65>z jedynie ma<6D>a cz<63><7A>c z
|
|||
|
tabeli jest zwracana.
|
|||
|
|
|||
|
<P>Kiedy u<>ywa si<73> operator<6F>w dopasuj<75>cych takich jak
|
|||
|
<SMALL>LIKE</SMALL> lub <I>~</I>, indeksy b<>d<EFBFBD> u<>ywane jedynie je<6A>li
|
|||
|
pocz<63>tek wyszukiwania jest oparty na pocz<63>tku <20>a<EFBFBD>cucha tekstu.
|
|||
|
Dlatego, aby u<>ywac indeks<6B>w,
|
|||
|
dopasowania operatorem <SMALL>LIKE</SMALL> nie mog<6F> si<73> zaczyna<6E>
|
|||
|
<I>%</I>, a dopasowania operatorem <I>~</I> (dopasowania regularne)
|
|||
|
musz<73> si<73> zaczyna<6E> znakiem specjalnym <I>^</I>.</P>
|
|||
|
|
|||
|
<H4><A name="4.9">4.9</A>) Jak mog<6F> sprawdzi<7A> w jakis spos<6F>b "query
|
|||
|
optimizer" wykonuje moje zapytanie?</H4>
|
|||
|
|
|||
|
<P>Zobacz manual dla polecenia <SMALL>EXPLAIN</SMALL>.</P>
|
|||
|
|
|||
|
<H4><A name="4.10">4.10</A>) Co to jest "R-tree index"?</H4>
|
|||
|
|
|||
|
<P>Indeks R-tree jest u<>ywany do indeksowania danych przestrzennych.
|
|||
|
Indeks hasuuj<75>cy nie nadaje si<73> do wyszukiwania odleg<65>o<EFBFBD>ci.
|
|||
|
Natomiast indeks typu B-tree mo<6D>e wyszukiwa<77> odleglo<6C>ci jedynie w
|
|||
|
jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z
|
|||
|
przestrzeniami wielo-wymiarowymi. Dla przyk<79>adu, je<6A>li zostanie
|
|||
|
za<7A>o<EFBFBD>ony indeks typu R-tree na polu typu <I>point</I>, system mo<6D>e
|
|||
|
bardziej wydajnie odpowiada<64> na zapytania typu
|
|||
|
"select all points within a bounding rectangle."</P>
|
|||
|
|
|||
|
<P><EFBFBD>r<EFBFBD>d<EFBFBD>owym dokumentem opisuj<75>cym oryginalnie projektowanie R-tree
|
|||
|
indeks<6B>w jest:</P>
|
|||
|
|
|||
|
<P>Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
|
|||
|
Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt
|
|||
|
of Data, 45-57.</P>
|
|||
|
|
|||
|
<P>Ten dokument mo<6D>esz znale<6C><65> tak<61>e w pracy Stonebraker'a "Readings in
|
|||
|
Database Systems".</P>
|
|||
|
|
|||
|
<P>Wbudowane indeksy R-trees radz<64> sobie w wielobokami i boxes.
|
|||
|
Teoretycznie, indeksy R-tree mog<6F> by<62> rozszerzone o mo<6D>liwo<77>ci
|
|||
|
indeksowania w wi<77>cej wymiarowych przestrzeniach. W praktyce,
|
|||
|
rozbudowa indeks<6B>w R-tree wymaga troch<63> pracy, a w tej chwili nie
|
|||
|
dysponujemy jak<61>kolwiek dokumentacj<63> jak to zrobi<62>.</P>
|
|||
|
|
|||
|
<H4><A name="4.11">4.11</A>) Co to jest "Genetic Query
|
|||
|
Optimizer"?</H4>
|
|||
|
|
|||
|
<P>Modu<EFBFBD> <SMALL>GEQO</SMALL> ma za zadanie przyspieszenie
|
|||
|
optymalizacji zapyta<74> <20><>cz<63>c wiele tabel za pomoc<6F> algorytm<74>w
|
|||
|
genetycznych (Genetic Algorithm (GA)). Pozwala na u<>ywanie du<64>ych
|
|||
|
zapyta<74> <20><>cz<63>cych tabele (join queries) bez wykorzystywania
|
|||
|
zasobo<62>ernego wyszukiwania.</P>
|
|||
|
|
|||
|
<H4><A name="4.12">4.12</A>) Jak mog<6F> u<>ywa<77> wyra<72>e<EFBFBD> regularnych w
|
|||
|
zapytaniach i zapyta<74> case-insensitive w wyra<72>eniach
|
|||
|
regularnych?
|
|||
|
jak korzysta<74> z indeks<6B>w dla zapyta<74> case-insensitive?</H4>
|
|||
|
|
|||
|
<P>Operator <I>~</I> moze by<62> wykorzystywany do wyszukiwania za
|
|||
|
pomoc<6F> wyra<72>e<EFBFBD> regularnych, a
|
|||
|
<I>~*</I> do wyszukiwania case-insensitive z wyra<72>eniami
|
|||
|
regularnymi.
|
|||
|
Wariant case-insensitive dla <SMALL>LIKE</SMALL> zosta<74> nazwany
|
|||
|
<SMALL>ILIKE</SMALL> i jest dost<73>pny w PostgreSQL 7.1 i p<><70>niejszych
|
|||
|
wersjach.</P>
|
|||
|
|
|||
|
<P>Por<EFBFBD>wnania case-insensitive s<> zazwyczaj wykonywane w nast<73>puj<75>cy
|
|||
|
spos<6F>b:</P>
|
|||
|
<PRE>
|
|||
|
SELECT *
|
|||
|
FROM tab
|
|||
|
WHERE lower(col) = 'abc'
|
|||
|
|
|||
|
</PRE>
|
|||
|
W tym wypadku standardowe indeksy nie b<>d<EFBFBD> u<>ywane. Mo<4D>esz utworzy<7A>
|
|||
|
indeks funkcyjny, poprzez:
|
|||
|
<PRE>
|
|||
|
CREATE INDEX tabindex on tab (lower(col));
|
|||
|
|
|||
|
</PRE>
|
|||
|
|
|||
|
<H4><A name="4.13">4.13</A>) Jak sprawdzi<7A> w zapytaniu czy pole ma
|
|||
|
warto<74><6F> <SMALL>NULL</SMALL>?</H4>
|
|||
|
|
|||
|
<P>Mo<EFBFBD>esz to sprawdzi<7A>, testuj<75>c warto<74><6F> kolumny warunkiem
|
|||
|
<SMALL>IS NULL</SMALL> albo <SMALL>IS NOT NULL</SMALL>.</P>
|
|||
|
|
|||
|
<H4><A name="4.14">4.14</A>) Jaka jest r<><72>nica pomi<6D>dzy r<><72>nymi
|
|||
|
typami tekstowymi (character types)?</H4>
|
|||
|
<PRE>
|
|||
|
Type Nazwa wewn<77>trzna Uwagi
|
|||
|
--------------------------------------------------
|
|||
|
"char" char 1 znak
|
|||
|
CHAR(#) bpchar wype<70>niane pustymi znakami do podanej d<>ugo<67>ci
|
|||
|
VARCHAR(#) varchar rozmiar okre<72>la maksymaln<6C> d<>ugo<67><6F>, nie ma tutaj wype<70>niania
|
|||
|
TEXT text bez limitu na d<>ugo<67><6F> <20>a<EFBFBD>cucha
|
|||
|
BYTEA bytea zmiennej d<>ugo<67>ci tablica bajt<6A>w (null-byte safe)
|
|||
|
</PRE>
|
|||
|
|
|||
|
<P>Je<EFBFBD>li b<>dziesz przegl<67>da<64> katalogi systemowe lub komunikaty o
|
|||
|
b<><62>dach cz<63>sto spotkasz si<73> z podanymi powy<77>ej nazwami
|
|||
|
wewn<77>trznymi.</P>
|
|||
|
|
|||
|
<P>Ostatnie cztery typy powy<77>ej to tzw typy "varlena" (np. pierwsze
|
|||
|
cztery bajty na dysku to d<>ugo<67><6F>, po kt<6B>rych jest data). Dlatego
|
|||
|
faktyczna d<>ugo<67>c takiego <20>a<EFBFBD>cucha jest troch<63> wi<77>ksza ni<6E>
|
|||
|
zadeklarowany rozmiar. Te typy tak<61>e podlegaj<61> kompresji lub mog<6F> by<62>
|
|||
|
przechowywane out-of-line jako <SMALL>TOAST</SMALL>, wi<77>c faktyczne
|
|||
|
zu<7A>ycie miejsca na dysku mo<6D>e by<62> mniejsze ni<6E> oczekiwane.</P>
|
|||
|
|
|||
|
<P><SMALL>CHAR()</SMALL> jast najlepszym typem do przechowywania
|
|||
|
<20>a<EFBFBD>cuch<63>w o tej samej d<>ugo<67>ci. <SMALL>VARCHAR()</SMALL> jest
|
|||
|
najodpowiedniejszy do przechowywania <20>a<EFBFBD>cuch<63>w o r<><72>nej d<>ugo<67>ci
|
|||
|
ale okre<72>la on maksymaln<6C> jego d<>ugo<67><6F>. <SMALL>TEXT</SMALL> jest
|
|||
|
najlepszy dla <20>a<EFBFBD>cuch<63>w o dowolnej d<>ugo<67>ci, nie przekraczaj<61>cej 1GB.
|
|||
|
<SMALL>BYTEA</SMALL> s<>u<EFBFBD>y do przechowywania danych binarnych,
|
|||
|
w szczeg<65>lno<6E>ci dla danych zawieraj<61>cych <SMALL>NULL</SMALL> bajty.</P>
|
|||
|
|
|||
|
<H4><A name="4.15.1">4.15.1</A>) Jak mog<6F> utworzy<7A> pole kt<6B>re samo
|
|||
|
zwi<77>ksza swoj<6F> warto<74><6F>?</H4>
|
|||
|
|
|||
|
<P>PostgreSQL ma zaimplementowany typ <SMALL>SERIAL</SMALL>.
|
|||
|
Automatycznie tworzy sekwencj<63> i indeks na tej kolumnie. Dla
|
|||
|
przykladu:</P>
|
|||
|
<PRE>
|
|||
|
CREATE TABLE person (
|
|||
|
id SERIAL,
|
|||
|
name TEXT
|
|||
|
);
|
|||
|
</PRE>
|
|||
|
zostanie automatycznie przt<7A>umaczone na:
|
|||
|
<PRE>
|
|||
|
CREATE SEQUENCE person_id_seq;
|
|||
|
CREATE TABLE person (
|
|||
|
id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
|
|||
|
name TEXT
|
|||
|
);
|
|||
|
CREATE UNIQUE INDEX person_id_key ON person ( id );
|
|||
|
</PRE>
|
|||
|
Wi<57>cej informacji o sekwencjach znajdziesz w manualu o
|
|||
|
<I>create_sequence</I>. Mo<4D>esz tak<61>e u<>y<EFBFBD> pola <I>OID</I> jako
|
|||
|
unikalnej warto<74>ci dla ka<6B>dego rz<72>du danych. Je<4A>li b<>dziesz
|
|||
|
potrzebowa<77> z backupowa<77> dane robi<62>c dump bazy i odtworzy<7A> j<>, musisz
|
|||
|
u<>yc <I>pg_dump</I> z opcj<63> <I>-o</I> lub polecenia <SMALL>COPY
|
|||
|
WITH OIDS</SMALL> aby zachowa<77> <SMALL>OIDy</SMALL>.
|
|||
|
|
|||
|
<H4><A name="4.15.2">4.15.2</A>) Jak pobra<72> warto<74><6F> pola typu
|
|||
|
<SMALL>SERIAL</SMALL> po wykonaniu insert'u?</H4>
|
|||
|
|
|||
|
<P>Jednym z podej<65><6A> jest pobranie kolejnej warto<74>ci typu
|
|||
|
<SMALL>SERIAL</SMALL> z sekwencji za pomoc<6F> funkcji <I>nextval()</I>
|
|||
|
<I>zanim</I> zostanie wstawiona, a p<><70>niej nale<6C>y jej u<>y<EFBFBD>. U<>ywaj<61>c
|
|||
|
przyk<79>adu z tabeli z punktu <A href="#4.15.1">4.15.1</A>, mo<6D>e to
|
|||
|
wygl<67>da<64> w Perlu na przyk<79>ad w ten spos<6F>b:</P>
|
|||
|
|
|||
|
<PRE>
|
|||
|
new_id = output of "SELECT nextval('person_id_seq')"
|
|||
|
INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
|
|||
|
</PRE>
|
|||
|
B<>dziesz mia<69> wtedy t<> warto<74><6F> przechowan<61> w zmiennej
|
|||
|
<CODE>new_id</CODE> do u<>ytku w innych zapytaniach (np. jako klucz
|
|||
|
obcy do tabeli <CODE>person</CODE>). Warto zwr<77>ci<63> uwag<61>, <20>e nazwa
|
|||
|
automatycznie utworzonej sekwencji
|
|||
|
<SMALL>SEQUENCE</SMALL> b<>dzie nast<73>puj<75>ca:
|
|||
|
<<I>tabela</I>>_<<I>kolumnatypuserial</I>>_<I>seq</I>,
|
|||
|
gdzie
|
|||
|
<I>tabela</I> i <I>kolumnatypuserial</I> s<> nazwami Twojej tabeli i
|
|||
|
Twojej kolumny typu <SMALL>SERIAL</SMALL>.
|
|||
|
|
|||
|
<P>Inne rozwi<77>zanie to u<>ycie funkcji <I>currval</I>() na pola typu
|
|||
|
<SMALL>SERIAL</SMALL> po dodaniu nowej warto<74>ci do rz<72>du zawieraj<61>cego
|
|||
|
kolumn<6D> typu <SMALL>SERIAL</SMALL> z wstawion<6F> domy<6D>lnie warto<74>ci<63>,
|
|||
|
np.</P>
|
|||
|
<PRE>
|
|||
|
INSERT INTO person (name) VALUES ('Blaise Pascal');
|
|||
|
new_id = output of "SELECT currval('person_id_seq')";
|
|||
|
</PRE>
|
|||
|
Ostatecznie mo<6D>esz u<>y<EFBFBD> <A href="#4.16"><SMALL>OID</SMALL></A>
|
|||
|
zwracanej po wykonaniu <SMALL>INSERT</SMALL>, chocia<69> to jest najmniej
|
|||
|
przeno<6E>ne rozwi<77>zanie.
|
|||
|
W Perlu, wykorzystuj<75>c bibliotek<65> DBI z modu<64>em Edmunda Mergla
|
|||
|
DBD::Pg, oid jest dost<73>pny poprzez <I>$sth->{pg_oid_status}</I> po
|
|||
|
wykonaniu <I>$sth->execute()</I>.
|
|||
|
|
|||
|
<H4><A name="4.15.3">4.15.3</A>) Czy u<>ycie <I>currval()</I> i
|
|||
|
<I>nextval()</I> nie doprowadzi do race condition z innymi
|
|||
|
u<>ytkownikami?</H4>
|
|||
|
|
|||
|
<P>Nie. currval() zwraca bie<69><65>c<EFBFBD> warto<74><6F> przypisan<61> przez Tw<54>j
|
|||
|
backend, a nie przez wszystkich u<>ytkownik<69>w.</P>
|
|||
|
|
|||
|
<H4><A name="4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie s<>
|
|||
|
ponownie u<>ywane przy przerwaniu transakcji?
|
|||
|
Sk<53>d si<73> bior<6F> luki w numerowaniu kolumny tabeli
|
|||
|
sekwancjami/SERIALem?</H4>
|
|||
|
|
|||
|
<P>Aby poprawi<77> zbie<69>no<6E><6F> (concurrency), warto<74>ci sekwencji s<>
|
|||
|
podawane dzia<69>aj<61>cym transakcjom kiedy tego potrzebuj<75> i nie s<>
|
|||
|
blokowane dop<6F>ki transakcja si<73> nie zako<6B>czy. To spowoduje przerwy w
|
|||
|
numerowaniu z przerwanych transakcji.</P>
|
|||
|
|
|||
|
<H4><A name="4.16">4.16</A>) Co to jest <SMALL>OID</SMALL>? Co to
|
|||
|
jest
|
|||
|
<SMALL>TID</SMALL>?</H4>
|
|||
|
|
|||
|
<P><SMALL>OID</SMALL> s<> PostgreSQL'owym rozwi<77>zaniem problemu
|
|||
|
unikalnych numer<65>w rz<72>d<EFBFBD>w. Ka<4B>dy rz<72>d tworzony przez PostgreSQL
|
|||
|
otrzymuje unikalny <SMALL>OID</SMALL>. Wszystkie <SMALL>OID</SMALL>y
|
|||
|
generowane podczas procesu uruchamianego przez skrypt
|
|||
|
<I>initdb</I> maj<61> mniejsz<73> warto<74><6F> ni<6E> 16384 (na podstawie pliku
|
|||
|
<I>backend/access/transam.h</I>). Wszystkie
|
|||
|
<SMALL>OID</SMALL>y tworzone przez u<>ytkownika sa r<>wne lub wi<77>ksze
|
|||
|
podanej wcze<7A>niej warto<74>ci. Domy<6D>lnie
|
|||
|
wszystkie <SMALL>OID</SMALL>y s<> unikalne nie tylko w pojedy<64>czej
|
|||
|
tabeli czy bazie danych ale w ca<63>ej instalacji PostgreSQL.</P>
|
|||
|
|
|||
|
<P>PostgreSQL u<>ywa <SMALL>OID<EFBFBD>w</SMALL> w swoim wewn<77>trznym systemie
|
|||
|
tabel, aby mo<6D>na by<62>o je <20><>czy<7A>.
|
|||
|
Te <SMALL>OIDy</SMALL> mog<6F> byc u<>ywane aby identyfikowac rz<72>dy w
|
|||
|
tabelach i wykorzystywa<77> je w z<><7A>czeniach tych tabel. Zaleca si<73> aby<62>
|
|||
|
u<>ywa<77> typu <SMALL>OID</SMALL> aby przechowywa<77> warto<74>ci
|
|||
|
<SMALL>OID</SMALL>. Mo<4D>esz utworzy<7A> indeks na polu
|
|||
|
<SMALL>OID</SMALL> aby dost<73>p do niego by<62> szybszy.</P>
|
|||
|
|
|||
|
<P><SMALL>OID</SMALL> s<> przypisane do wszystkich rz<72>d<EFBFBD>w z jednego
|
|||
|
g<><67>wnego miejsca i u<>ywane sa przez wszystkie bazy danych. Je<4A>li
|
|||
|
chcia<69>by<62> zmieni<6E> <SMALL>OID</SMALL> na co<63> innego, lub je<6A>li
|
|||
|
chcia<69>by<62> zrobi<62> kopi<70> tabeli, z orginalnymi <SMALL>OIDami</SMALL>
|
|||
|
nie ma <20>adnego przeciwwskazania aby<62> to zrobi<62>:</P>
|
|||
|
|
|||
|
<PRE>
|
|||
|
CREATE TABLE new_table(old_oid oid, mycol int);
|
|||
|
SELECT old_oid, mycol INTO new FROM old;
|
|||
|
COPY new TO '/tmp/pgtable';
|
|||
|
DELETE FROM new;
|
|||
|
COPY new WITH OIDS FROM '/tmp/pgtable';
|
|||
|
<!--
|
|||
|
CREATE TABLE new_table (mycol int);
|
|||
|
INSERT INTO new_table (oid, mycol) SELECT oid, mycol FROM old_table;
|
|||
|
-->
|
|||
|
</PRE>
|
|||
|
|
|||
|
<P><SMALL>OIDy</SMALL> s<> przechowywane jako cztero-bajtowe liczby
|
|||
|
ca<63>kowite i sko<6B>cz<63> si<73> po osi<73>gni<6E>ciu czterech miliard<72>w. Nikt jak
|
|||
|
dot<6F>d nie zg<7A>osi<73> aby co<63> takiego si<73> stalo, ale mamy zamiar pozby<62>
|
|||
|
si<73> tego ograniczenia zanim kto<74> to zg<7A>osi.</P>
|
|||
|
|
|||
|
<P><SMALL>TID</SMALL> s<> u<>ywane aby zidentyfikowa<77> konkretne rz<72>dy z
|
|||
|
blokami i warto<74>ci<63> ofset<65>w. <SMALL>TIDy</SMALL> zmieniaj<61> si<73> wraz
|
|||
|
ze zmianami rz<72>d<EFBFBD>w. Sa u<>ywane przez indeksy, aby wskazywa<77> do
|
|||
|
fizycznych rz<72>d<EFBFBD>w.</P>
|
|||
|
|
|||
|
<H4><A name="4.17">4.17</A>) Jakie jest znaczenie niekt<6B>rych termin<69>w
|
|||
|
w PostgreSQL?</H4>
|
|||
|
|
|||
|
<P>W cz<63><7A>ci kodu <20>r<EFBFBD>d<EFBFBD>owego i starszej dokumentacji u<>ywamy termin<69>w,
|
|||
|
kt<6B>re maj<61> bardziej og<6F>lne znaczenie. Oto niekt<6B>re z nich:</P>
|
|||
|
|
|||
|
<UL>
|
|||
|
<LI>table, relation, class</LI>
|
|||
|
|
|||
|
<LI>row, record, tuple</LI>
|
|||
|
|
|||
|
<LI>column, field, attribute</LI>
|
|||
|
|
|||
|
<LI>retrieve, select</LI>
|
|||
|
|
|||
|
<LI>replace, update</LI>
|
|||
|
|
|||
|
<LI>append, insert</LI>
|
|||
|
|
|||
|
<LI><SMALL>OID</SMALL>, serial value</LI>
|
|||
|
|
|||
|
<LI>portal, cursor</LI>
|
|||
|
|
|||
|
<LI>range variable, table name, table alias</LI>
|
|||
|
</UL>
|
|||
|
|
|||
|
<P>List<EFBFBD> termin<69>w zwi<77>zanych z bazami danych mo<6D>esz znale<6C><65> 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>) Sk<53>d bierze si<73> ten b<><62>d <I>"ERROR:
|
|||
|
Memory exhausted in AllocSetAlloc()"</I>?</H4>
|
|||
|
|
|||
|
<P>Je<EFBFBD>li u<>ywasz wersji starszej ni<6E> 7.1, upgrade mo<6D>e rozwi<77>za<7A> ten
|
|||
|
problem. Jest tak<61>e mozliwe, <20>e po prostu wyczerpa<70>a Ci si<73> pami<6D><69>
|
|||
|
wirtualna (virtual memory) w systemie lub Tw<54>j kernel ma zbyt nisko
|
|||
|
ustawione limity dla pewnych zasob<6F>w. Spr<70>buj wykona<6E> nast<73>puj<75>ce
|
|||
|
polecenia zanim uruchomisz <I>postmaster'a</I>:</P>
|
|||
|
<PRE>
|
|||
|
ulimit -d 262144
|
|||
|
limit datasize 256m
|
|||
|
</PRE>
|
|||
|
W zale<6C>no<6E>ci od shell'a jakiego u<>ywasz jedno z tych polece<63> mo<6D>e nie
|
|||
|
zadzia<69>a<EFBFBD>, ale to ustawienie pozwoli ustawi<77> segment danych dla
|
|||
|
procesu znacznie wi<77>kszy i by<62> mo<6D>e pozwoli wykona<6E> zapytanie.
|
|||
|
To polecenie zadzia<69>a dla bie<69><65>cego procesu oraz wszytkich podproces<65>w
|
|||
|
utworzonych po wykonaniu polecenia. Je<4A>li ten problem wyst<73>puje z
|
|||
|
klientem <SMALL>SQL</SMALL>, poniewa<77> backend zwraca zbyt du<64>o danych,
|
|||
|
spr<70>buj wykona<6E> to polecenie przed uruchomieniem klienta.
|
|||
|
|
|||
|
<H4><A name="4.19">4.19</A>) Jak sprawdzi<7A> jakiej wersji PostgreSQL
|
|||
|
u<>ywam?</H4>
|
|||
|
|
|||
|
<P>W <I>psql</I>, wpisz <CODE>select version();</CODE></P>
|
|||
|
|
|||
|
<H4><A name="4.20">4.20</A>) Dlaczego operacje, kt<6B>re wykonuj<75> na
|
|||
|
du<64>ych obiektach "large-object" zwracaj<61> komunikat:
|
|||
|
<I>"invalid large obj descriptor"</I>?</H4>
|
|||
|
|
|||
|
<P>Musisz u<>y<EFBFBD> <CODE>BEGIN WORK</CODE> i <CODE>COMMIT</CODE>
|
|||
|
przed i po u<>yciu uchwytu do du<64>ego obiektu, tzn. musisz nimi otoczy<7A>
|
|||
|
funkcje <CODE>lo_open</CODE> ... <CODE>lo_close.</CODE></P>
|
|||
|
|
|||
|
<P>Obecnie PostgreSQL u<>ywj<77>c "rule" zamyka uchwyt do du<64>ego obiektu
|
|||
|
przy ka<6B>dym wywo<77>aniu "commit". Wi<57>c pierwsze pr<70>ba zrobienia
|
|||
|
czegokolwiek z uchwytem spowoduje wypisanie: <I>invalid large obj
|
|||
|
descriptor</I>. Kod, kt<6B>ry do tej pory dzia<69>a<EFBFBD> (przynajmniej
|
|||
|
wi<77>kszo<7A><6F> razy) b<>dzie teraz generowa<77> informacj<63> o b<><62>dzie je<6A>li nie
|
|||
|
b<>dziesz korzysta<74> z transakcji.</P>
|
|||
|
|
|||
|
<P>Je<EFBFBD>li u<>ywasz interfejsu klienta jak <SMALL>ODBC</SMALL> by<62> mo<6D>e
|
|||
|
b<>dziesz musia<69> ustawi<77> <CODE>auto-commit off.</CODE></P>
|
|||
|
|
|||
|
<H4><A name="4.21">4.21</A>) Jak stworzy<7A> kolumn<6D> kt<6B>rej domy<6D>ln<6C>
|
|||
|
warto<74>ci<63> b<>dzie bie<69><65>cy czas?</H4>
|
|||
|
|
|||
|
<P>U<EFBFBD>yj <I>CURRENT_TIMESTAMP</I>:</P>
|
|||
|
<PRE>
|
|||
|
<CODE>CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
|
|||
|
</CODE>
|
|||
|
</PRE>
|
|||
|
|
|||
|
<H4><A name="4.22">4.22</A>) Dlaczego zapytania u<>ywaj<61>ce
|
|||
|
<CODE><SMALL>IN</SMALL></CODE> sa takie wolne?</H4>
|
|||
|
|
|||
|
<P>Obecnie <20><>czymy podzapytania w outer queries poprzez sekwencyjne
|
|||
|
przeszukiwanie wynik<69>w podzapytania dla ka<6B>dego rz<72>du z outer query.
|
|||
|
Mo<4D>na to omin<69><6E> zast<73>puj<75>c <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<77> to ograniczenie w przysz<73>ych wydaniach.
|
|||
|
|
|||
|
<H4><A name="4.23">4.23</A>) Jak wykona<6E> "outer join"?</H4>
|
|||
|
|
|||
|
<P>PostgreSQL 7.1 i p<><70>niejsze wersje maj<61> zaimplementowane outer join
|
|||
|
wykorzystuj<75>c standardow<6F> sk<73>adnie SQL. Poni<6E>ej dwa przyk<79>ady:</P>
|
|||
|
|
|||
|
<PRE>
|
|||
|
SELECT *
|
|||
|
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
|
|||
|
</PRE>
|
|||
|
or
|
|||
|
<PRE>
|
|||
|
SELECT *
|
|||
|
FROM t1 LEFT OUTER JOIN t2 USING (col);
|
|||
|
</PRE>
|
|||
|
|
|||
|
<P>Te dwa identyczne zapytania <20><>cz<63> kolumn<6D> t1.col z kolumn<6D> t2.col,
|
|||
|
ale tak<61>e zwr<77>c<EFBFBD> niepo<70><6F>czone rz<72>dy w t1 (te kt<6B>re nie pasuj<75> w t2).
|
|||
|
<SMALL>RIGHT</SMALL> join doda<64>by niepo<70><6F>czone rz<72>dy z tabeli t2.
|
|||
|
<SMALL>FULL</SMALL> join zwr<77>ci<63>by rz<72>dy plus dodatkowo wszystkie
|
|||
|
rz<72>dy z tabel t1 i t2. S<>owo <SMALL>OUTER</SMALL> jest opcjonalne i
|
|||
|
jest dodawane domy<6D>lnie przy
|
|||
|
<SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL>, i <SMALL>FULL</SMALL>
|
|||
|
join'ach. Zwyk<79>e join'y s<> nazywane <SMALL>INNER</SMALL> joins.</P>
|
|||
|
|
|||
|
<P>W poprzednich wersjach "outer joins" mog<6F> by<62> zasymulowane poprzez
|
|||
|
u<>ycie slowa kluczowego
|
|||
|
<SMALL>UNION</SMALL> i <SMALL>NOT IN</SMALL>. Dla przyk<79>adu, <20><>cz<63>c
|
|||
|
tabele <I>tab1</I> i <I>tab2</I>, nast<73>puj<75>ce zapytanie wykonuje
|
|||
|
<I>outer</I> join:<BR>
|
|||
|
<BR>
|
|||
|
</P>
|
|||
|
<PRE>
|
|||
|
SELECT tab1.col1, tab2.col2
|
|||
|
FROM tab1, tab2
|
|||
|
WHERE tab1.col1 = tab2.col1
|
|||
|
UNION ALL
|
|||
|
SELECT tab1.col1, NULL
|
|||
|
FROM tab1
|
|||
|
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
|
|||
|
ORDER BY col1
|
|||
|
</PRE>
|
|||
|
|
|||
|
<H4><A name="4.24">4.24</A>) Jak wykonywa<77> zapytanie u<>ywaj<61>ce kilku
|
|||
|
baz danych jednocze<7A>nie?</H4>
|
|||
|
|
|||
|
<P>Nie ma takiej mo<6D>liwo<77>ci aby w zapytaniu odpytawa<77> inn<6E> baze danych
|
|||
|
poza bie<69><65>c<EFBFBD>. Poniewa<77> PostgreSQL <20>aduje specyficzne dla bazy danych
|
|||
|
katalogi systemowe, nie jest do ko<6B>ca jasne jak zapytanie pomi<6D>dzy
|
|||
|
r<><72>nymi bazami danych powinno si<73> zachowywa<77>.</P>
|
|||
|
|
|||
|
<P>Oczywi<EFBFBD>cie klient mo<6D>e <20><>czy<7A> si<73> z r<><72>nymi bazami danych i <20><>czy<7A>
|
|||
|
informacj<63> w ten spos<6F>b uzyskan<61>.</P>
|
|||
|
|
|||
|
<H4><A name="4.25">4.25</A>) Jak zwr<77>ci<63> w funkcji wiele rz<72>d<EFBFBD>w lub
|
|||
|
kolumn?</H4>
|
|||
|
|
|||
|
<P>Mo<EFBFBD>esz zwraca<63> zbiory z funkcji PL/pgSQL u<>ywaj<61>c
|
|||
|
<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<63> 23.7.3.3.</P>
|
|||
|
|
|||
|
|
|||
|
<H2 align="center">Rozwijanie PostgreSQL</H2>
|
|||
|
|
|||
|
<H4><A name="5.1">5.1</A>) Napisa<73>em w<>asn<73> funkcj<63>. Kiedy u<>yj<79> jej
|
|||
|
w <I>psql</I>, program zrzuca pami<6D><69> (dump core)?</H4>
|
|||
|
|
|||
|
<P>Problem mo<6D>e by<62> spowodowany przez bardzo wiele rzeczy. Spr<70>buj
|
|||
|
najpierw przetestowa<77> Twoj<6F> funkcj<63> w samodzielnie dzia<69>aj<61>cym programie.
|
|||
|
</P>
|
|||
|
|
|||
|
<H4><A name="5.2">5.2</A>) Jak mog<6F> doda<64>/zg<7A>osi<73> nowe typy czy
|
|||
|
funkcje do PostgreSQL?</H4>
|
|||
|
|
|||
|
<P>Wy<EFBFBD>lij Twoje propozycje na list<73> mailow<6F> <I>pgsql-hackers</I>,
|
|||
|
wtedy prawdopodobnie Tw<54>j kod znajdzie si<73> w katalogu <I>contrib/</I>.</P>
|
|||
|
|
|||
|
<H4><A name="5.3">5.3</A>) Jak napisa<73> funkcj<63> C zwracaj<61>c<EFBFBD> krotk<74>
|
|||
|
(tuple)?</H4>
|
|||
|
|
|||
|
<P>To wymaga wysi<73>ku tak olbrzymiego, <20>e nawet autorzy nigdy tego nie
|
|||
|
prubowali, chocia<69> z zalo<6C>e<EFBFBD> wynika, <20>e jest to mo<6D>liwe.</P>
|
|||
|
|
|||
|
<H4><A name="5.4">5.4</A>) Zmieni<6E>em plik <20>r<EFBFBD>d<EFBFBD>owy. Dlaczego po
|
|||
|
rekompilacji nie wida<64> zmiany?</H4>
|
|||
|
|
|||
|
<P>Pliki <I>Makefiles</I> nie maj<61> dorzuconych odpowiednich
|
|||
|
zale<6C>no<6E>ci dla plik<69>w nag<61><67>wkowych (include files). Wykonaj najpierw
|
|||
|
<I>make clean</I>, a nast<73>pnie ponownie <I>make</I>.
|
|||
|
Je<4A>li u<>ywasz <SMALL>GCC</SMALL> mo<6D>esz u<>y<EFBFBD> opcji
|
|||
|
<I>--enable-depend</I> przy wykonywaniu <I>configure</I> aby
|
|||
|
</BODY>
|
|||
|
</HTML>
|
|||
|
|