Ostatnia aktualizacja: Thu Apr 18 00:44:51 EDT 2002
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/faq-english.html.
Odpowiedzi na pytania dotycz�ce konkretnych system�w operacyjnych mo�na znale�� pod adresem: http://www.PostgreSQL.org/users-lounge/docs/faq.html.
IN
s� takie wolne?PostgreSQL wymawia si� Post-Gres-kju-el.
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 poni�ej jak si� przy��czy�). Ta grupa ludzi jest odpowiedzialna za ca�y rozw�j PostgreSQL.
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.
PostgreSQL obj�ty jest nast�puj�c� licencj�:
PostgreSQL Data Base Management System
Portions copyright (c) 1996-2002, 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�.
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�.
Klient
Mo�liwa jest kompilacja bibliteki C libpq C, 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 win31.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: MS Windows FAQ na naszych stronach. Nie planujemy tworzy� portu przeznaczonego docelowo dla platformy Microsoft.
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.
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 endDigesty 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 endLista 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://www.postgresql.org/users-lounge/commercial-support.html.
Ostatnia dost�pna wersja PostgreSQL to 7.2.1.
Planujemy publikowanie kolejnych wersji co cztery miesi�ce.
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/users-lounge/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://www.postgresql.org/books/. 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, aggregat�w itd.
Na naszej stronie mo�na znale�� du�o wi�cej dokumentacji.
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.
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.
Tak, bez problemu radzimy sobie z datami po roku 2000 AD, oraz przed rokiem 2000 BC.
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, maj�c pewno�� �e s� to poprawki wysokiej jako�ci.
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.
Jest kilka sposob�w oceny softwaru: mo�liwo�ci, wydajno��, stabilno��, wsparcie i cena.
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.
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�znych 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://www.pgsql.com/pg_goodies 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.
Dost�pne s� dwa driwery ODBC: PsqlODBC i OpenLink ODBC.
PsqlODBC jest do��czony do �r�de�. Wi�cej informacji na jego temat mo�esz znale�� pod adresem: ftp://ftp.PostgreSQL.org/pub/odbc/.
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 plaformie 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.
Sprawd� tak�e rozdzia� o ODBC w "Programmer's Guide".
Dobry podr�cznik dla pocz�tkuj�cych o dost�pie do bazy danych przez www mo�esz znale�� pod adresem: http://www.webreview.com
Inny znajduje si� pod adresem: http://www.phone.net/home/mwm/hotlist/.
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.
Mamy ca�kiem mi�y interfejs graficzny, kt�ry zosta� nazwany pgaccess i jest on dostarczany jako cz�� �r�de�. pgaccess posiada tak�e generator raport�w. Mo�na go znale�� pod adresem http://www.flex.ro/pgaccess
Udost�pnili�my tak�e ecpg, kt�ry jest "embedded SQL query language interface" dla j�zyka C.
Mamy wsparcie dla:
U�yj opcji --prefix podczas uruchamiania skryptu configure.
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.
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.
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.
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.
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 powodowany 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.
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.
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.
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 include/storage/sinvaladt.h.
S� to 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� paratmetr 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.
Zobacz w manualu opis polecenia DECLARE.
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.
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.
Nie mamy zaimplementowanego ALTER TABLE DROP COLUMN, ale mo�esz zrobi� tak:
SELECT ... -- wybierz zawarto�� wszystkich kolumn 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;
Oto wszystkie ograniczenia:
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 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? nieograniczonaOczywi�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 16 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.
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.
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.
�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� indeks�w poniew�z jedynie ma�a cz�c z tabeli jest zwracana.Kiedy u�ywa si� operator�w dopasuj�cych takich jak LIKE lub ~, 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 LIKE nie mog� si� zaczyna� %, a dopasowania operatorem ~ (dopasowania regularne) musz� si� zaczyna� znakiem specjalnym ^.
Zobacz manual dla polecenia EXPLAIN.
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�.
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.
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 i jest dost�pny w PostgreSQL 7.1 i p�niejszych wersjach.
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));
Mo�esz to sprawdzi�, testuj�c warto�� kolumny warunkiem IS NULL albo IS NOT NULL.
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 TEXT text bez limitu na d�ugo�� �a�cucha BYTEA bytea zmiennej d�ugo�ci tablica bajt�w (null-byte safe)
Je�li b�dziesz przegl�da� katalogi systemowe lub komunikaty o b��dach cz�sto spotkasz si� z podanymi powy�ej nazwami wewn�trznymi.
Ostatnie 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.
CHAR() jast najlepszym typem do przechowywania �a�cuch�w o tej samej d�ugo�ci. VARCHAR() 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. BYTEA s�u�y do przechowywania danych binarnych, w szczeg�lno�ci dla danych zawieraj�cych NULL bajty.
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.
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().
Nie. currval() zwraca bie��c� warto�� przypisan� przez Tw�j backend, a nie przez wszystkich u�ytkownik�w.
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.
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.
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://www.comptechnews.com/~reaster/dbdesign.html
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 ustawione limity dla pewnych zasob�w. Spr�buj wykona� nast�puj�ce polecenia zanim uruchomisz postmaster'a:
ulimit -d 262144 limit datasize 256mW 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.
W psql, wpisz select version();
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.
U�yj CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
IN
sa takie wolne?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 IN
przez
EXISTS
:
SELECT *
FROM tab
WHERE col1 IN (SELECT col2 FROM TAB2)
na:
SELECT *
FROM tab
WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
Mamy zamiar poprawi� to ograniczenie w przysz�ych wydaniach.
PostgreSQL 7.1 i p�niejsze wersje maj� zaimplementowane outer join wykorzystuj�c standardow� sk�adnie 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
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�.
Oczywi�cie klient mo�e ��czy� si� z r�nymi bazami danych i ��czy� informacj� w ten spos�b uzyskan�.
Mo�esz zwraca� zbiory z funkcji PL/pgSQL u�ywaj�c refcursors. Zobacz http://developer.postgresql.org/docs/postgres/plpgsql-cursors.html, sekcj� 23.7.3.3.
Problem mo�e by� spowodowany przez bardzo wiele rzeczy. Spr�buj najpierw przetestowa� Twoj� funkcj� w samodzielnie dzia�aj�cym programie.
Wy�lij Twoje propozycje na list� mailow� pgsql-hackers, wtedy prawdopodobnie Tw�j kod znajdzie si� w katalogu contrib/.
To wymaga wysi�ku tak olbrzymiego, �e nawet autorzy nigdy tego nie prubowali, chocia� z zalo�e� wynika, �e jest to mo�liwe.
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