|
|
|
@ -15,7 +15,9 @@ |
|
|
|
|
|
|
|
|
|
<H1>Frequently Asked Questions (FAQ) o PostgreSQL</H1> |
|
|
|
|
|
|
|
|
|
<P>Ostatnia aktualizacja: Thu Apr 18 00:44:51 EDT 2002</P> |
|
|
|
|
<P>Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004</P> |
|
|
|
|
|
|
|
|
|
<P>Ostatnia aktualizacja tłumaczenia: Piątek Marzec 5 19:31:12 EST 2004</P> |
|
|
|
|
|
|
|
|
|
<P>Obecny maintainer: Bruce Momjian (<A href= |
|
|
|
|
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> |
|
|
|
@ -24,16 +26,15 @@ |
|
|
|
|
"mailto:m.mazurek@netsync.pl">m.mazurek@netsync.pl</A>)<BR> |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<P>Najbardziej aktualną wersję tego dokumentu można znaleźć pod |
|
|
|
|
adresem: |
|
|
|
|
<A href= |
|
|
|
|
"http://www.Postgresql.org/docs/faq-english.html">http://www.PostgreSQL.org/docs/faq-english.html</A>.</P> |
|
|
|
|
"http://www.Postgresql.org/docs/faqs/FAQ.html">http://www.PostgreSQL.org/docs/faqs/FAQ.html</A>.</P> |
|
|
|
|
|
|
|
|
|
<P>Odpowiedzi na pytania dotyczące konkretnych systemów operacyjnych |
|
|
|
|
można znaleźć pod adresem: |
|
|
|
|
<A href= |
|
|
|
|
"http://www.PostgreSQL.org/users-lounge/docs/faq.html">http://www.PostgreSQL.org/users-lounge/docs/faq.html</A>.</P> |
|
|
|
|
"http://www.PostgreSQL.org/docs/index.html">http://www.PostgreSQL.org/docs/index.html</A>.</P> |
|
|
|
|
<HR> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Pytania ogólne</H2> |
|
|
|
@ -64,20 +65,19 @@ |
|
|
|
|
PostgreSQL?<BR> |
|
|
|
|
<A href="#2.2">2.2</A>) Jakie istnieją narzędzia pozwalające na dostęp do |
|
|
|
|
PostgreSQL przez www?<BR> |
|
|
|
|
<A href="#2.3">2.3</A>) Czy istnieje jakieś GUI dla PostgreSQL? |
|
|
|
|
Narzędzie do raportowania? Interfejs dla "embedded query language"?<BR> |
|
|
|
|
<A href="#2.3">2.3</A>) Czy istnieje jakieś GUI dla PostgreSQL?<BR> |
|
|
|
|
<A href="#2.4">2.4</A>) Za pomocą jakich języków programowania można |
|
|
|
|
się komunikować z PostgreSQL?<BR> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<H2 align="center">Pytania administratora</H2> |
|
|
|
|
<H2 align="center">Pytania dotyczące administracji</H2> |
|
|
|
|
<A href="#3.1">3.1</A>) Jak mogę zainstalować PostgreSQL w innej |
|
|
|
|
lokalizacji niż <I>/usr/local/pgsql</I>?<BR> |
|
|
|
|
<A href="#3.2">3.2</A>) Podczas startu <I>postmaster'a</I>, |
|
|
|
|
otrzymuję komunikat: |
|
|
|
|
<I>Bad System Call</I> lub "core dumped". Dlaczego?<BR> |
|
|
|
|
<A href="#3.3">3.3</A>) Podczas startu <I>postmaster'a</I>, |
|
|
|
|
otrzymuję komunikato błędzie: <I>IpcMemoryCreate</I>. Dlaczego?<BR> |
|
|
|
|
otrzymuję komunikat o błędzie: <I>IpcMemoryCreate</I>. Dlaczego?<BR> |
|
|
|
|
<A href="#3.4">3.4</A>) Podczas startu <I>postmaster'a</I>, |
|
|
|
|
otrzymuję komunikat o błędzie: <I>IpcSemaphoreCreate</I>. Dlaczego?<BR> |
|
|
|
|
<A href="#3.5">3.5</A>) W jaki sposób mogę kontrolować połączenia z |
|
|
|
@ -87,9 +87,9 @@ |
|
|
|
|
<A href="#3.7">3.7</A>) Jakie są możliwości wyszukiwania błędów?<BR> |
|
|
|
|
<A href="#3.8">3.8</A>) Skąd się bierze komunikat: <I>"Sorry, too many |
|
|
|
|
clients"</I> podczas próby połączenia się z bazą danych?<BR> |
|
|
|
|
<A href="#3.9">3.9</A>) Co to za pliki typu <I>pg_sorttempNNN.NN</I> |
|
|
|
|
, które znajdują się w katalogu z plikami bazy danych?<BR> |
|
|
|
|
|
|
|
|
|
<A href="#3.9">3.9</A>) Jakie pliki znajdują się w <I>pg_temp</I>?<BR> |
|
|
|
|
<A href="#3.10">3.10</A>) Dlaczego konieczne jest przy upgradzie |
|
|
|
|
PostgreSQL korzystanie ze skryptów dump i restore?<BR> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Pytania dotyczące użytkowania</H2> |
|
|
|
|
<A href="#4.1">4.1</A>) Jaka jest różnica pomiędzy kursorami |
|
|
|
@ -98,7 +98,8 @@ |
|
|
|
|
jedynie kilka pierwszych wyników zapytania?<BR> |
|
|
|
|
<A href="#4.3">4.3</A>) Jak mogę uzyskać listę wszystkich tabel czy |
|
|
|
|
innych rzeczy pod <I>psql</I>?<BR> |
|
|
|
|
<A href="#4.4">4.4</A>) Jak usunąć kolumnę z tabeli?<BR> |
|
|
|
|
<A href="#4.4">4.4</A>) Jak usunąć kolumnę z tabeli lub zmienić jej |
|
|
|
|
typ?<BR> |
|
|
|
|
<A href="#4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rzędu, |
|
|
|
|
tabeli i bazy danych?<BR> |
|
|
|
|
<A href="#4.6">4.6</A>) Jak dużo miejsca w bazie danych jest |
|
|
|
@ -148,8 +149,13 @@ |
|
|
|
|
baz danych jednocześnie?<BR> |
|
|
|
|
<A href="#4.25">4.25</A>) Jak zwrócić w funkcji wiele rzędów lub |
|
|
|
|
kolumn?<BR> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<A href="#4.26">4.26</A>) Dlaczego nie mogę w sposób pewny |
|
|
|
|
tworzyć/usuwać tabel tymczasowych w funkcjach PL/PgSQL?<BR> |
|
|
|
|
<A href="#4.27">4.27</A>) Jakie są możliwości replikacji w |
|
|
|
|
PostgreSQL?<BR> |
|
|
|
|
<A href="#4.28">4.28</A>) Jakie możliwości szyfrowania oferuje |
|
|
|
|
PostgreSQL?<BR> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Rozwijanie PostgreSQL</H2> |
|
|
|
|
<A href="#5.1">5.1</A>) Napisałem własną funkcję. Kiedy użyję jej w |
|
|
|
|
<I>psql</I>, program zrzuca pamięć (dump core)?<BR> |
|
|
|
@ -166,7 +172,8 @@ |
|
|
|
|
|
|
|
|
|
<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 wymawia się <I>Post-Gres-kju-el</I>. Często podczas |
|
|
|
|
rozmów używany jest termin "Postgres"</P> |
|
|
|
|
|
|
|
|
|
<P>PostgreSQL jest rozszerzeniem systemu zarządzania bazami danych - |
|
|
|
|
POSTGRES, kolejną generacją rozwojowego prototypu <SMALL>DBMS</SMALL>. |
|
|
|
@ -181,11 +188,14 @@ |
|
|
|
|
komunikujących się poprzez mailowe listy dyskusyjne PostgreSQL. |
|
|
|
|
Obecnym koordynatorem jest Marc G. Fournier (<A href= |
|
|
|
|
"mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A>). (Zobacz |
|
|
|
|
poniżej jak się przyłączyć). Ta grupa ludzi jest odpowiedzialna za |
|
|
|
|
cały rozwój PostgreSQL.</P> |
|
|
|
|
pytanie <A href="#1.6">1.6</A> jak się przyłączyć). Ta grupa ludzi jest |
|
|
|
|
odpowiedzialna za cały rozwój PostgreSQL. PostgreSQL jest projektem |
|
|
|
|
nie kontrolowanym przez żadną firmę, aby wziąć udział w jego rozwoju |
|
|
|
|
sprawdź, <A href="http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html"> |
|
|
|
|
http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html</a></P> |
|
|
|
|
|
|
|
|
|
<P>Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. |
|
|
|
|
Wiele innych osób pomogło przy portowaniu, testowaniu, debugowaniu, i |
|
|
|
|
Wiele innych osób pomogło przy portowaniu, testowaniu, debugowaniu i |
|
|
|
|
rozwijaniu kodu. Oryginalny kod Postgresa, na którym został oparty |
|
|
|
|
PostgreSQL, był wysiłkiem studentów oraz pracowników pracujących pod |
|
|
|
|
kierownictwem profesora Michael'a Stonebraker'a z University of |
|
|
|
@ -243,11 +253,11 @@ |
|
|
|
|
|
|
|
|
|
<P><STRONG>Klient</STRONG></P> |
|
|
|
|
|
|
|
|
|
<P>Możliwa jest kompilacja bibliteki C <I>libpq</I> C, psql oraz |
|
|
|
|
<P>Możliwa jest kompilacja bibliteki C <I>libpq</I>, psql oraz |
|
|
|
|
innych interfejsów i uruchamianie ich na platformie MS Windows. W tym |
|
|
|
|
wypadku klient jest uruchamiany na MS Windows a z serwerem komunikuje się |
|
|
|
|
poprzez TCP/IP. Serwer może działać na dowolnej wspieranej platformie |
|
|
|
|
Unixowej. Plik <I>win31.mak</I> jest dołączony |
|
|
|
|
Unixowej. Plik <I>win32.mak</I> jest dołączony |
|
|
|
|
do źródeł, aby można było stworzyć bibliotekę <I>libpq</I> oraz |
|
|
|
|
program <I>psql</I> działające w środowisku Win32. PostgreSQL może się |
|
|
|
|
także komunikować z klientami <SMALL>ODBC</SMALL>.</P> |
|
|
|
@ -257,9 +267,18 @@ |
|
|
|
|
<P>Serwer może być uruchamiany na Windows NT i Win2k używając |
|
|
|
|
bibliotek Cygwin, Cygnus Unix/NT. W pliku <I>pgsql/doc/FAQ_MSWIN</I> |
|
|
|
|
znajdującym się w źródłach lub pod adresem: <A href= |
|
|
|
|
"http://www.postgresql.org/docs/faq-mswin.html">MS Windows FAQ</A> |
|
|
|
|
na naszych stronach. Nie planujemy tworzyć portu przeznaczonego |
|
|
|
|
docelowo dla platformy Microsoft.</P> |
|
|
|
|
"http://www.postgresql.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A> na naszych stronach.<P> |
|
|
|
|
Obecnie prowadzone są prace nad stworzeniem wersji dla MS Win |
|
|
|
|
NT/200/XP. Jeśli chcesz się dowiedzieć o obecnym statusie tych prac |
|
|
|
|
zobacz <A |
|
|
|
|
href="http://techdocs.postgresql.org/guides/Windows">http://techdocs.postgresql.org/guides/Windows</A> and |
|
|
|
|
<A |
|
|
|
|
href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">http://momjian.postgresql.org/main/writings/pgsql/win32.html</A>. |
|
|
|
|
</P> |
|
|
|
|
<P> |
|
|
|
|
Istnieje także port pod Novell Netware 6 dostępny pod adresem <A |
|
|
|
|
href="http://forge.novell.com">http://forge.novell.com</A>. |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.5">1.5</A>) Skąd można ściągnąć PostgreSQL?</H4> |
|
|
|
|
|
|
|
|
@ -324,14 +343,13 @@ |
|
|
|
|
'#PostgreSQL' "$USER" irc.phoenix.net.</CODE></P> |
|
|
|
|
|
|
|
|
|
<P>Lista firm oferujących 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> |
|
|
|
|
się pod adresem: <A href= "http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.7">1.7</A>) Jaka jest ostatnia dostępna wersja?</H4> |
|
|
|
|
|
|
|
|
|
<P>Ostatnia dostępna wersja PostgreSQL to 7.2.1.</P> |
|
|
|
|
<P>Ostatnia dostępna wersja PostgreSQL to 7.4.1.</P> |
|
|
|
|
|
|
|
|
|
<P>Planujemy publikowanie kolejnych wersji co cztery miesiące.</P> |
|
|
|
|
<P>Planujemy publikowanie kolejnych wersji co sześć do ośmiu miesięcy.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.8">1.8</A>) Jaka dokumentacja jest dostępna?</H4> |
|
|
|
|
|
|
|
|
@ -339,8 +357,8 @@ |
|
|
|
|
testowania są załączone w samej dystrybucji. Znajdują się one w |
|
|
|
|
katalogu <I>/doc</I>. Manual może być także przeglądany poprzez |
|
|
|
|
strony www pod adresem <A href= |
|
|
|
|
"http://www.PostgreSQL.org/users-lounge/docs/">http://www.PostgreSQL.org/users-lounge/docs/</A>.</P> |
|
|
|
|
|
|
|
|
|
"http://www.PostgreSQL.org/docs">http://www.PostgreSQL.org/docs</A>.</P> |
|
|
|
|
|
|
|
|
|
<P>Istnieją także dwie książki dostępne online pod adresami |
|
|
|
|
<A href= |
|
|
|
|
"http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> |
|
|
|
@ -348,14 +366,15 @@ |
|
|
|
|
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>. |
|
|
|
|
Lista książek o PostgreSQL, które można kupić znajduje się pod adresem |
|
|
|
|
<A href= |
|
|
|
|
"http://www.postgresql.org/books/">http://www.postgresql.org/books/</A>. |
|
|
|
|
"http://techdocs.PostgreSQL.org/techdocs/bookreviews.php"> |
|
|
|
|
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php</A>. |
|
|
|
|
Zbiór technicznych artykułów o PostgreSQL znajduje się pod adresem <A |
|
|
|
|
href= |
|
|
|
|
"http://techdocs.postgresql.org/">http://techdocs.postgresql.org/</A>.</P> |
|
|
|
|
"http://techdocs.PostgreSQL.org">http://techdocs.postgresql.org/</A>.</P> |
|
|
|
|
|
|
|
|
|
<P><I>psql</I> posiada kilka wbudowanych poleceń \d, za pomoca których |
|
|
|
|
można sprawdzić informacje dotyczące typów, operatorów, funkcji, |
|
|
|
|
aggregatów itd.</P> |
|
|
|
|
agregatów itd.</P> |
|
|
|
|
|
|
|
|
|
<P>Na naszej stronie można znaleźć dużo więcej dokumentacji.</P> |
|
|
|
|
|
|
|
|
@ -409,8 +428,8 @@ |
|
|
|
|
<P>Jest około 12 osób, które mają uprawnienia do commit'owania w |
|
|
|
|
<SMALL>CVS</SMALL> PostgreSQL'a. Każdy z nich submitował tak wiele |
|
|
|
|
wysokiej jakości patchy, że stało się niemożliwe dla obecnych |
|
|
|
|
commiterów być z nimi na bieżąco, mając pewność że są to poprawki |
|
|
|
|
wysokiej jakości.</P> |
|
|
|
|
commiterów być z nimi na bieżąco, więc musieliśmy im ufać i mieć |
|
|
|
|
pewność, że ich poprawki są wysokiej jakości.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="1.13">1.13</A>) Jak mogę zgłaszać błędy?</H4> |
|
|
|
|
|
|
|
|
@ -437,52 +456,37 @@ |
|
|
|
|
oraz wyrafinowany system blokowania. Mamy także właściowści których |
|
|
|
|
inni nie posiadają, jak typy definiowane przez użytkownika, |
|
|
|
|
dziedziczenie, rules, multi-version concurrency control, która |
|
|
|
|
redukuje problemy z blokowaiem (lock contention).<BR> |
|
|
|
|
redukuje problemy z blokowaniem (lock contention).<BR> |
|
|
|
|
<BR> |
|
|
|
|
</DD> |
|
|
|
|
|
|
|
|
|
<DT><B>Wydajność</B></DT> |
|
|
|
|
|
|
|
|
|
<DD>PostgreSQL działa w dwóch trybach. Standardowy tryb <I>fsync</I> |
|
|
|
|
zrzuca każdą zakończoną transakcję na dysk, gwarantując w ten |
|
|
|
|
sposób to, że jeśli system operacyjny się zawiesi lub straci |
|
|
|
|
zasilanie wciągu kilku nastepnych sekund, wszystkie Twoje dane |
|
|
|
|
zostaną bezpiecznie zapisane na dysku. W tym trybie, jesteśmy |
|
|
|
|
wolniejsi niż większość komercyjnych baz danych, częściowo dlatego |
|
|
|
|
że niewiele z nich wykonuje taki sposób zapisywania danych jako |
|
|
|
|
domyślne ustawienie. |
|
|
|
|
W trybie <I>no-fsync</I> z reguły jesteśmy szybsi niż komercyjne |
|
|
|
|
bazy danych, chociaż w tym wypadku zawieszenie się systemu może |
|
|
|
|
spowodować uszkodzenie danych. Pracujemy nad tym, aby stworzyć |
|
|
|
|
pośredni tryb, który powoduje mniejszą redukcję wydajności niż tryb |
|
|
|
|
fsync i pozwoli na integralność danych w przeciągu 30 sekund do |
|
|
|
|
załamania się systemu operacyjnego.<BR> |
|
|
|
|
<BR> |
|
|
|
|
Porównując do MySQL czy innych prostych baz danych, jesteśmy |
|
|
|
|
wolniejsi przy wykonywaniu insertów/updatów przez narzut |
|
|
|
|
spowodowany przez transakcje. Oczywiście MySQL nie posiada żadnej z |
|
|
|
|
wymienionych wyżej <I>możliwości</I>. PostgreSQL został zbudowany |
|
|
|
|
aby być DBMS elastycznym i bogatym z różnorakie możliwości, |
|
|
|
|
aczkolwiek dbamy, aby poprawiać jego wydajność poprzez analizę |
|
|
|
|
kodu źródłowego i profilowanie. Ciekawe porównanie PostgreSQL i MySQL |
|
|
|
|
można znaleźć pod adresem <A href= |
|
|
|
|
"http://openacs.org/why-not-mysql.html">http://openacs.org/why-not-mysql.html</A><BR> |
|
|
|
|
|
|
|
|
|
<BR> |
|
|
|
|
Każde połączenie klienta jest obsługiwane przez nas poprzez |
|
|
|
|
stworzenie nowego procesu Unixowego. Procesy backendu dzielą |
|
|
|
|
bufory danych oraz informację o blokadach. Używając wielu |
|
|
|
|
procesorów, różne backendy mogą bez problemu działać na różnych |
|
|
|
|
procesorach.<BR> |
|
|
|
|
<DD>Wydajność PostgreSQL jest podobna do innych komercyjnych i open |
|
|
|
|
source baz danych. W niektórych sytuacjach jest szybszy w |
|
|
|
|
niektórych wolniejszy. W porównianiu do MySQL lub mniejszych baz |
|
|
|
|
danych jesteśmy szybsi przy wielu użytkownikach, skomplikowaych |
|
|
|
|
zapytaniach i dużym obciążeniu podczas. MySQL jest szybszy dla |
|
|
|
|
prostych SELECTów wykonywanych przez niewielu użytkowników. |
|
|
|
|
Spowodowane jest to narzutem, który się pojawia przy transakcjach. |
|
|
|
|
Oczywiście MySQL nie ma większości z rozwiązań opisanych powyżej |
|
|
|
|
w sekcji <I> Możliwości </I>. PostgreSQL został stworzony z myślą o |
|
|
|
|
stabilności, oraz szerokiej gamie możliwości, ale mimo to staramy |
|
|
|
|
się w każdej wersji poprawiać jego wydajność. |
|
|
|
|
Ciekawe porównanie PostgreSQL i MySQL można znaleźć pod adresem <A href= |
|
|
|
|
"http://openacs.org/philosophy/why-not-mysql.html">http://openacs.org/philosophy/why-not-mysql.html</A> |
|
|
|
|
Dodatkowo, MySQL jest firmą, która dystrybuuje jej produkty poprzez |
|
|
|
|
zasadę Open Source i wymaga wykupienia licencji w przypadku |
|
|
|
|
tworzenia close-source software, co ie ma miejsca w przypadku |
|
|
|
|
PostgreSQL.<BR> |
|
|
|
|
<BR> |
|
|
|
|
</DD> |
|
|
|
|
|
|
|
|
|
<DT><B>Stabilność</B></DT> |
|
|
|
|
|
|
|
|
|
<DD>Zdajemy sobie sprawę, że <SMALL>DBMS</SMALL> musi być stabilny, |
|
|
|
|
w przeciwnym wypadku jest bez wartości. Staramy się publikować kod |
|
|
|
|
stabilny, dobrze przetestowany, z minimum możliwych błędów. Każde |
|
|
|
|
wydanie poprzedza conajmniej miesiąc testów wersji beta. Patrząc na |
|
|
|
|
wydanie poprzedza co najmniej miesiąc testów wersji beta. Patrząc na |
|
|
|
|
historię wydań PostgreSQL widać, że dostarczamy stabilne, dobrze |
|
|
|
|
sprawdzone wersje, które są gotowe do użycia w środowisku |
|
|
|
|
produkcyjnym. Myślimy, że proces publikowania kolejnych wersji |
|
|
|
@ -521,20 +525,20 @@ |
|
|
|
|
PostgreSQL?</H4> |
|
|
|
|
|
|
|
|
|
<P>PostgreSQL korzysta z najlepszej infrastruktury od samego początku |
|
|
|
|
istnienia projektu, tzn. sześciu lat. Wszystko to zawdzięczamy Marc'owi |
|
|
|
|
Fournier'owi, który stworzył tą infrastrukturę i zarządza nią od |
|
|
|
|
lat.</P> |
|
|
|
|
istnienia projektu, czyli roku 1996 kiedy rozpoczeliśmy pracę. Wszystko |
|
|
|
|
to zawdzięczamy Marc'owi Fournier'owi, który stworzył tą infrastrukturę |
|
|
|
|
i zarządza nią od lat.</P> |
|
|
|
|
|
|
|
|
|
<P>Wysokiej jakości infrastruktura jest bardzo ważna dla każdego |
|
|
|
|
projektu open-source. Zapobiega przerwom w rozwoju projektu i |
|
|
|
|
jakimkolwiek przestojom.</P> |
|
|
|
|
|
|
|
|
|
<P>Oczywiście korzystanie z wysokiej jakości infrastruktury nie jest |
|
|
|
|
tanie. Istnieje wiele róznych miesięcznych, czy jednorazowych |
|
|
|
|
tanie. Istnieje wiele różnych miesięcznych, czy jednorazowych |
|
|
|
|
wydatków, które trzeba ponosić aby wszystko działało jak należy. |
|
|
|
|
Jeśli Ty, bądź Twoja firma może wspomóc finansowo rozwój PostgreSQL |
|
|
|
|
odwiedź adres: <A href= |
|
|
|
|
"http://www.pgsql.com/pg_goodies">http://www.pgsql.com/pg_goodies</A> |
|
|
|
|
"http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A> |
|
|
|
|
gdzie opisane jest jak to zrobić.</P> |
|
|
|
|
|
|
|
|
|
<P>Chociaż na stronie wspomniana jest nazwa PostgreSQL Inc, "datki" |
|
|
|
@ -542,6 +546,9 @@ |
|
|
|
|
przeznaczane na finansowanie jakiejkolwiek firmy. Jeśli wolisz, |
|
|
|
|
możesz wysłać czek na adres kontaktowy.</P> |
|
|
|
|
<HR> |
|
|
|
|
Jeśli możesz się pochwalić udanymi wdrożeniami PostgreSQL, prosimy |
|
|
|
|
abyś zgłosił nam to na stronie: <A |
|
|
|
|
href="http://advocacy.postgresql.org/">http://advocacy.postgresql.org</a>. |
|
|
|
|
|
|
|
|
|
<H2 align="center">User Client Questions</H2> |
|
|
|
|
|
|
|
|
@ -551,25 +558,21 @@ |
|
|
|
|
<P>Dostępne są dwa driwery <SMALL>ODBC</SMALL>: PsqlODBC |
|
|
|
|
i OpenLink <SMALL>ODBC</SMALL>.</P> |
|
|
|
|
|
|
|
|
|
<P>PsqlODBC jest dołączony do źródeł. Więcej informacji na jego temat |
|
|
|
|
możesz znaleźć pod adresem: <A href= |
|
|
|
|
"ftp://ftp.PostgreSQL.org/pub/odbc/">ftp://ftp.PostgreSQL.org/pub/odbc/</A>.</P> |
|
|
|
|
|
|
|
|
|
<P>Możesz pobrać PsqlODBC z adresu <A |
|
|
|
|
href="http://gborg.postgresql.org/project/psqlodbc/projdisplay.php">http://gborg.postgresql.org/project/psqlodbc/projdisplay.php</A> |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<P>OpenLink <SMALL>ODBC</SMALL> może być pobrany z adresu: <A href= |
|
|
|
|
"http://www.openlinksw.com/">http://www.openlinksw.com</A>. |
|
|
|
|
Współpracuje ze standardowym oprogramowaniem klienckim <SMALL>ODBC</SMALL> |
|
|
|
|
więc w ten sposób możesz korzystać z PostgreSQL <SMALL>ODBC</SMALL> |
|
|
|
|
dostępnego na każdej plaformie którą wspiera (Win, Mac, Unix, VMS).</P> |
|
|
|
|
dostępnego na każdej pltaformie którą wspiera (Win, Mac, Unix, VMS).</P> |
|
|
|
|
|
|
|
|
|
<P>Autorzy będą prawdopodobnie sprzedawać ten produkt osobom które |
|
|
|
|
wymagają komercyjnego wsparcia, ale wersja darmowa będzie zawsze |
|
|
|
|
dostępna. Wszystkie pytania możesz wysyłać na adres: <A href= |
|
|
|
|
"mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>.</P> |
|
|
|
|
|
|
|
|
|
<P>Sprawdź także 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ą narzędzia pozwalające na dostęp do |
|
|
|
|
PostgreSQL przez www?</H4> |
|
|
|
|
|
|
|
|
@ -577,59 +580,56 @@ |
|
|
|
|
przez www możesz 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 rozwiązaniem jest PHP. Możesz |
|
|
|
|
znaleźć więcej informacji na ten temat pod adresem |
|
|
|
|
<A href="http://www.php.net">http://www.php.net</A>.</P> |
|
|
|
|
|
|
|
|
|
<P>Wiele osób w przypadku skomplikowanych rozwiązań uzywa Perl'a i |
|
|
|
|
modułu CGI.pl.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="2.3">2.3</A>) Czy istnieje jakieś GUI dla PostgreSQL? |
|
|
|
|
Narzędzie do raportowania? Interfejs dla "embedded query |
|
|
|
|
language"?</H4> |
|
|
|
|
|
|
|
|
|
<P>Mamy całkiem miły interfejs graficzny, który został nazwany |
|
|
|
|
<I>pgaccess</I> i jest on dostarczany jako część źródeł. |
|
|
|
|
<I>pgaccess</I> posiada także generator raportów. Można go znaleźć |
|
|
|
|
pod adresem <A href= |
|
|
|
|
"http://www.flex.ro/pgaccess">http://www.flex.ro/pgaccess</A></P> |
|
|
|
|
|
|
|
|
|
<P>Udostępniliśmy także <I>ecpg</I>, który jest "embedded SQL query |
|
|
|
|
language interface" dla języka C.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="2.4">2.4</A>) Za pomocą jakich języków programowania |
|
|
|
|
modułu CGI.pl lub mod_perl.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="2.3">2.3</A>) Czy istnieje jakieś GUI dla PostgreSQL?</H4> |
|
|
|
|
|
|
|
|
|
<P>Tak, istnieje kilka interfejsów graficznych dla PostgreSQL. |
|
|
|
|
Wśród nich PgAccess (<A href="http://www.pgaccess.org"> |
|
|
|
|
http://www.pgaccess.org</A>), PgAdmin III (<A |
|
|
|
|
href="http://www.pgadmin.org">http://www.pgadmin.org</A>), |
|
|
|
|
RHDB Admin (http://sources.redhat.com/rhdb/ ) oraz Rekall ( |
|
|
|
|
http://www.thekompany.com/products/rekall/, komercyjny). Istnieje |
|
|
|
|
także PHPPgAdmin ( http://phppgadmin.sourceforge.net/ ), webowy |
|
|
|
|
interfejs dla PostgreSQL. |
|
|
|
|
</P> |
|
|
|
|
<P> |
|
|
|
|
Więcej informacji na ten temat znajduje się pod adresem See |
|
|
|
|
<A href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>. |
|
|
|
|
|
|
|
|
|
<H4><A name="2.4">2.4</A>) Za pomocą jakich języków programowania |
|
|
|
|
można się komunikować z PostgreSQL?</H4> |
|
|
|
|
|
|
|
|
|
<P>Mamy wsparcie dla:</P> |
|
|
|
|
<P>Najbardziej popularne języki posiiadają własny interfejs dla |
|
|
|
|
PostgreSQL. Sprawdź listę rozszerzeń dla intersującego Ciebie języka |
|
|
|
|
programowania.</P> |
|
|
|
|
|
|
|
|
|
<P>Ze źródłami PostreSQL dystrubuowane są interfejsy dla |
|
|
|
|
następujących języków programowania:</P> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<UL> |
|
|
|
|
<LI>C (libpq)</LI> |
|
|
|
|
|
|
|
|
|
<LI>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> |
|
|
|
|
Inne interfejsy są dostępne pod adresem: |
|
|
|
|
<A href="http://gborg.postgresql.org"> http://gborg.postgresql.org</A> w |
|
|
|
|
sekcji Drivers/Interfaces. |
|
|
|
|
<HR> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Pytania administratora</H2> |
|
|
|
|
<H2 align="center">Pytania dotyczące administracji</H2> |
|
|
|
|
|
|
|
|
|
<H4><A name="3.1">3.1</A>) Jak mogę zainstalować PostgreSQL w innej |
|
|
|
|
lokalizacji niż <I>/usr/local/pgsql</I>?</H4> |
|
|
|
@ -677,7 +677,8 @@ |
|
|
|
|
<SMALL>SEMMNS</SMALL> i <SMALL>SEMMNI</SMALL> jądra twojego systemu.</P> |
|
|
|
|
|
|
|
|
|
<P>Niedziałające semafory mogą spowodować niepoprawne zamknięcie |
|
|
|
|
systemu w czasie intensywnego korzystania z bazy.</P> |
|
|
|
|
systemu w czasie intensywnego korzystania z bazy.</P> |
|
|
|
|
|
|
|
|
|
<P>Jeśli treść błędu jest inna, może to oznaczać, że obsługa semaforów |
|
|
|
|
nie została włączona do jądra wcale. Zobacz PostgreSQL |
|
|
|
|
Administrator's Guide po bardziej szczegółowe informacje o pamięci |
|
|
|
@ -692,8 +693,7 @@ |
|
|
|
|
<I>postmaster'a</I>, |
|
|
|
|
<B>oraz</B> nie umożliwi się autoryzacji na podstawie adresu hostów |
|
|
|
|
modyfikując odpowiednio plik |
|
|
|
|
<I>$PGDATA/pg_hba.conf</I>. To zmiany pozwolą na |
|
|
|
|
połączenia TCP/IP.</P> |
|
|
|
|
<I>$PGDATA/pg_hba.conf</I>. To zmiany pozwolą na połączenia TCP/IP.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="3.6">3.6</A>) Jak powinienem skonfigurować system baz |
|
|
|
|
danych aby uzyskać lepszą wydajność?</H4> |
|
|
|
@ -709,7 +709,7 @@ |
|
|
|
|
określającym transakcję - <SMALL>BEGIN WORK/COMMIT</SMALL>, są |
|
|
|
|
traktowane jako pojedyncza transakcja. Rozważ wykonanie kilku |
|
|
|
|
poleceń/zdań SQL w jednym bloku transakcji. To redukuje narzut |
|
|
|
|
powodowany przez transakcję. Przy dużych zmianach w danych, warto |
|
|
|
|
nakładany przez transakcję. Przy dużych zmianach w danych, warto |
|
|
|
|
usunąć i stworzyć na nowo indeksy.</P> |
|
|
|
|
|
|
|
|
|
<P>Jest kilka opcji pozwalających na poprawienie wydajności. |
|
|
|
@ -825,19 +825,12 @@ |
|
|
|
|
maksymalną liczbę procesów backendu to obawa o wyczerpanie zasobów |
|
|
|
|
systemu.</P> |
|
|
|
|
|
|
|
|
|
<P>W wersjach PostgreSQL wcześniejszych niż 6.5, maksymalna liczba |
|
|
|
|
backendów była ustawiona na 64, a zmiana tej wartości wymaga |
|
|
|
|
rekompliacji po zmianie stałej MaxBackendId w pliku |
|
|
|
|
<I>include/storage/sinvaladt.h</I>.</P> |
|
|
|
|
<H4><A name="3.9">3.9</A>) Jakie pliki znajdują się w <I>pg_temp</I>?</H4> |
|
|
|
|
|
|
|
|
|
<H4><A name="3.9">3.9</A>) Co to są za pliki typu: |
|
|
|
|
<I>pg_sorttempNNN.NN</I>, |
|
|
|
|
które znajdują się w katalogu z plikami bazy danych?</H4> |
|
|
|
|
|
|
|
|
|
<P>Są to tymczasowe pliki utworzone przez executor. Dla przykładu, |
|
|
|
|
jeśli jakaś operacja sortowania jest wymagana do wykonania |
|
|
|
|
<P>Katalog ten zawiera tymczasowe pliki utworzone przez executor. Dla |
|
|
|
|
przykładu, jeśli jakaś operacja sortowania jest wymagana do wykonania |
|
|
|
|
<SMALL>ORDER BY,</SMALL> a samo sortowanie wymaga więcej miejsca niż |
|
|
|
|
paratmetr backendu |
|
|
|
|
parametr backendu |
|
|
|
|
<I>-S</I> ustawił do wykorzystania, wtedy tymczasowe pliki są używane |
|
|
|
|
do przechowywania tych danych.</P> |
|
|
|
|
|
|
|
|
@ -846,6 +839,25 @@ |
|
|
|
|
poprawnie podczas operacji sortowania. Jeśli w danym momencie nie |
|
|
|
|
działają żadne procesy backendów mozesz spokojnie usunąć pliki |
|
|
|
|
pg_tempNNN.NN.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="3.9">3.9</A>) Dlaczego konieczne jest przy upgradzie |
|
|
|
|
PostgreSQL korzystanie ze skryptów dump i restore?</H4> |
|
|
|
|
<P> |
|
|
|
|
Twórcy PostgreSQL dokonują jedynie małych zmian pomiędzy małymi |
|
|
|
|
upgradami wersji, np z 7.2 do 7.2.1, wtedy upgrade nie wymaga |
|
|
|
|
korzystania z dump i restore. Przy większych zmianach, np. z wersji |
|
|
|
|
7.2 do 7.3, często zmianymają wpływ na format przechowywanych danych. |
|
|
|
|
Zmiany te są na tyle skomplikowane, że nie utrzymujemy zgodości z |
|
|
|
|
poprzednimi wersjami PostgreSQL. dump pozwala na wydostanie danych w |
|
|
|
|
takiej postaci, w której łatwe jest ich zaimportowanie do nowszych |
|
|
|
|
wersji bez kłopotu. |
|
|
|
|
</P> |
|
|
|
|
<P> |
|
|
|
|
W wydaniach gdzie zmiany nie dotyczą formatu danych na dysku, można |
|
|
|
|
wykorzystać skryptu pg_upgrade, do upgradu bez użycia dump/restore. |
|
|
|
|
Dokumentacja do danego wydania zawiera informację czy możliwe jest |
|
|
|
|
użycie pg_upgrade. |
|
|
|
|
</P> |
|
|
|
|
<HR> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Pytania dotyczące używania</H2> |
|
|
|
@ -870,6 +882,15 @@ |
|
|
|
|
<SMALL>ORDER BY</SMALL>, PostgreSQL może wykorzystać jedynie kilka |
|
|
|
|
pierwszych rzędów, być może będzie konieczność wykonania zapytania do |
|
|
|
|
momentu aż zostaną znalezione pożądane wyniki.</P> |
|
|
|
|
<P> |
|
|
|
|
Aby otrzymać losowy rząd, użyj: |
|
|
|
|
<PRE> |
|
|
|
|
SELECT col |
|
|
|
|
FROM tab |
|
|
|
|
ORDER BY random() |
|
|
|
|
LIMIT 1; |
|
|
|
|
</PRE> |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.3">4.3</A>) Jak mogę uzyskać listę wszystkich tabel |
|
|
|
|
czy innych rzeczy pod <I>psql</I>?</H4> |
|
|
|
@ -881,37 +902,53 @@ |
|
|
|
|
<I>-E</I> wtedy po wykonaniu polecenia z backslashem wyświetlane |
|
|
|
|
będzie zapytanie, które w rzeczywistości jest wykonywane.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.4">4.4</A>) Jak usunąć kolumnę z tabeli?</H4> |
|
|
|
|
|
|
|
|
|
<P>Nie mamy zaimplementowanego <SMALL>ALTER TABLE DROP |
|
|
|
|
COLUMN,</SMALL> ale możesz zrobić tak:</P> |
|
|
|
|
<H4><A name="4.4">4.4</A>) Jak usunąć kolumnę z tabeli lub zmienić |
|
|
|
|
jej typ?</H4> |
|
|
|
|
|
|
|
|
|
<P>DROP COLUMNT zostało dodane w wersji 7.3 przy poleceniu ALTER |
|
|
|
|
TABLE DROP COLUMN. We wcześńiejszych wersjach możesz zrobić tak: |
|
|
|
|
</P> |
|
|
|
|
<PRE> |
|
|
|
|
SELECT ... -- wybierz zawartość wszystkich kolumn poza tą jedną której chcesz się pozbyć |
|
|
|
|
BEGIN; |
|
|
|
|
LOCAL TABLE old_table; |
|
|
|
|
SELECT ... -- wybierz wszystkie kolumny poza tą jedną której chcesz się pozbyć |
|
|
|
|
INTO TABLE new_table |
|
|
|
|
FROM old_table; |
|
|
|
|
DROP TABLE old_table; |
|
|
|
|
ALTER TABLE new_table RENAME TO old_table; |
|
|
|
|
</PRE> |
|
|
|
|
<P> |
|
|
|
|
Aby zmienić typ danych kolumny możesz zrobić tak: |
|
|
|
|
</P> |
|
|
|
|
<PRE> |
|
|
|
|
BEGIN; |
|
|
|
|
ALTER TABLE tab ADD COLUMN new_col new_data_type; |
|
|
|
|
UPDATE tab SET new_col = CAST(old_col AS new_data_type); |
|
|
|
|
ALTER TABLE tab DROP COLUMN old_col; |
|
|
|
|
COMMIT; |
|
|
|
|
</PRE> |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rzędu, |
|
|
|
|
tabeli i bazy danych?</H4> |
|
|
|
|
|
|
|
|
|
<P>Oto wszystkie ograniczenia:</P> |
|
|
|
|
<PRE> |
|
|
|
|
Maksymalny rozmiar dla bazdy danych? nieograniczony ( istnieją bazy danych o wielkości 500 GB databases ) |
|
|
|
|
Maksymalny rozmiar dla tabeli? 16 TB |
|
|
|
|
Maksymalny rozmiar dla rzędu? nieograniczony w 7.1 i późniejszych |
|
|
|
|
Maksymalny rozmiar pola? 1 GB w 7.1 and later |
|
|
|
|
Maksymalny rozmiar dla bazdy danych? nieograniczony ( istnieją |
|
|
|
|
bazy danych o wielkości 32 TB databases ) |
|
|
|
|
Maksymalny rozmiar dla tabeli? 32 TB |
|
|
|
|
Maksymalny rozmiar dla rzędu? 1.6 TB |
|
|
|
|
Maksymalny rozmiar pola? 1 GB |
|
|
|
|
Maksymalna liczba rzędów w tabeli? nieograniczona |
|
|
|
|
Maksymalna liczba kolumn w tabeli? 250-1600 w zależoności od typów kolumn |
|
|
|
|
Makasymalna liczba indeksów na tabeli? nieograniczona |
|
|
|
|
Maksymalna liczba kolumn w tabeli? 250-1600 w zależoności od typów kolumn |
|
|
|
|
Makasymalna liczba indeksów na tabeli? nieograniczona |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
Oczywiście "nieograniczony" nie jest prawdą tak do końca, istnieją |
|
|
|
|
ograniczenia wynikające z dostępnego miejsca na dysku, pamięci/swapa. |
|
|
|
|
Kiedy wielkości te będą bardzo duże może odbić się to na wydajności. |
|
|
|
|
|
|
|
|
|
<P>Maksymalny rozmiar tabeli, czyli 16 TB nie wymaga od systemu |
|
|
|
|
<P>Maksymalny rozmiar tabeli, czyli 32 TB nie wymaga od systemu |
|
|
|
|
operacyjnego wsparcia dla dużych plików. Duże tabele są przechowywane |
|
|
|
|
jako pliki o rozmiarze 1 GB, więc ograniczenia co do wielkości plików |
|
|
|
|
narzucone przez system plików nie są istotne.</P> |
|
|
|
@ -957,6 +994,9 @@ |
|
|
|
|
<P>Indeksy nie powodują dużego narzutu na zajmowane miejsce, |
|
|
|
|
ale zawierają pewne dane, |
|
|
|
|
więc w pewnych przypadkach moga być całkiem duże.</P> |
|
|
|
|
<P> NULLe są przechowywane jako mapy bitowe, więc używają bardzo mało |
|
|
|
|
miejsca. |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.7">4.7</A>) Jak mogę sprawdzić jakie tabele, klucze, |
|
|
|
|
bazy danych i użytkownicy są utworzeni?</H4> |
|
|
|
@ -996,17 +1036,39 @@ |
|
|
|
|
następuje sortowanie jest zazwyczaj szybsze nię wyszukiwanie za |
|
|
|
|
pomocą indeksu na dużej tabeli.</P> |
|
|
|
|
Jakkolwiek <SMALL>LIMIT</SMALL> w połączeniu z <SMALL>ORDER BY</SMALL> |
|
|
|
|
często będzie wykorzystywał indeksów poniewąz jedynie mała częśc z |
|
|
|
|
tabeli jest zwracana. |
|
|
|
|
często będzie wykorzystywał indeksy ponieważ jedynie mała część z |
|
|
|
|
tabeli jest zwracana. W rzeczywistości, chociaż MAX() i MIN() nie |
|
|
|
|
używają indeksów, możliwe jest aby zwrócić te wartości używając |
|
|
|
|
indeksów poprzez użycie ORDER BY i LIMIT. |
|
|
|
|
</P> |
|
|
|
|
<PRE> |
|
|
|
|
SELECT col |
|
|
|
|
FROM tab |
|
|
|
|
ORDER BY col [ DESC ] |
|
|
|
|
LIMIT 1; |
|
|
|
|
</PRE> |
|
|
|
|
<P> |
|
|
|
|
Jeśli uważasz, że optimizer myli się wybierając sequential scan, użyj |
|
|
|
|
SET enable_seqscan TO 'off' i uruchom testy aby sprawdzić czy wtym |
|
|
|
|
wypadku zapytanie będzie szybciej wykonywane. |
|
|
|
|
|
|
|
|
|
<P>Kiedy używa się operatorów dopasujących takich jak |
|
|
|
|
<SMALL>LIKE</SMALL> lub <I>~</I>, indeksy będą używane jedynie jeśli |
|
|
|
|
początek wyszukiwania jest oparty na początku łańcucha tekstu. |
|
|
|
|
Dlatego, aby używac indeksów, |
|
|
|
|
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> |
|
|
|
|
|
|
|
|
|
<SMALL>LIKE</SMALL> lub <I>~</I>, indeksy będą używane jedynie w |
|
|
|
|
pewnych wypadkach:</P> |
|
|
|
|
<UL> |
|
|
|
|
<LI>Początek wyszukiwania jest oparty na początku łańcucha tekstu. |
|
|
|
|
<UL> |
|
|
|
|
<LI>wzorce <SMALL>LIKE</SMALL> nie mogą się zaczynać <I>%</I> |
|
|
|
|
<LI>dopasowania operatorem <I>~</I> (dopasowania regularne) |
|
|
|
|
muszą się zaczynać znakiem specjalnym <I>^</I>.</P> |
|
|
|
|
</UL> |
|
|
|
|
<LI>Początek wyszukiwania nie może się zaczynać od klas znaków, np. |
|
|
|
|
[a-e]. |
|
|
|
|
<LI>Case-insensitive searches such as ILIKE and ~* do not utilise |
|
|
|
|
indexes. Instead, use functional indexes, which are described in |
|
|
|
|
section 4.12. |
|
|
|
|
<LI>Standardowe locale C musi być uzyte przy wykonywaniu initdb |
|
|
|
|
</UL> |
|
|
|
|
<H4><A name="4.9">4.9</A>) Jak mogę sprawdzić w jakis sposób "query |
|
|
|
|
optimizer" wykonuje moje zapytanie?</H4> |
|
|
|
|
|
|
|
|
@ -1051,15 +1113,14 @@ |
|
|
|
|
<H4><A name="4.12">4.12</A>) Jak mogę używać wyrażeń regularnych w |
|
|
|
|
zapytaniach i zapytań case-insensitive w wyrażeniach |
|
|
|
|
regularnych? |
|
|
|
|
jak korzystać z indeksów dla zapytań case-insensitive?</H4> |
|
|
|
|
Jak korzystać z indeksów dla zapytań case-insensitive?</H4> |
|
|
|
|
|
|
|
|
|
<P>Operator <I>~</I> moze być wykorzystywany do wyszukiwania za |
|
|
|
|
pomocą wyrażeń regularnych, a |
|
|
|
|
<I>~*</I> do wyszukiwania case-insensitive z wyrażeniami |
|
|
|
|
regularnymi. |
|
|
|
|
Wariant case-insensitive dla <SMALL>LIKE</SMALL> został nazwany |
|
|
|
|
<SMALL>ILIKE</SMALL> i jest dostępny w PostgreSQL 7.1 i późniejszych |
|
|
|
|
wersjach.</P> |
|
|
|
|
<SMALL>ILIKE</SMALL>.</P> |
|
|
|
|
|
|
|
|
|
<P>Porównania case-insensitive są zazwyczaj wykonywane w następujący |
|
|
|
|
sposób:</P> |
|
|
|
@ -1087,31 +1148,41 @@ |
|
|
|
|
<PRE> |
|
|
|
|
Type Nazwa wewnętrzna Uwagi |
|
|
|
|
-------------------------------------------------- |
|
|
|
|
"char" char 1 znak |
|
|
|
|
CHAR(#) bpchar wypełniane pustymi znakami do podanej długości |
|
|
|
|
VARCHAR(#) varchar rozmiar określa maksymalną długość, nie ma tutaj wypełniania |
|
|
|
|
VARCHAR(n) varchar rozmiar określa maksymalną długość, nie ma tutaj wypełniania |
|
|
|
|
CHAR(n) bpchar wypełniane pustymi znakami do podanej długości |
|
|
|
|
TEXT text bez limitu na długość łańcucha |
|
|
|
|
BYTEA bytea zmiennej długości tablica bajtów (null-byte safe) |
|
|
|
|
"char" char 1 znak |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<P>Jeśli będziesz przeglądać katalogi systemowe lub komunikaty o |
|
|
|
|
błędach często spotkasz się z podanymi powyżej nazwami |
|
|
|
|
wewnętrznymi.</P> |
|
|
|
|
|
|
|
|
|
<P>Ostatnie cztery typy powyżej to tzw typy "varlena" (np. pierwsze |
|
|
|
|
<P>Pierwsze cztery typy powyżej to tzw typy "varlena" (np. pierwsze |
|
|
|
|
cztery bajty na dysku to długość, po których jest data). Dlatego |
|
|
|
|
faktyczna długośc takiego łańcucha jest trochę większa niż |
|
|
|
|
zadeklarowany rozmiar. Te typy także podlegają kompresji lub mogą być |
|
|
|
|
przechowywane out-of-line jako <SMALL>TOAST</SMALL>, więc faktyczne |
|
|
|
|
zużycie miejsca na dysku może być mniejsze niż oczekiwane.</P> |
|
|
|
|
|
|
|
|
|
<P><SMALL>CHAR()</SMALL> jast najlepszym typem do przechowywania |
|
|
|
|
łańcuchów o tej samej długości. <SMALL>VARCHAR()</SMALL> jest |
|
|
|
|
<SMALL>VARCHAR(n)</SMALL> jest |
|
|
|
|
najodpowiedniejszy do przechowywania łańcuchów o różnej długości |
|
|
|
|
ale określa on maksymalną jego długość. <SMALL>TEXT</SMALL> jest |
|
|
|
|
najlepszy dla łańcuchów o dowolnej długości, nie przekraczającej 1GB. |
|
|
|
|
<SMALL>BYTEA</SMALL> służy do przechowywania danych binarnych, |
|
|
|
|
w szczególności dla danych zawierających <SMALL>NULL</SMALL> bajty.</P> |
|
|
|
|
ale określa on maksymalną jego długość. |
|
|
|
|
|
|
|
|
|
<SMALL>TEXT</SMALL> jest najlepszy dla łańcuchów o dowolnej długości, |
|
|
|
|
nie przekraczającej 1GB.</P> |
|
|
|
|
|
|
|
|
|
<P> |
|
|
|
|
<SMALL>CHAR(n)</SMALL> jast najlepszym typem do przechowywania |
|
|
|
|
łańcuchów o tej samej długości. CHAR(n) wypełnia dane do żadanej |
|
|
|
|
długości, podczas gdy VARCHAR(n) przechowuje jedynie dane |
|
|
|
|
dostarczone. |
|
|
|
|
|
|
|
|
|
<SMALL>BYTEA</SMALL> służy do przechowywania danych binarnych, |
|
|
|
|
w szczególności dla danych zawierających <SMALL>NULL</SMALL> bajty. |
|
|
|
|
Wszystkie typy opisane tutaj maja podobne charakterystyki jeśli |
|
|
|
|
chodzi o wydajność.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.15.1">4.15.1</A>) Jak mogę utworzyć pole które samo |
|
|
|
|
zwiększa swoją wartość?</H4> |
|
|
|
@ -1188,7 +1259,7 @@ BYTEA bytea zmiennej d |
|
|
|
|
|
|
|
|
|
<H4><A name="4.15.4">4.15.4</A>) Dlaczego numery sekwencji nie są |
|
|
|
|
ponownie używane przy przerwaniu transakcji? |
|
|
|
|
Skąd się biorą luki w numerowaniu kolumny tabeli |
|
|
|
|
Skąd się biorą luki w numerowaniu kolumny tabeli |
|
|
|
|
sekwancjami/SERIALem?</H4> |
|
|
|
|
|
|
|
|
|
<P>Aby poprawić zbieżność (concurrency), wartości sekwencji są |
|
|
|
@ -1197,8 +1268,7 @@ BYTEA bytea zmiennej d |
|
|
|
|
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> |
|
|
|
|
jest <SMALL>TID</SMALL>?</H4> |
|
|
|
|
|
|
|
|
|
<P><SMALL>OID</SMALL> są PostgreSQL'owym rozwiązaniem problemu |
|
|
|
|
unikalnych numerów rzędów. Każdy rząd tworzony przez PostgreSQL |
|
|
|
@ -1274,15 +1344,15 @@ BYTEA bytea zmiennej d |
|
|
|
|
</UL> |
|
|
|
|
|
|
|
|
|
<P>Listę terminów związanych z bazami danych możesz znaleźć pod tym |
|
|
|
|
adresem:<A href= |
|
|
|
|
"http://www.comptechnews.com/~reaster/dbdesign.html">http://www.comptechnews.com/~reaster/dbdesign.html</A></P> |
|
|
|
|
adresem:<A |
|
|
|
|
href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A>. |
|
|
|
|
|
|
|
|
|
<H4><A name="4.18">4.18</A>) Skąd bierze się ten błąd <I>"ERROR: |
|
|
|
|
Memory exhausted in AllocSetAlloc()"</I>?</H4> |
|
|
|
|
|
|
|
|
|
<P>Jeśli używasz wersji starszej niż 7.1, upgrade może rozwiązać ten |
|
|
|
|
problem. Jest także mozliwe, że po prostu wyczerpała Ci się pamięć |
|
|
|
|
wirtualna (virtual memory) w systemie lub Twój kernel ma zbyt nisko |
|
|
|
|
<P> |
|
|
|
|
Prawdopodobnie wyczerpała Ci się pamięć wirtualna (virtual memory) |
|
|
|
|
w systemie lub Twój kernel ma zbyt nisko |
|
|
|
|
ustawione limity dla pewnych zasobów. Spróbuj wykonać następujące |
|
|
|
|
polecenia zanim uruchomisz <I>postmaster'a</I>:</P> |
|
|
|
|
<PRE> |
|
|
|
@ -1332,29 +1402,38 @@ BYTEA bytea zmiennej d |
|
|
|
|
<H4><A name="4.22">4.22</A>) Dlaczego zapytania używające |
|
|
|
|
<CODE><SMALL>IN</SMALL></CODE> sa takie wolne?</H4> |
|
|
|
|
|
|
|
|
|
<P>Obecnie łączymy podzapytania w outer queries poprzez sekwencyjne |
|
|
|
|
przeszukiwanie wyników podzapytania dla każdego rzędu z outer query. |
|
|
|
|
Można to ominąć zastępując <CODE>IN</CODE> przez |
|
|
|
|
<P>W wersjach wcześniejszych niż 7.4 łączymy podzapytania w outer queries |
|
|
|
|
poprzez sekwencyjne przeszukiwanie wyników podzapytania dla każdego rzędu |
|
|
|
|
z outer query. Jeśli podzapytanie zwraca jedynie kilka rzędów a |
|
|
|
|
zewnętrzne zapytanie zwraca ich wiele, IN jest najszybsze. |
|
|
|
|
Aby przyspieszyć inne zapytania można zastąpić <CODE>IN</CODE> przez |
|
|
|
|
<CODE>EXISTS</CODE>:</P> |
|
|
|
|
<PRE> |
|
|
|
|
<CODE>SELECT * |
|
|
|
|
FROM tab |
|
|
|
|
WHERE col1 IN (SELECT col2 FROM TAB2) |
|
|
|
|
WHERE col IN (SELECT subcol FROM subtab) |
|
|
|
|
</CODE> |
|
|
|
|
</PRE> |
|
|
|
|
na: |
|
|
|
|
<PRE> |
|
|
|
|
<CODE>SELECT * |
|
|
|
|
FROM tab |
|
|
|
|
WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2) |
|
|
|
|
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col) |
|
|
|
|
</CODE> |
|
|
|
|
</PRE> |
|
|
|
|
Mamy zamiar poprawić to ograniczenie w przyszłych wydaniach. |
|
|
|
|
|
|
|
|
|
<P> |
|
|
|
|
Aby to rozwiązanie było szybkie, subcol powinna być kolumną |
|
|
|
|
indeksowaną. |
|
|
|
|
</P> |
|
|
|
|
<P> |
|
|
|
|
W wersji 7.4 i późniejszych, IN w rzeczywistości używa tej samej |
|
|
|
|
wyrafinowanej techniki łączenia jak normalne zapytania i jest |
|
|
|
|
preferowane nad używaniem EXISTS. |
|
|
|
|
</P> |
|
|
|
|
<H4><A name="4.23">4.23</A>) Jak wykonać "outer join"?</H4> |
|
|
|
|
|
|
|
|
|
<P>PostgreSQL 7.1 i późniejsze wersje mają zaimplementowane outer join |
|
|
|
|
wykorzystując standardową składnie SQL. Poniżej dwa przykłady:</P> |
|
|
|
|
<P>PostgreSQL ma zaimplementowane outer join |
|
|
|
|
wykorzystując standardową składnię SQL. Poniżej dwa przykłady:</P> |
|
|
|
|
|
|
|
|
|
<PRE> |
|
|
|
|
SELECT * |
|
|
|
@ -1367,7 +1446,7 @@ BYTEA bytea zmiennej d |
|
|
|
|
</PRE> |
|
|
|
|
|
|
|
|
|
<P>Te dwa identyczne zapytania łączą kolumnę t1.col z kolumną t2.col, |
|
|
|
|
ale także zwrócą niepołączone rzędy w t1 (te które nie pasują w t2). |
|
|
|
|
ale także zwrócą niepołączone rzędy w t1 (te, które nie pasują w t2). |
|
|
|
|
<SMALL>RIGHT</SMALL> join dodałby niepołączone rzędy z tabeli t2. |
|
|
|
|
<SMALL>FULL</SMALL> join zwróciłby rzędy plus dodatkowo wszystkie |
|
|
|
|
rzędy z tabel t1 i t2. Słowo <SMALL>OUTER</SMALL> jest opcjonalne i |
|
|
|
@ -1401,19 +1480,63 @@ BYTEA bytea zmiennej d |
|
|
|
|
katalogi systemowe, nie jest do końca jasne jak zapytanie pomiędzy |
|
|
|
|
różnymi bazami danych powinno się zachowywać.</P> |
|
|
|
|
|
|
|
|
|
<P>Oczywiście klient może łączyć się z różnymi bazami danych i łączyć |
|
|
|
|
informację w ten sposób uzyskaną.</P> |
|
|
|
|
<P><I>contrib/dblink</I> pozwala na wykonywanie zapytań poprzez różne |
|
|
|
|
bazy danych wywołując odpowiednie funkcje. Oczywiście klient może łączyć |
|
|
|
|
się z różnymi bazami danych i łączyć informację w ten sposób uzyskaną |
|
|
|
|
po stronie klienta.</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.25">4.25</A>) Jak zwrócić w funkcji wiele rzędów lub |
|
|
|
|
kolumn?</H4> |
|
|
|
|
|
|
|
|
|
<P>Możesz zwracać zbiory z funkcji PL/pgSQL używają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ę 23.7.3.3.</P> |
|
|
|
|
|
|
|
|
|
<P>Możesz w łatwy sposób zwracać wiele rzędów lub kolumn używając |
|
|
|
|
funkcji z: <A HREF="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>. |
|
|
|
|
|
|
|
|
|
<H4><A name="4.26">4.26</A>) Dlaczego nie mogę w sposób pewny |
|
|
|
|
tworzyć/usuwać tabel tymczasowych w funkcjach PL/PgSQL?</H4> |
|
|
|
|
<P> |
|
|
|
|
PL/PgSQL przechowuje w cache zawartość funkcji, niepożądanym efektem tego |
|
|
|
|
jest to, że gdy taka funkcja korzysta z tabel tymczasowych, które są |
|
|
|
|
później kasowane i odtwarzane, a funkcja wywoływana jest ponownie,jej |
|
|
|
|
wywołanie nie powiedzie się ponieważ cachowana funkcja wciąż będzie |
|
|
|
|
wskazywać na stara tablicę tymczasową. Rozwiązaniem tego problemu jest |
|
|
|
|
używanie EXECUTE aby korzystać z tabel tymczasowych w PL/PgSQL. To |
|
|
|
|
spowoduje, że zapytanie będzie parsowane przy każdym wywołaniu |
|
|
|
|
funkcji. |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.27">4.27) Jakie są możliwości replikacji w PostgreSQL?</H4> |
|
|
|
|
<P> |
|
|
|
|
Jest kilka opcji aby stosować replikację typu master/slave. Ten typ |
|
|
|
|
pozwala jedynie masterowi na dokonywanie zmian w bazie danych, a |
|
|
|
|
slave może jedynie te zmiany odczytywać. Na stronie |
|
|
|
|
<A |
|
|
|
|
HREF="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</A> |
|
|
|
|
znajduje się ich lista. Replikacja typu multi-master jest w trakcie |
|
|
|
|
prac, opis projektu znajduje się pod adresem: <A |
|
|
|
|
HREF="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php"> |
|
|
|
|
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>. |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="4.28">4.28) Jakie możliwości szyfrowania oferuje |
|
|
|
|
PostgreSQL?</H4> |
|
|
|
|
<P> |
|
|
|
|
<UL> |
|
|
|
|
<LI>contrib/pgcrypto zawiera wiele funkcji za pomocą, których możemy używać |
|
|
|
|
kryptografii w zapytaniach SQL. |
|
|
|
|
<LI>Aby szyfrować transmisję od klienta do serwera, ten musi mieć |
|
|
|
|
ustawioną opcję ssl na true w pliku postgresql.conf, odpowiedni |
|
|
|
|
wpis host lub hostssl musi występować w pliku pg_hba.conf, oraz |
|
|
|
|
sslmode nie może być wyłączone w kliencie. (Warto zwrócić uwagę, że |
|
|
|
|
możliwe jest także używanie transportów szyfrująców przez strony |
|
|
|
|
trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem dla SSL |
|
|
|
|
przez PostgreSQL). |
|
|
|
|
<LI>Hasła użytkowników bazy danych są automatycznie szyfrowane od |
|
|
|
|
wersji 7.3. W poprzednich wersjach, należy tą funkcjonalność poprzez |
|
|
|
|
włączenie opcji PASSWORD_ENCRYPTION w postgresql.conf. |
|
|
|
|
<LI>Serwer może działać używając szyfrowanego systemu plików. |
|
|
|
|
</UL> |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<H2 align="center">Rozwijanie PostgreSQL</H2> |
|
|
|
|
|
|
|
|
|
<H4><A name="5.1">5.1</A>) Napisałem własną funkcję. Kiedy użyję jej |
|
|
|
@ -1432,8 +1555,12 @@ BYTEA bytea zmiennej d |
|
|
|
|
<H4><A name="5.3">5.3</A>) Jak napisać funkcję C zwracającą krotkę |
|
|
|
|
(tuple)?</H4> |
|
|
|
|
|
|
|
|
|
<P>To wymaga wysiłku tak olbrzymiego, że nawet autorzy nigdy tego nie |
|
|
|
|
prubowali, chociaż z zalożeń wynika, że jest to możliwe.</P> |
|
|
|
|
<P> |
|
|
|
|
W wersjach PostgreSQL od numeru 7.3, funckje zwracające tabele są w |
|
|
|
|
pęlni wspierane w C, PL/PgSQL i SQL. Sprawdź w Programmer's Guide aby |
|
|
|
|
uzyskać więcej informacji. Przykład funkcji napisanej w C zwracającej |
|
|
|
|
tabelę został umieszczony w <I>contrib/tablefunc</I>. |
|
|
|
|
</P> |
|
|
|
|
|
|
|
|
|
<H4><A name="5.4">5.4</A>) Zmieniłem plik źródłowy. Dlaczego po |
|
|
|
|
rekompilacji nie widać zmiany?</H4> |
|
|
|
@ -1443,6 +1570,8 @@ BYTEA bytea zmiennej d |
|
|
|
|
<I>make clean</I>, a następnie ponownie <I>make</I>. |
|
|
|
|
Jeśli używasz <SMALL>GCC</SMALL> możesz użyć opcji |
|
|
|
|
<I>--enable-depend</I> przy wykonywaniu <I>configure</I> aby |
|
|
|
|
kompilator mógł określić zależności samodzielnie. |
|
|
|
|
</P> |
|
|
|
|
</BODY> |
|
|
|
|
</HTML> |
|
|
|
|
|
|
|
|
|