Frequently Asked Questions (FAQ) o PostgreSQL

Ostatnia aktualizacja: Sobota Luty 7 22:16:21 EST 2004

Ostatnia aktualizacja t�umaczenia: Pi�tek Marzec 5 19:31:12 EST 2004

Obecny maintainer: Bruce Momjian (pgman@candle.pha.pa.us)

T�umaczenie: Marcin Mazurek (m.mazurek@netsync.pl)

Najbardziej aktualn� wersj� tego dokumentu mo�na znale�� pod adresem: http://www.PostgreSQL.org/docs/faqs/FAQ.html.

Odpowiedzi na pytania dotycz�ce konkretnych system�w operacyjnych mo�na znale�� pod adresem: http://www.PostgreSQL.org/docs/index.html.


Pytania og�lne

1.1) Co to jest PostgreSQL? Jak to wymawia�?
1.2) Jak� licencj� chroniony jest PostgreSQL?
1.3) Na jakich systemach Unixowych dzia�a PostreSQL?
1.4) Na jakich nie-Unixowych systemach dzia�a PostgreSQL?
1.5) Sk�d mog� �ci�gn�� PostgreSQL?
1.6) Gdzie mo�na szuka� wsparcia technicznego?
1.7) Jaka jest ostatnia dost�pna wersja?
1.8) Jaka dokumentacja jest dost�pna?
1.9) Gdzie mog� znale�� informacj� o znanych b��dach czy brakuj�cych rozwi�zanich?
1.10) Jak mog� si� nauczy� SQL?
1.11) Czy PostgreSQL ma rozwi�zany problem Y2K?
1.12) Jak mog� si� przy��czy� do grupy os�b bezpo�rednio pracuj�cych nad rozwojem PostgreSQL?
1.13) Jak mog� zg�asza� b��dy?
1.14) Jak mo�na por�wna� PostgreSQL w stosunku do innych DBMS?
1.15) W jaki spos�b mog� wesprze� finansowo PostgreSQL?

Pytania u�ytkownik�w

2.1) Czy s� jakie� driwery ODBC dla PostgreSQL?
2.2) Jakie istniej� narz�dzia pozwalaj�ce na dost�p do PostgreSQL przez www?
2.3) Czy istnieje jakie� GUI dla PostgreSQL?
2.4) Za pomoc� jakich j�zyk�w programowania mo�na si� komunikowa� z PostgreSQL?

Pytania dotycz�ce administracji

3.1) Jak mog� zainstalowa� PostgreSQL w innej lokalizacji ni� /usr/local/pgsql?
3.2) Podczas startu postmaster'a, otrzymuj� komunikat: Bad System Call lub "core dumped". Dlaczego?
3.3) Podczas startu postmaster'a, otrzymuj� komunikat o b��dzie: IpcMemoryCreate. Dlaczego?
3.4) Podczas startu postmaster'a, otrzymuj� komunikat o b��dzie: IpcSemaphoreCreate. Dlaczego?
3.5) W jaki spos�b mog� kontrolowa� po��czenia z innych host�w?
3.6) Jak powinienem skonfigurowa� system baz danych aby uzyska� lepsz� wydajno��?
3.7) Jakie s� mo�liwo�ci wyszukiwania b��d�w?
3.8) Sk�d si� bierze komunikat: "Sorry, too many clients" podczas pr�by po��czenia si� z baz� danych?
3.9) Jakie pliki znajduj� si� w pg_temp?
3.10) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze skrypt�w dump i restore?

Pytania dotycz�ce u�ytkowania

4.1) Jaka jest r�nica pomi�dzy kursorami binarnymi (binary cursors) i zwyk�ymi kursorami (normal cursors)?
4.2) Jak mog� pobra� za pomoc� SELECT jedynie kilka pierwszych wynik�w zapytania?
4.3) Jak mog� uzyska� list� wszystkich tabel czy innych rzeczy pod psql?
4.4) Jak usun�� kolumn� z tabeli lub zmieni� jej typ?
4.5) Jaki jest maksymalny rozmiar dla rz�du, tabeli i bazy danych?
4.6) Jak du�o miejsca w bazie danych jest potrzebne aby przechowa� dane ze zwyczajnego pliku tekstowego?
4.7) Jak mog� sprawdzi� jakie tabele, klucze, bazy danych i u�ytkownicy s� utworzeni?
4.8) Moje zapytania s� wolne lub nie u�ywaj� kluczy. Dlaczego?
4.9) Jak mog� sprawdzi� w jakis spos�b "query optimizer" wykonuje moje zapytanie?
4.10) Co to jest "R-tree index"?
4.11) Co to jest "Genetic Query Optimizer"?
4.12) 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?
4.13) Jak sprawdzi� w zapytaniu czy pole ma warto�� NULL?
4.14) Jaka jest r�nica pomi�dzy r�nymi typami tekstowymi (character types)?
4.15.1) Jak mog� utworzy� pole typu int, kt�re samo zwi�ksza swoj� warto��?
4.15.2) Jak pobra� warto�� pola typu SERIAL po wykonaniu insert'u?
4.15.3) Czy u�ycie currval() i nextval() nie doprowadzi do "race condition" z innymi u�ytkownikami?
4.15.4) Dlaczego numery sekwencji nie s� ponownie u�ywane przy przerwaniu transakcji? Sk�d si� bior� luki w numerowaniu kolumny tabeli sekwencjami/SERIALem?
4.16) Co to jest OID? Co to jest TID?
4.17) Jakie jest znaczenie niekt�rych termin�w w PostgreSQL?
4.18) Sk�d bierze si� ten b��d: "ERROR: Memory exhausted in AllocSetAlloc()"?
4.19) Jak sprawdzi� jakiej wersji PostgreSQL u�ywam?
4.20) Dlaczego operacje, kt�re wykonuj� na du�ych obiektach "large-object" zwracaj� komunikat: "invalid large obj descriptor"?
4.21) Jak stworzy� kolumn� kt�rej domy�ln� warto�ci� b�dzie bie��cy czas?
4.22) Dlaczego zapytania u�ywaj�ce IN s� takie wolne?
4.23) Jak wykona� "outer join"?
4.24) Jak wykonywa� zapytanie u�ywaj�ce kilku baz danych jednocze�nie?
4.25) Jak zwr�ci� w funkcji wiele rz�d�w lub kolumn?
4.26) Dlaczego nie mog� w spos�b pewny tworzy�/usuwa� tabel tymczasowych w funkcjach PL/PgSQL?
4.27) Jakie s� mo�liwo�ci replikacji w PostgreSQL?
4.28) Jakie mo�liwo�ci szyfrowania oferuje PostgreSQL?

Rozwijanie PostgreSQL

5.1) Napisa�em w�asn� funkcj�. Kiedy u�yj� jej w psql, program zrzuca pami�� (dump core)?
5.2) Jak mog� doda�/zg�osi� nowe typy czy funkcje do PostgreSQL?
5.3) Jak napisa� funkcj� C zwracaj�c� krotk� (tuple)?
5.4) Zmieni�em plik �r�d�owy. Dlaczego po rekompilacji nie wida� zmiany?

Pytania og�lne

1.1) Co to jest PostgreSQL? Jak to wymawia�?

PostgreSQL wymawia si� Post-Gres-kju-el. Cz�sto podczas rozm�w u�ywany jest termin "Postgres"

PostgreSQL jest rozszerzeniem systemu zarz�dzania bazami danych - POSTGRES, kolejn� generacj� rozwojowego prototypu DBMS. Mimo, �e PostgreSQL zachowa� bardzo dobrze zbudowany model danych (data model) i bogaty zestaw typ�w danych POSTGRES'a, zast�pi� PostQuel'owy j�zyk zapyta� z rozbudowanym podzbiorem j�zyka SQL. PostgreSQL jest oprogramowaniem darmowym z dost�pnymi ca�ymi �r�d�ami.

Rozw�j PostgreSQL jest prowadzony przez grup� ludzi z Internetu, komunikuj�cych si� poprzez mailowe listy dyskusyjne PostgreSQL. Obecnym koordynatorem jest Marc G. Fournier (scrappy@PostgreSQL.org). (Zobacz pytanie 1.6 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�, http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html

Autorami PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Wiele innych os�b pomog�o przy portowaniu, testowaniu, debugowaniu i rozwijaniu kodu. Oryginalny kod Postgresa, na kt�rym zosta� oparty PostgreSQL, by� wysi�kiem student�w oraz pracownik�w pracuj�cych pod kierownictwem profesora Michael'a Stonebraker'a z University of California w Berkeley.

Oryginaln� nazw� oprogramowania w Berkeley by� Postgres. Po dodaniu obs�ugi SQL w 1995, nazwa zosta�a zmieniona na Postgres95. Pod koniec roku 1996 nazwa zosta�a zmieniona na PostgreSQL.

1.2) Jak� licencj� chroniony jest PostgreSQL?

PostgreSQL obj�ty jest nast�puj�c� licencj�:

PostgreSQL Data Base Management System

Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the University of California

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.

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.

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.

Tekst powy�ej, jest klasyczn� licencj� BSD. Nie posiada ona �adnych restrykcji co do u�ywania kodu �r�d�owego. Podoba nam si� i nie zamierzamy jej zmienia�.

1.3) Na jakich systemach Unixowych dzia�a PostreSQL?

PostgreSQL powinien dzia�a� na wszystkich nowych Unix-podobnych systemach. Platformy, kt�re zosta�y szczeg�owo przetestowane podczas publikowania PostgreSQL s� wymienione w dokumentacji opisuj�cej instalacj�.

1.4) Na jakich nie-Unixowych systemach dzia�a PostgreSQL?

Klient

Mo�liwa jest kompilacja bibliteki C libpq, 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 win32.mak jest do��czony do �r�de�, aby mo�na by�o stworzy� bibliotek� libpq oraz program psql dzia�aj�ce w �rodowisku Win32. PostgreSQL mo�e si� tak�e komunikowa� z klientami ODBC.

Serwer

Serwer mo�e by� uruchamiany na Windows NT i Win2k u�ywaj�c bibliotek Cygwin, Cygnus Unix/NT. W pliku pgsql/doc/FAQ_MSWIN znajduj�cym si� w �r�d�ach lub pod adresem: http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN na naszych stronach.

Obecnie prowadzone s� prace nad stworzeniem wersji dla MS Win NT/200/XP. Je�li chcesz si� dowiedzie� o obecnym statusie tych prac zobacz http://techdocs.postgresql.org/guides/Windows and http://momjian.postgresql.org/main/writings/pgsql/win32.html.

Istnieje tak�e port pod Novell Netware 6 dost�pny pod adresem http://forge.novell.com.

1.5) Sk�d mo�na �ci�gn�� PostgreSQL?

G��wny serwer ftp z dost�pem "anonymous" dla PostgreSQL znajduje si� ftp://ftp.PostgreSQL.org/pub. je�li szukasz mirror�w sprawd� nasz� g��wn� stron� www.

1.6) Gdzie mo�na szuka� wsparcia technicznego?

Adres g��wnej listy mailowej: pgsql-general@PostgreSQL.org. Jest ona przeznaczona dyskusjom dotycz�cym spraw zwi�zanych z PostgreSQL. �eby zapisac si� na list�, wy�lij email z nast�puj�cymi liniami w tre�ci maila (nie w temacie):

    subscribe
    end

na adres: pgsql-general-request@PostgreSQL.org.

Dost�pna jest tak�e lista wysy�aj�ca digesty. Aby zapisa� si� na ni�, wy�lij email na adres: pgsql-general-digest-request@PostgreSQL.org z tre�ci� maila zawieraj�c�:

    subscribe
    end
Digesty s� wysy�ane do cz�onk�w listy, kiedy na g��wn� list� dotrze ok 30k wiadomo�ci.

Dost�pna jest tak�e lista po�wi�cona b��dom znalezionym w PostgreSQL. Aby zapisa� si� na ni� wy�lij email na adres: pgsql-bugs-request@PostgreSQL.org z tre�ci� maila zawieraj�c�:

    subscribe
    end
Lista po�wi�cona dyskusjom developer�w jest dost�pna pod adresem: pgsql-hackers-request@PostgreSQL.org Aby si� na ni� zapisa� wy�lij na jej adres mail z tre�ci�:
    subscribe
    end

Dodatkowe informacje o listach mailowych dotycz�cych PostgreSQL mo�na znale�� na stronach WWW PostgreSQL pod adresem:

http://www.PostgreSQL.org

W sieci EFNet istnieje kana� IRC #PostgreSQL. Ja, do po��czenia si� z kana�em u�ywam Unixowego polecenia irc -c '#PostgreSQL' "$USER" irc.phoenix.net.

Lista firm oferuj�cych wsparcie na zasadach komercyjnych znajduje si� pod adresem: http://techdocs.postgresql.org/companies.php.

1.7) Jaka jest ostatnia dost�pna wersja?

Ostatnia dost�pna wersja PostgreSQL to 7.4.1.

Planujemy publikowanie kolejnych wersji co sze�� do o�miu miesi�cy.

1.8) Jaka dokumentacja jest dost�pna?

Kilka manuali, stron pod�cznika man, oraz kilka przyk�ad�w do testowania s� za��czone w samej dystrybucji. Znajduj� si� one w katalogu /doc. Manual mo�e by� tak�e przegl�dany poprzez strony www pod adresem http://www.PostgreSQL.org/docs.

Istniej� tak�e dwie ksi��ki dost�pne online pod adresami http://www.PostgreSQL.org/docs/awbook.html i http://www.commandprompt.com/ppbook/. Lista ksi��ek o PostgreSQL, kt�re mo�na kupi� znajduje si� pod adresem http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Zbi�r technicznych artyku��w o PostgreSQL znajduje si� pod adresem http://techdocs.postgresql.org/.

psql posiada kilka wbudowanych polece� \d, za pomoca kt�rych mo�na sprawdzi� informacje dotycz�ce typ�w, operator�w, funkcji, agregat�w itd.

Na naszej stronie mo�na znale�� du�o wi�cej dokumentacji.

1.9) Gdzie mo�na znale�� informacj� o znanych b��dach czy brakuj�cych rozwi�zanich?

PostgreSQL wspiera rozszerzony podzbi�r standardu SQL-92. Sprawd� nasz� list� TODO aby znale�� informacj� o znanych problemach, brakuj�cych rozwi�zaniach czy przysz�ych planach.

1.10) Jak mog� si� nauczy� SQL?

Ksi��ka o PostgreSQL http://www.PostgreSQL.org/docs/awbook.html uczy SQL. Jest jeszcze inna ksi�zka o PostgreSQL dost�pna pod adresem: http://www.commandprompt.com/ppbook. Dobry tutorial mo�esz znale�� pod adresem: http://www.intermedia.net/support/sql/sqltut.shtm, oraz http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM, i http://sqlcourse.com.

Jeszcze inny to "Teach Yourself SQL in 21 Days, Second Edition" pod adresem: http://members.tripod.com/er4ebus/sql/index.htm

Wielu z naszych u�ytkownik�w poleca The Practical SQL Handbook, Bowman, Judith S., et al., Addison-Wesley. Inni polecaj� The Complete Reference SQL, Groff et al., McGraw-Hill.

1.11) Czy PostgreSQL ma rozwi�zany problem Y2K?

Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz przed rokiem 2000 BC.

1.12) Jak mog� si� przy��czy� do grupy os�b bezpo�rednio pracuj�cych nad rozwojem PostgreSQL?

Przede wszystkim �ci�gnij ostatnie dost�pne �r�d�a i przeczytaj dokumentacj� przeznaczon� dla developer�w na naszej stronie www lub dost�pn� tak�e w �r�d�ach PostgreSQL. Nast�pnie zapisz si� na listy mailowe pgsql-hackers i pgsql-patches. I na koniec, wysy�aj nam wysokiej jako�ci patch'e na list� pgsql-patches.

Jest oko�o 12 os�b, kt�re maj� uprawnienia do commit'owania w CVS PostgreSQL'a. Ka�dy z nich submitowa� tak wiele wysokiej jako�ci patchy, �e sta�o si� niemo�liwe dla obecnych commiter�w by� z nimi na bie��co, wi�c musieli�my im ufa� i mie� pewno��, �e ich poprawki s� wysokiej jako�ci.

1.13) Jak mog� zg�asza� b��dy?

Zajrzyj na stron� PostgreSQL BugTool, na kt�rej opisane s� wskaz�wki jak zg�asza� informacje o b��dach.

Zajrzyj tak�e na nasz ftp ftp://ftp.PostgreSQL.org/pub, aby sprawdzi� czy nie ma nowszych wersji PostgreSQL czy patchy.

1.14) Jak mo�na por�wna� PostgreSQL w stosunku do innych DBMS?

Jest kilka sposob�w oceny softwaru: mo�liwo�ci, wydajno��, stabilno��, wsparcie i cena.

Mo�liwo�ci
PostgreSQL posiada mo�liwo�ci dost�pne w du�ych, komercyjnych systemach DBMS, takie jak transakcje, podzapytania (subselects), triggery, widoki, klucze obce, referential integrity, oraz wyrafinowany system blokowania. Mamy tak�e w�a�ciow�ci kt�rych inni nie posiadaj�, jak typy definiowane przez u�ytkownika, dziedziczenie, rules, multi-version concurrency control, kt�ra redukuje problemy z blokowaniem (lock contention).

Wydajno��
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 Mo�liwo�ci . 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 http://openacs.org/philosophy/why-not-mysql.html 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.

Stabilno��
Zdajemy sobie spraw�, �e DBMS musi by� stabilny, w przeciwnym wypadku jest bez warto�ci. Staramy si� publikowa� kod stabilny, dobrze przetestowany, z minimum mo�liwych b��d�w. Ka�de wydanie poprzedza co najmniej miesi�c test�w wersji beta. Patrz�c na histori� wyda� PostgreSQL wida�, �e dostarczamy stabilne, dobrze sprawdzone wersje, kt�re s� gotowe do u�ycia w �rodowisku produkcyjnym. My�limy, �e proces publikowania kolejnych wersji opracowany przez nas jest jednym z lepszych w�r�d innych tw�rc�w oprogramowania bazodanowego.

Wsparcie
Dzi�ki naszym listom mailowym masz dost�p do du�ej liczby programist�w i u�ytkownik�w, kt�rzy pomagaj� rozwi�za� ka�dy napotkany problem. Chocia� nie mo�emy gwarantowa� znalezienia rozwi�zania danego problemu, nie r�nimy si� w tym od innych komercyjnych system�w DBMS. Bezpo�redni kontakt z programistami, u�ytkownikami, dokumentacj� i kodem �r�d�owym sprawiaj�, �e wsparcie oferowane PostgreSQL niejednokrotnie jest lepsze ni� w innych systemach DBMS. Istnieje tak�e mo�liwo�� skorzystania z komercyjnego wsparcia dla tych, kt�rych takiego rozwi�zania potrzebuj�. (Sprawd� ten punkt FAQ.)

Cena
Korzystanie z PostgreSQL jest darmowe, zar�wno w przypadku komercyjnym jak i niekomercyjnym. Mo�esz korzysta� z naszego kodu �r�d�owego w Twoim produkcie bez �adnych ogranicze�, poza tymi wymienionymi w licencji BSD przytoczonej powy�ej.

1.15) W jaki spos�b mog� wesprze� finansowo PostgreSQL?

PostgreSQL korzysta z najlepszej infrastruktury od samego pocz�tku istnienia projektu, czyli roku 1996 kiedy rozpoczeli�my prac�. Wszystko to zawdzi�czamy Marc'owi Fournier'owi, kt�ry stworzy� t� infrastruktur� i zarz�dza ni� od lat.

Wysokiej jako�ci infrastruktura jest bardzo wa�na dla ka�dego projektu open-source. Zapobiega przerwom w rozwoju projektu i jakimkolwiek przestojom.

Oczywi�cie korzystanie z wysokiej jako�ci infrastruktury nie jest tanie. Istnieje wiele r�nych miesi�cznych, czy jednorazowych wydatk�w, kt�re trzeba ponosi� aby wszystko dzia�a�o jak nale�y. Je�li Ty, b�d� Twoja firma mo�e wspom�c finansowo rozw�j PostgreSQL odwied� adres: http://store.pgsql.com/shopping/ gdzie opisane jest jak to zrobi�.

Chocia� na stronie wspomniana jest nazwa PostgreSQL Inc, "datki" s� przeznaczone jedynie na rozw�j projektu PostgreSQL i nie s� przeznaczane na finansowanie jakiejkolwiek firmy. Je�li wolisz, mo�esz wys�a� czek na adres kontaktowy.


Je�li mo�esz si� pochwali� udanymi wdro�eniami PostgreSQL, prosimy aby� zg�osi� nam to na stronie: http://advocacy.postgresql.org.

User Client Questions

2.1) Czy s� jakie� driwery ODBC dla PostgreSQL?

Dost�pne s� dwa driwery ODBC: PsqlODBC i OpenLink ODBC.

Mo�esz pobra� PsqlODBC z adresu http://gborg.postgresql.org/project/psqlodbc/projdisplay.php

OpenLink ODBC mo�e by� pobrany z adresu: http://www.openlinksw.com. Wsp�pracuje ze standardowym oprogramowaniem klienckim ODBC wi�c w ten spos�b mo�esz korzysta� z PostgreSQL ODBC dost�pnego na ka�dej pltaformie kt�r� wspiera (Win, Mac, Unix, VMS).

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: postgres95@openlink.co.uk.

2.2) Jakie istniej� narz�dzia pozwalaj�ce na dost�p do PostgreSQL przez www?

Dobry podr�cznik dla pocz�tkuj�cych o dost�pie do bazy danych przez www mo�esz znale�� pod adresem: http://www.webreview.com

Do integracji z www, �wietnym rozwi�zaniem jest PHP. Mo�esz znale�� wi�cej informacji na ten temat pod adresem http://www.php.net.

Wiele os�b w przypadku skomplikowanych rozwi�za� uzywa Perl'a i modu�u CGI.pl lub mod_perl.

2.3) Czy istnieje jakie� GUI dla PostgreSQL?

Tak, istnieje kilka interfejs�w graficznych dla PostgreSQL. W�r�d nich PgAccess ( http://www.pgaccess.org), PgAdmin III (http://www.pgadmin.org), 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.

Wi�cej informacji na ten temat znajduje si� pod adresem See http://techdocs.postgresql.org/guides/GUITools.

2.4) Za pomoc� jakich j�zyk�w programowania mo�na si� komunikowa� z PostgreSQL?

Najbardziej popularne j�zyki posiiadaj� w�asny interfejs dla PostgreSQL. Sprawd� list� rozszerze� dla intersuj�cego Ciebie j�zyka programowania.

Ze �r�d�ami PostreSQL dystrubuowane s� interfejsy dla nast�puj�cych j�zyk�w programowania:

Inne interfejsy s� dost�pne pod adresem: http://gborg.postgresql.org w sekcji Drivers/Interfaces.

Pytania dotycz�ce administracji

3.1) Jak mog� zainstalowa� PostgreSQL w innej lokalizacji ni� /usr/local/pgsql?

U�yj opcji --prefix podczas uruchamiania skryptu configure.

3.2) Podczas startu postmaster'a, otrzymuj� komunikat o b��dzie: Bad System Call lub "core dumped". Dlaczego?

Ten b��d mo�e by� wynikiem wielu problem�w, ale na pocz�tek sprawd� czy masz zainstalowane rozszerzenia systemu V w j�drze systemu. PostgreSQL wymaga do pracy zainstalowanej obs�ugi pami�ci dzielonej i semafor�w.

3.3) Podczas startu postmaster'a, otrzymuj� komunikat o b��dzie: IpcMemoryCreate. Dlaczego?

Albo nie masz poprawnie skonfigurowanej obs�ugi pami�ci dzielonej w j�drze systemu, albo musisz zwi�kszy� jej dost�pny rozmiar. Dok�adna ilo�� jak� potrzebujesz jest zale�na od architektury systemu na jakim pracujesz, jak du�o bufor�w oraz jak du�o proces�w backendu skonfigurowa�e� dla postmaster'a. Dla wi�kszo�ci system�w, z domy�ln� liczb� bufor�w i proces�w potrzebujesz minimum w przybli�eniu 1MB. Zobacz PostgreSQL Administrator's Guide gdzie szczeg�owo zosta�o opisane wykorzystanie pami�ci dzielonej i semafor�w.

3.4) Podczas startu postmaster'a, otrzymuj� komunikat o b��dzie: IpcSemaphoreCreate. Dlaczego?

Je�li tre�� b��du brzmi: IpcSemaphoreCreate: semget failed (No space left on device) oznacza to, �e j�dro systemu nie jest skonfigurowane do obs�ugi wystarczaj�cej liczby semafor�w. Postgres wymaga jednego semafor'a na potencjalny jeden proces backend. Tymczasowym rozwi�zaniem jest uruchomienie programu postmaster z mniejsz� maksymaln� liczb� proces�w backend. U�yj opcji -N z parameterem mniejszym od domy�lnego - 32. Bardziej trwa�ym rozwi�zaniem jest zwi�kszenie parametr�w SEMMNS i SEMMNI j�dra twojego systemu.

Niedzia�aj�ce semafory mog� spowodowa� niepoprawne zamkni�cie systemu w czasie intensywnego korzystania z bazy.

Je�li tre�� b��du jest inna, mo�e to oznacza�, �e obs�uga semafor�w nie zosta�a w��czona do j�dra wcale. Zobacz PostgreSQL Administrator's Guide po bardziej szczeg�owe informacje o pami�ci dzielonej i semaforach.

3.5) W jaki spos�b mog� kontrolowa� po��czenia z innych host�w?

Domy�lnie PostgreSQL pozwala jedynie na po��czenia za pomoc� socket�w Unixowych z lokalnego hosta. Inne hosty nie b�d� mog�y si� po��czy� z serwerem dop�ki nie zostanie dodana opcja -i do postmaster'a, oraz nie umo�liwi si� autoryzacji na podstawie adresu host�w modyfikuj�c odpowiednio plik $PGDATA/pg_hba.conf. To zmiany pozwol� na po��czenia TCP/IP.

3.6) Jak powinienem skonfigurowa� system baz danych aby uzyska� lepsz� wydajno��?

Indeksy bez w�tpienia mog� przyspieszy� wykonywanie zapyta�. Polecenie EXPLAIN pozwala zobaczy� jak PostgreSQL interpretuje Twoje zapytanie i kt�re indeksy s� u�ywane.

Je�li wykonujesz bardzo du�o INSERT�w, mo�e warto je wykona� za pomoc� jednego du�ego pliku u�ywaj�c polecenia COPY. Jest to du�o szybsze ni� pojedyncze INSERTy. Po drugie polecenia SQL nie zawarte w bloku okre�laj�cym transakcj� - BEGIN WORK/COMMIT, s� traktowane jako pojedyncza transakcja. Rozwa� wykonanie kilku polece�/zda� SQL w jednym bloku transakcji. To redukuje narzut nak�adany przez transakcj�. Przy du�ych zmianach w danych, warto usun�� i stworzy� na nowo indeksy.

Jest kilka opcji pozwalaj�cych na poprawienie wydajno�ci. Mo�esz wy��czy� fsync() poprzez uruchomienie postmaster'a z opcjami -o -F. To spowoduje, �e fsync() nie b�dzie zrzuca� danych na dysk po ka�dej transakcji.

Mo�esz tak�e uruchomi� postmaster'a z opcj� -B aby zwi�kszy� wielko�� pami�ci dzielonej u�ywanej przez procesy backend�w. Je�li ustawisz t� warto�� zbyt wysoko i przekroczysz limity ustawione przez kernel na pami�� dzielon�, postmaster mo�e si� nie uruchomi�. Ka�dy bufor zajmuje 8K a domy�lna ilo�� bufor�w to 64.

Mo�esz tak�e u�y� opcji -S dla backendu aby zwi�kszy� maksymaln� warto�� pami�ci u�ywan� przez proces backendu podczas sortowania. Opcja -S jest ustawiana warto�ci� podawan� w kilobajtach, domy�lna warto�� to 512K.

Mo�esz tak�e u�y� polecenia CLUSTER aby pogrupowa� dane w tabelach wg indeksu. Zobacz opis polecenia CLUSTER w manualu �eby dowiedzie� si� wi�cej.

3.7) Jakie s� mo�liwo�ci wyszukiwania b��d�w?

PostgreSQL ma kilka mo�liwo�ci na raportowanie informacji o jego statusie, kt�re mog� by� przydatne przy debugowaniu procesu.

Przede wszystkim uruchom skrypt configure z opcj� --enable-cassert, wiele funkcji assert() monitoruj� post�p procesu backend i zatrzymuj� program kiedy wydarzy si� co� nieoczekiwanego.

Zar�wno postmaster jak i postgres maj� kilka opcji do debugowania. Za ka�dym razem kiedy uruchamiasz postmaster'a, upewnij si�, �e wysy�asz standardowe wyj�cie i error do pliku z logami, np. w ten spos�b:

    cd /usr/local/pgsql
    ./bin/postmaster >server.log 2>&1 &

To utworzy plik server.log w g��wnym katalogu PostgreSQL. Ten plik zawiera po�yteczne informacje o problemach i b��dach, kt�re wydarzy�y si� podczas pracy serwera. Postmaster posiada opcj� -d, kt�ra pozwala na raportowanie bardzo szczeg�lowych informacji. Do opcji -d podajemy liczb�, kt�ra okre�la szczeg�owo�� wysy�anych informacji. Musisz mie� �wiadomo��, �e wysoki poziom logowania b�dzie powodowa� tworzenie bardzo duzych plik�w z logami.

Je�li postmaster nie zosta� uruchomiony, mo�esz uruchomi� postgres'owy backend z linii polece�, i uruchomi� Twoje polecenie SQL bezpo�rednio na nim. Taki spos�b jest polecany jedynie w przypadku debugowania. Zwr�� uwag�, �e w tym wypadku zapytanie ko�czy znak nowej linii a nie �rednik. Je�li skompilowa�e� z opcjami debugowania mozesz u�y� debuggera aby sprawdzi� co si� dzieje. Poniew� backend nie zosta� uruchomiony przez postmaster'a, nie dzia�a w identycznym �rodowisku, co oznacza �e powt�rzenie warunk�w w jakich wyst�pi�y problemy moze by� problemem.

Je�li postmaster dzia�a, uruchom psql w jednym z okien, nast�pnie znajd� PID procesu postgres u�ywanego przez psql. U�yj debuggera aby do PID'u postgres'a. Mo�esz ustawia� pu�apki (breakpoints) w debuggerze i wykonywa� zapytania z psql. Je�li debugujesz uruchamianie postgres'a, mo�esz ustawi� zmienn� PGOPTIONS="-W n", nast�pnie uruchomi� psql. Opcja ta pozwoli spowolni� uruchomienie na n sekund aby� m�g� si� po��czy� z procesem za pomoc� debugera, ustawi� jakiekolwiek pu�apki i kontynuowa� proces uruchamiania.

postgres mo�e by� uruchamiany z opcjami -s, -A i -t, kt�re mog� by� bardzo przydatne przy debuggowaniu i ocenie wydajno�ci.

Mo�esz tak�e skompilowa� z profilingiem aby zobaczy� jakie funkcje ile czasu wykonuj� si�. Pliki profilowane dla backendu zostan� umieszczone w katalogu pgsql/data/base/dbname. Pliki profilu klienta zostan� umieszczone w bie��cym katalogu klienta. Linux wymaga aby kompilowa� z opcj� -DLINUX_PROFILE aby profilowanie odbywa�o si� poprawnie.

3.8) Sk�d si� bierze komunikat: "Sorry, too many clients" podczas pr�by po��czenia si� z baz� danych?

Musisz zwi�kszy� limit ilo�ci jednoczesnych proces�w bacekendu dla procesu postmaster'a.

Domy�lny limit to 32 procesy. Mo�esz go zwi�kszy� przez restart postmaster z odpowiedni� warto�ci� ustawian� opcj� -N w pliku postgresql.conf.

We� pod uwag�, �e je�li zwi�kszysz warto�� podan� w opcji -N na wi�cej ni� 32 musisz tak�e zwi�kszy� warto�� w opcji -B ponad jej domy�ln� warto�� 64; warto�� -B musi by� co najmniej dwa razy wi�ksza od warto�ci podanej w opcji -N, a prawdopodobnie powinna by� w rzeczywisto�ci jeszcze wi�ksza dla optymalnej wydajno�ci. Dla du�ej liczby proces�w backendu na pewno zauwa�ysz, �e trzeba zwi�kszy� r�ne parametry j�dra Unixa. Rzeczy, kt�re powniene� sprawdzi� to maksymalna liczba blok�w pami�ci dzielonej, SHMMAX; maksymalna liczba semafor�w, SEMMNS oraz SEMMNI; maksymalna liczba proces�w, NPROC; maksymalna liczba proces�w na jednego u�ytkownika, MAXUPRC; i maksymalna liczba otwartych plik�w, NFILE oraz NINODE. Pow�d dla kt�rego PostgreSQL ma limit na maksymaln� liczb� proces�w backendu to obawa o wyczerpanie zasob�w systemu.

3.9) Jakie pliki znajduj� si� w pg_temp?

Katalog ten zawiera tymczasowe pliki utworzone przez executor. Dla przyk�adu, je�li jaka� operacja sortowania jest wymagana do wykonania ORDER BY, a samo sortowanie wymaga wi�cej miejsca ni� parametr backendu -S ustawi� do wykorzystania, wtedy tymczasowe pliki s� u�ywane do przechowywania tych danych.

Pliki tymczasowe powinny by� usuni�te automatycznie, ale mog�o si� to nie sta� je�li proces backendu w mi�dzyczasie nie zako�czy� si� poprawnie podczas operacji sortowania. Je�li w danym momencie nie dzia�aj� �adne procesy backend�w mozesz spokojnie usun�� pliki pg_tempNNN.NN.

3.9) Dlaczego konieczne jest przy upgradzie PostgreSQL korzystanie ze skrypt�w dump i restore?

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.

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.


Pytania dotycz�ce u�ywania

4.1) Jaka jest r�nica pomi�dzy kursorami binarnymi (binary cursors) i zwyk�ymi kursorami (normal cursors)?

Zobacz w manualu opis polecenia DECLARE.

4.2) Jak mog� pobra� za pomoc� SELECT jedynie kilka pierwszych wynik�w zapytania?

Zobacz w manualu opis polecenia FETCH lub u�yj polecenia SELECT ... LIMIT....

Nawet je�li chesz pobra� kilka pierwszych rz�d�w z wyniku zapytania, ca�e zapytanie musi zosta� wykonane. Byc mo�e powiniene� skorzysta� z polecenia ORDER BY. Je�li istnieje indeks kt�ry odpowiada polom okre�lonym przez ORDER BY, 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.

Aby otrzyma� losowy rz�d, u�yj:

    SELECT col
    FROM tab
    ORDER BY random()
    LIMIT 1;
	 

4.3) Jak mog� uzyska� list� wszystkich tabel czy innych rzeczy pod psql?

Mo�esz sprawdzi� zawarto�� �r�de� psql, a konkretnie plik pgsql/src/bin/psql/describe.c. Zawiera on polecenia SQL kt�re generuja wyniki komend z backslashem. Mo�esz tak�e uruchomi� psql z opcj� -E wtedy po wykonaniu polecenia z backslashem wy�wietlane b�dzie zapytanie, kt�re w rzeczywisto�ci jest wykonywane.

4.4) Jak usun�� kolumn� z tabeli lub zmieni� jej typ?

DROP COLUMNT zosta�o dodane w wersji 7.3 przy poleceniu ALTER TABLE DROP COLUMN. We wcze��iejszych wersjach mo�esz zrobi� tak:

	 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;

Aby zmieni� typ danych kolumny mo�esz zrobi� tak:

   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;
	

4.5) Jaki jest maksymalny rozmiar dla rz�du, tabeli i bazy danych?

Oto wszystkie ograniczenia:

    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
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.

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.

Masymalny rozmiar tabeli i maksymalna liczba kolumn mo�e by� zwi�kszona je�li zwi�kszymy domy�lny rozmiar bloku (block size) do 32k.

4.6) Jak du�o miejsca w bazie danych jest konieczne aby przechowywa� dane ze zwyczajnego pliku tekstowego?

Baza danych PostgreSQL mo�e potrzebowa� do pi�ciu razy wi�cej miejsca na przechowywanie danych z plik�w tekstowych ni� ich obj�to��.

Jako przyk�ad mo�emy rozwa�y� plik sk�adaj�cy si� z 100,000 linii zbudowanych z liczby ca�kowitej oraz opisu tekstowego w ka�dej. Za��my, �e �rednio ka�dy �a�cuch tekstu w linii zajmuje 20 bajt�w. Ca�y plik powinien zajmowa� ok. 2.8 MB. Rozmiar pliku bazy danych w PostgreSQL zawieraj�cego te dane mozna oszacowa� na oko�o 6.4MB:

    36 bajt�w: nag��wek ka�dego rz�du w przybli�eniu)
    24 bajty:  jedno pole int i jedno pole typu text
   + 4 bajty:  wka�nik na stronie do krotki
   --------------------------------------------------
    64 bajty w jednym rz�dzie

	Strona danych w PostgreSQL zajmuje 8192 bajt�w (8 KB), wi�c:

   8192 bajt�w na stron�
   ---------------------   =  128 rz�d�w na jedn� strone w bazie (zaokr�glone w d�)
     64 bajt�w na rz�d

   100000 rz�d�w danych
   -----------------------  =  782 stron w bazie danych (zaokr�glone w g�r�)
      128 rz�d�w na stron�

782 stron w bazie * 8192 bajt�w na stron�  =  6,406,144 bajt�w (6.4 MB)

Indeksy nie powoduj� du�ego narzutu na zajmowane miejsce, ale zawieraj� pewne dane, wi�c w pewnych przypadkach moga by� ca�kiem du�e.

NULLe s� przechowywane jako mapy bitowe, wi�c u�ywaj� bardzo ma�o miejsca.

4.7) Jak mog� sprawdzi� jakie tabele, klucze, bazy danych i u�ytkownicy s� utworzeni?

psql ma ca�kiem du�� ilo�� polece� z backslashem aby wydoby� takie informacje. Wprowad� \? aby zobaczy� ich spis. Istniej� tak�e tablice systemowe rozpoczynaj�ce si� od pg_, zawieraj�ce interesuj�ce Ciebie informacje. Wykonanie psql -l poka�e spis wszystkich baz danych.

Obejrzyj tak�e plik pgsql/src/tutorial/syscat.source. Zawiera on wiele z zapyta� typu SELECT, kt�re s� potrzebne aby wydoby� informacje z tablic systemowych.

4.8) Moje zapytania s� wolne lub nie u�ywaj� kluczy. Dlaczego?

Indeksy nie s� u�ywane automatycznie przez k��de z zapyta�. Ideksy s� u�ywane jedynie gdy tabela jest odpowiedniego rozmiaru, wi�kszego ni� wymagany minimalny, a zapytanie wybiera jedynie ma�y procent zawarto�ci tabeli. Wynika to z tego, �e losowy dostep do dysku powodowany przez ideksowane poszukiwanie jest czasami wolniejsze ni� poszukiwanie sekwencyjne bez u�ycia kluczy.

�eby zdecydowa� czy indeks powinien byc u�ywany, PostgreSQL musi mie� statystyki dotycz�ce danej tabeli. S� one gromadzone przez u�ycie polecenia VACUUM ANALYZE, lub poprostu ANALYZE. u�ywaj�c statystyk, optymalizator wie ile rz�d�w jest w tabeli i mo�e lepiej okre�li� czy indeksy powinny by� u�yte. Statystyki mog� by� tak�e pomocne w okre�leniu najlepszej kolejno�ci wykonania z��czenia (join) i jego sposobu. Gromadzenie statystyk powinno si� odbywa� w okre�lonych interwa�ach czasu poniewa� dane w tabelach zmieniaj� si�.

Indeksy nie s� zazwyczaj u�ywane przez ORDER BY lub przy wykonywaniu z��cze� (join). Sekwencyjne przeszukiwanie po kt�rym nast�puje sortowanie jest zazwyczaj szybsze ni� wyszukiwanie za pomoc� indeksu na du�ej tabeli.

Jakkolwiek LIMIT w po��czeniu z ORDER BY 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.

    SELECT col
    FROM tab
    ORDER BY col [ DESC ]
    LIMIT 1;					 
	

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.

Kiedy u�ywa si� operator�w dopasuj�cych takich jak LIKE lub ~, indeksy b�d� u�ywane jedynie w pewnych wypadkach:

4.9) Jak mog� sprawdzi� w jakis spos�b "query optimizer" wykonuje moje zapytanie?

Zobacz manual dla polecenia EXPLAIN.

4.10) Co to jest "R-tree index"?

Indeks R-tree jest u�ywany do indeksowania danych przestrzennych. Indeks hasuuj�cy nie nadaje si� do wyszukiwania odleg�o�ci. Natomiast indeks typu B-tree mo�e wyszukiwa� odleglo�ci jedynie w jednowymiarowych przestrzeniach. R-tree indeks radzi sobie z przestrzeniami wielo-wymiarowymi. Dla przyk�adu, je�li zostanie za�o�ony indeks typu R-tree na polu typu point, system mo�e bardziej wydajnie odpowiada� na zapytania typu "select all points within a bounding rectangle."

�r�d�owym dokumentem opisuj�cym oryginalnie projektowanie R-tree indeks�w jest:

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.

Ten dokument mo�esz znale�� tak�e w pracy Stonebraker'a "Readings in Database Systems".

Wbudowane indeksy R-trees radz� sobie w wielobokami i boxes. Teoretycznie, indeksy R-tree mog� by� rozszerzone o mo�liwo�ci indeksowania w wi�cej wymiarowych przestrzeniach. W praktyce, rozbudowa indeks�w R-tree wymaga troch� pracy, a w tej chwili nie dysponujemy jak�kolwiek dokumentacj� jak to zrobi�.

4.11) Co to jest "Genetic Query Optimizer"?

Modu� GEQO ma za zadanie przyspieszenie optymalizacji zapyta� ��cz�c wiele tabel za pomoc� algorytm�w genetycznych (Genetic Algorithm (GA)). Pozwala na u�ywanie du�ych zapyta� ��cz�cych tabele (join queries) bez wykorzystywania zasobo�ernego wyszukiwania.

4.12) 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?

Operator ~ moze by� wykorzystywany do wyszukiwania za pomoc� wyra�e� regularnych, a ~* do wyszukiwania case-insensitive z wyra�eniami regularnymi. Wariant case-insensitive dla LIKE zosta� nazwany ILIKE.

Por�wnania case-insensitive s� zazwyczaj wykonywane w nast�puj�cy spos�b:

    SELECT *
    FROM tab
    WHERE lower(col) = 'abc'
   
W tym wypadku standardowe indeksy nie b�d� u�ywane. Mo�esz utworzy� indeks funkcyjny, poprzez:
    CREATE INDEX tabindex on tab (lower(col));
   

4.13) Jak sprawdzi� w zapytaniu czy pole ma warto�� NULL?

Mo�esz to sprawdzi�, testuj�c warto�� kolumny warunkiem IS NULL albo IS NOT NULL.

4.14) Jaka jest r�nica pomi�dzy r�nymi typami tekstowymi (character types)?

Type            Nazwa wewn�trzna   Uwagi
--------------------------------------------------
VARCHAR(n)      varchar            rozmiar okre�la maksymaln� d�ugo��, nie ma tutaj wype�niania
CHAR(n)         bpchar             wype�niane pustymi znakami do podanej d�ugo�ci
TEXT            text               bez limitu na d�ugo�� �a�cucha
BYTEA           bytea              zmiennej d�ugo�ci tablica bajt�w (null-byte safe)
"char"          char            	  1 znak

Je�li b�dziesz przegl�da� katalogi systemowe lub komunikaty o b��dach cz�sto spotkasz si� z podanymi powy�ej nazwami wewn�trznymi.

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 TOAST, wi�c faktyczne zu�ycie miejsca na dysku mo�e by� mniejsze ni� oczekiwane.

VARCHAR(n) jest najodpowiedniejszy do przechowywania �a�cuch�w o r�nej d�ugo�ci ale okre�la on maksymaln� jego d�ugo��. TEXT jest najlepszy dla �a�cuch�w o dowolnej d�ugo�ci, nie przekraczaj�cej 1GB.

CHAR(n) 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. BYTEA s�u�y do przechowywania danych binarnych, w szczeg�lno�ci dla danych zawieraj�cych NULL bajty. Wszystkie typy opisane tutaj maja podobne charakterystyki je�li chodzi o wydajno��.

4.15.1) Jak mog� utworzy� pole kt�re samo zwi�ksza swoj� warto��?

PostgreSQL ma zaimplementowany typ SERIAL. Automatycznie tworzy sekwencj� i indeks na tej kolumnie. Dla przykladu:

    CREATE TABLE person ( 
        id   SERIAL, 
        name TEXT 
    );
zostanie automatycznie przt�umaczone na:
    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 );
Wi�cej informacji o sekwencjach znajdziesz w manualu o create_sequence. Mo�esz tak�e u�y� pola OID jako unikalnej warto�ci dla ka�dego rz�du danych. Je�li b�dziesz potrzebowa� z backupowa� dane robi�c dump bazy i odtworzy� j�, musisz u�yc pg_dump z opcj� -o lub polecenia COPY WITH OIDS aby zachowa� OIDy.

4.15.2) Jak pobra� warto�� pola typu SERIAL po wykonaniu insert'u?

Jednym z podej�� jest pobranie kolejnej warto�ci typu SERIAL z sekwencji za pomoc� funkcji nextval() zanim zostanie wstawiona, a p�niej nale�y jej u�y�. U�ywaj�c przyk�adu z tabeli z punktu 4.15.1, mo�e to wygl�da� w Perlu na przyk�ad w ten spos�b:

    new_id = output of "SELECT nextval('person_id_seq')"
    INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal');
B�dziesz mia� wtedy t� warto�� przechowan� w zmiennej new_id do u�ytku w innych zapytaniach (np. jako klucz obcy do tabeli person). Warto zwr�ci� uwag�, �e nazwa automatycznie utworzonej sekwencji SEQUENCE b�dzie nast�puj�ca: <tabela>_<kolumnatypuserial>_seq, gdzie tabela i kolumnatypuserial s� nazwami Twojej tabeli i Twojej kolumny typu SERIAL.

Inne rozwi�zanie to u�ycie funkcji currval() na pola typu SERIAL po dodaniu nowej warto�ci do rz�du zawieraj�cego kolumn� typu SERIAL z wstawion� domy�lnie warto�ci�, np.

    INSERT INTO person (name) VALUES ('Blaise Pascal');
    new_id = output of "SELECT currval('person_id_seq')";
Ostatecznie mo�esz u�y� OID zwracanej po wykonaniu INSERT, chocia� to jest najmniej przeno�ne rozwi�zanie. W Perlu, wykorzystuj�c bibliotek� DBI z modu�em Edmunda Mergla DBD::Pg, oid jest dost�pny poprzez $sth->{pg_oid_status} po wykonaniu $sth->execute().

4.15.3) Czy u�ycie currval() i nextval() nie doprowadzi do race condition z innymi u�ytkownikami?

Nie. currval() zwraca bie��c� warto�� przypisan� przez Tw�j backend, a nie przez wszystkich u�ytkownik�w.

4.15.4) Dlaczego numery sekwencji nie s� ponownie u�ywane przy przerwaniu transakcji? Sk�d si� bior� luki w numerowaniu kolumny tabeli sekwancjami/SERIALem?

Aby poprawi� zbie�no�� (concurrency), warto�ci sekwencji s� podawane dzia�aj�cym transakcjom kiedy tego potrzebuj� i nie s� blokowane dop�ki transakcja si� nie zako�czy. To spowoduje przerwy w numerowaniu z przerwanych transakcji.

4.16) Co to jest OID? Co to jest TID?

OID s� PostgreSQL'owym rozwi�zaniem problemu unikalnych numer�w rz�d�w. Ka�dy rz�d tworzony przez PostgreSQL otrzymuje unikalny OID. Wszystkie OIDy generowane podczas procesu uruchamianego przez skrypt initdb maj� mniejsz� warto�� ni� 16384 (na podstawie pliku backend/access/transam.h). Wszystkie OIDy tworzone przez u�ytkownika sa r�wne lub wi�ksze podanej wcze�niej warto�ci. Domy�lnie wszystkie OIDy s� unikalne nie tylko w pojedy�czej tabeli czy bazie danych ale w ca�ej instalacji PostgreSQL.

PostgreSQL u�ywa OID�w w swoim wewn�trznym systemie tabel, aby mo�na by�o je ��czy�. Te OIDy mog� byc u�ywane aby identyfikowac rz�dy w tabelach i wykorzystywa� je w z��czeniach tych tabel. Zaleca si� aby� u�ywa� typu OID aby przechowywa� warto�ci OID. Mo�esz utworzy� indeks na polu OID aby dost�p do niego by� szybszy.

OID s� przypisane do wszystkich rz�d�w z jednego g��wnego miejsca i u�ywane sa przez wszystkie bazy danych. Je�li chcia�by� zmieni� OID na co� innego, lub je�li chcia�by� zrobi� kopi� tabeli, z orginalnymi OIDami nie ma �adnego przeciwwskazania aby� to zrobi�:

        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';

OIDy s� przechowywane jako cztero-bajtowe liczby ca�kowite i sko�cz� si� po osi�gni�ciu czterech miliard�w. Nikt jak dot�d nie zg�osi� aby co� takiego si� stalo, ale mamy zamiar pozby� si� tego ograniczenia zanim kto� to zg�osi.

TID s� u�ywane aby zidentyfikowa� konkretne rz�dy z blokami i warto�ci� ofset�w. TIDy zmieniaj� si� wraz ze zmianami rz�d�w. Sa u�ywane przez indeksy, aby wskazywa� do fizycznych rz�d�w.

4.17) Jakie jest znaczenie niekt�rych termin�w w PostgreSQL?

W cz�ci kodu �r�d�owego i starszej dokumentacji u�ywamy termin�w, kt�re maj� bardziej og�lne znaczenie. Oto niekt�re z nich:

List� termin�w zwi�zanych z bazami danych mo�esz znale�� pod tym adresem:http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html.

4.18) Sk�d bierze si� ten b��d "ERROR: Memory exhausted in AllocSetAlloc()"?

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 postmaster'a:

    ulimit -d 262144
    limit datasize 256m
W zale�no�ci od shell'a jakiego u�ywasz jedno z tych polece� mo�e nie zadzia�a�, ale to ustawienie pozwoli ustawi� segment danych dla procesu znacznie wi�kszy i by� mo�e pozwoli wykona� zapytanie. To polecenie zadzia�a dla bie��cego procesu oraz wszytkich podproces�w utworzonych po wykonaniu polecenia. Je�li ten problem wyst�puje z klientem SQL, poniewa� backend zwraca zbyt du�o danych, spr�buj wykona� to polecenie przed uruchomieniem klienta.

4.19) Jak sprawdzi� jakiej wersji PostgreSQL u�ywam?

W psql, wpisz select version();

4.20) Dlaczego operacje, kt�re wykonuj� na du�ych obiektach "large-object" zwracaj� komunikat: "invalid large obj descriptor"?

Musisz u�y� BEGIN WORK i COMMIT przed i po u�yciu uchwytu do du�ego obiektu, tzn. musisz nimi otoczy� funkcje lo_open ... lo_close.

Obecnie PostgreSQL u�ywj�c "rule" zamyka uchwyt do du�ego obiektu przy ka�dym wywo�aniu "commit". Wi�c pierwsze pr�ba zrobienia czegokolwiek z uchwytem spowoduje wypisanie: invalid large obj descriptor. Kod, kt�ry do tej pory dzia�a� (przynajmniej wi�kszo�� razy) b�dzie teraz generowa� informacj� o b��dzie je�li nie b�dziesz korzysta� z transakcji.

Je�li u�ywasz interfejsu klienta jak ODBC by� mo�e b�dziesz musia� ustawi� auto-commit off.

4.21) Jak stworzy� kolumn� kt�rej domy�ln� warto�ci� b�dzie bie��cy czas?

U�yj CURRENT_TIMESTAMP:

CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );

4.22) Dlaczego zapytania u�ywaj�ce IN sa takie wolne?

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� IN przez EXISTS:

SELECT *
    FROM tab
    WHERE col IN (SELECT subcol FROM subtab)

na:
SELECT *
    FROM tab
    WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)

Aby to rozwi�zanie by�o szybkie, subcol powinna by� kolumn� indeksowan�.

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.

4.23) Jak wykona� "outer join"?

PostgreSQL ma zaimplementowane outer join wykorzystuj�c standardow� sk�adni� SQL. Poni�ej dwa przyk�ady:

    SELECT *
    FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
or
    SELECT *
    FROM t1 LEFT OUTER JOIN t2 USING (col);

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). RIGHT join doda�by niepo��czone rz�dy z tabeli t2. FULL join zwr�ci�by rz�dy plus dodatkowo wszystkie rz�dy z tabel t1 i t2. S�owo OUTER jest opcjonalne i jest dodawane domy�lnie przy LEFT, RIGHT, i FULL join'ach. Zwyk�e join'y s� nazywane INNER joins.

W poprzednich wersjach "outer joins" mog� by� zasymulowane poprzez u�ycie slowa kluczowego UNION i NOT IN. Dla przyk�adu, ��cz�c tabele tab1 i tab2, nast�puj�ce zapytanie wykonuje outer join:

    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

4.24) Jak wykonywa� zapytanie u�ywaj�ce kilku baz danych jednocze�nie?

Nie ma takiej mo�liwo�ci aby w zapytaniu odpytawa� inn� baze danych poza bie��c�. Poniewa� PostgreSQL �aduje specyficzne dla bazy danych katalogi systemowe, nie jest do ko�ca jasne jak zapytanie pomi�dzy r�nymi bazami danych powinno si� zachowywa�.

contrib/dblink 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.

4.25) Jak zwr�ci� w funkcji wiele rz�d�w lub kolumn?

Mo�esz w �atwy spos�b zwraca� wiele rz�d�w lub kolumn u�ywaj�c funkcji z: http://techdocs.postgresql.org/guides/SetReturningFunctions.

4.26) Dlaczego nie mog� w spos�b pewny tworzy�/usuwa� tabel tymczasowych w funkcjach PL/PgSQL?

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.

4.27) Jakie s� mo�liwo�ci replikacji w PostgreSQL?

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 http://gborg.PostgreSQL.org/genpage?replication_research znajduje si� ich lista. Replikacja typu multi-master jest w trakcie prac, opis projektu znajduje si� pod adresem: http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.

4.28) Jakie mo�liwo�ci szyfrowania oferuje PostgreSQL?

Rozwijanie PostgreSQL

5.1) Napisa�em w�asn� funkcj�. Kiedy u�yj� jej w psql, program zrzuca pami�� (dump core)?

Problem mo�e by� spowodowany przez bardzo wiele rzeczy. Spr�buj najpierw przetestowa� Twoj� funkcj� w samodzielnie dzia�aj�cym programie.

5.2) Jak mog� doda�/zg�osi� nowe typy czy funkcje do PostgreSQL?

Wy�lij Twoje propozycje na list� mailow� pgsql-hackers, wtedy prawdopodobnie Tw�j kod znajdzie si� w katalogu contrib/.

5.3) Jak napisa� funkcj� C zwracaj�c� krotk� (tuple)?

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 contrib/tablefunc.

5.4) Zmieni�em plik �r�d�owy. Dlaczego po rekompilacji nie wida� zmiany?

Pliki Makefiles nie maj� dorzuconych odpowiednich zale�no�ci dla plik�w nag��wkowych (include files). Wykonaj najpierw make clean, a nast�pnie ponownie make. Je�li u�ywasz GCC mo�esz u�y� opcji --enable-depend przy wykonywaniu configure aby kompilator m�g� okre�li� zale�no�ci samodzielnie.