PostgreSQL (/poːst ɡɹɛs kjuː ɛl/[1]) wielokrotnie nazywany także Postgres to, obok MySQL oraz Firebird, jeden z trzech najpopularniejszych wolnodostępnych systemów zarządzania relacyjnymi bazami danych. Oryginalnie opracowywany na Uniwersytecie Kalifornijskim w Berkeley oraz opublikowany pod nazwą Ingres. W miarę rozwoju oraz zwiększania funkcjonalności, baza danych otrzymała nazwy Postgres95 oraz ostatecznie PostgreSQL, aby upamiętnić pierwowzór oraz zaznaczyć zgodność ze standardem SQL. Aktualnie baza implementuje przeważajaca ilość standardu SQL:2008.
Przeważajaca ilość dystrybucji Linuksa zawiera pakiety umożliwiające instalację bazy PostgreSQL. Mac OS X, od wersji Lion, ma pakiety instalacyjne bazy w wersji serwerowej systemu operacyjnego, oraz narzędzia klienckie w wersji desktopowej.
PostgreSQL zalicza się do baz typu RDBMS z rozszerzeniami obiektowymi.
Nazwa projektu
Użycie liter różnej wielkość w nazwie PostgreSQL prowadzi wielokrotnie do nieporozumień. Oficjalną oraz jedyną nazwą jest PostgreSQL. Czesto używanym zdrobnieniem jest Postgres. Nazwa nawiązuje do początków projektu jako "post-Ingres".
Wielokrotnie przez początkujących użytkowników używane są nazwy niepoprawne takie jak:
- PostGre
- PostGres
- PostSQL
- PostGreSQL
Cechy
Funkcje
W samej bazie da się pisać procedury składowane w wielorakich językach programowania. Domyślnie dostępne są:
Dodatkowo da się zainstalować rozszerzenia udostępniające:
Indeksy
W PostgreSQL zaimplementowano obsługę wielu typów indeksów takich jak B-drzewo, Hash, R-drzewo oraz GiST. Indeksy posiadają dodatkowe możliwości:
- Indeksy funkcyjne, gdzie indeks jest wynikiem funkcji, a nie wartości kolumny.
- Indeksy częściowe czyli indeksy reprezentujące cząstka tabeli, potrafią zostać utworzone przez dodanie klauzuli "WHERE" na końcu CREATE INDEX.
- W razie potrzeby PostgreSQL może przeglądać indeksy od końca.
- Od wersji 8.1 możliwe jest łączenie indeksów podczas wykonywania zapytania przy użyciu tzw. bitmap indeksowych.
Istnieje też możliwość zaimplementowania własnego typu indeksu, który będzie używany przez bazę danych.
Wyzwalacze
Posiada mechanizm wyzwalaczy (ang. triggers). Wyzwalacze są uruchamiane automatycznie przed albo po operacjach takich jak UPDATE, INSERT, DELETE oraz TRUNCATE. Do widoków da się użyć mechanizmu reguł (ang. rules) by w ten sposób symulować możliwość zmieniania danych w widoku, który w PostgreSQLu jest z zasady tylko do odczytu. Od wersji 9.1 da się także tworzyć wyzwalacze na widokach.
Wyzwalacz jest mechanizmem uruchamiającym procedurę, która bywa napisana w dowolnym języku proceduralnym, który jest obsługiwany przez bazę, m.in. PL/SQL, PL/Perl, PL/Python albo PL/Tcl.
MVCC
PostgreSQL ma zaimplementowany mechanizm MVCC (Multiversion Concurrency Control) do zarządzania transakcjami. Mechanizm ten dopuszcza udostępnienie tej samej krotki więcej niż jednej transakcji. Równocześnie może istnieć przynajmniej parę wersji tej samej krotki, które nie są widoczne dla innych użytkowników do zakończenia danych transakcji. Dzięki temu baza danych wydajnie zachowuje zasadę ACID.
Reguły
Reguły są to elementy aktywne, które bywają stosowane m.in. jako rozszerzenie widoków. Za pomocą reguł da się zrealizować widoki modyfikujące, jako że reguły potrafią posiadać w definicji klauzulę INSTEAD OF co spowoduje, że robiąc zapytanie INSERT wstawiające dane do widoku, reguła zamiast tego zapytania zrobi inne, które wstawi dane do tabeli (bądź wielu tabel), z której widok odczytuje dane.
Typy danych
Rozszerzona jest definicja typów danych, o nowe typy m.in:
- typ logiczny (boolean)
- typy liczbowe
- liczby całkowitych (smallint, integer, bigint)
- liczby zmiennoprzecinkowych (real, double precision)
- liczby niecałkowite o dokładnej reprezentacji (numeric, decimal)
- typy tekstowe (text, varchar, char)
- typy binarne (bit, bit varying)
- typy do przechowywania daty oraz czasu (timestamp/time with/without timezone, date, interval)
- typ do obliczeń walutowych (money) - typ ten nie jest zalecany do użytku
- typ wyliczeniowy (enum)
- typ złożony (rekordowy)
- typ tablicowy
- typy do wyszukiwania pełnotekstowego (tsvector, tsquery)
- typy geometryczne (point, line, lseg, box, path, polygon, circle)
- typy adresów sieciowych (cidr, inet, macaddr)
- XML, obsługujący także wyrażenia XPath (od wersji 8.3)
- UUID (od wersji 8.3)
Dodatkowo użytkownicy potrafią definiować własne typy danych, które całkowicie korzystają z infrastruktury GIST PostgreSQL. Doskonałym przykładem jest zdefiniowanie typów danych geograficznych na potrzeby systemów informacji geograficznej (GIS) w module PostGIS.
Obiekty definiowane przez użytkownika
Można tworzyć przeważajaca ilość obiektów bazodanowych m.in.:
- indeksy
- operatory
- agregaty
- domeny
- rzutowania
- konwersje
Ograniczenia wielkości elementów bazy
| Nazwa ograniczenia |
Wartość |
| Maksymalny rozmiar bazy |
bez ograniczeń |
| Maksymalny rozmiar tabeli |
32 TB |
| Maksymalny rozmiar wiersza |
1,6 TB |
| Maksymalny rozmiar pola w wierszu |
1 GB |
| Maksymalna liczba wierszy w tabeli |
bez ograniczeń |
| Treść komórki |
250 - 160 (zależy od rodzaju kolumn) |
| Maksymalna liczba indeksów dla tabeli |
bez ograniczeń |
Inne cechy
Silnik ten zawiera wiele obiektowych rozszerzeń takich jak możliwość definiowania nowych typów podstawowych oraz dziedziczenia typów tablic.
Posiada zaawansowany system transakcji, dwufazowe zatwierdzanie (2PC) oraz możliwość dodawania funkcjonalności dzięki modułom zawartym w contribie.
Jednym z pierwszorzędnych celów twórców PostgreSQL jest jak największa zgodność ze standardem SQL.
PostgreSQL jest dostępny na platformy: AIX, FreeBSD, HP-UX, IRIX, Linux, Mac OS, Microsoft Windows, NetBSD, OpenBSD, Solaris oraz UnixWare.
PostgreSQL jest dostępny na licencji BSD.
Narzędzia do współpracy z bazą danych
Historia
Historia rozwoju PostgreSQL sięga 1973 roku. Wtedy to dr Michael Stonebraker wraz z Eugene Wong rozpoczęli badania nad relacyjnymi systemami baz danych. Efektem tych badań było rozpoczęcie projektu Ingres na Uniwersytecie Kalifornijskim w Berkeley, w 1977 roku. Projekt prowadzony był pod kierunkiem dr Michaela Stonebrakera, który w 1982 roku opuścił uczelnię, zakładając firmę, która zajęła się skomercjalizowanym systemem Ingres. Jednak wkrótce, w 1984 roku wrócił na uczelnię.
W 1985 roku rozpoczęto pod kierunkiem prof. Michaela Stonebrakera prace badawcze nad projektem obiektowo-relacyjnej bazy danych Postgres (post-ingres). Postgres stał się wyposażony w zaawansowany język zapytań POSTQUEL. Następnie w 1987 roku wprowadzono do Postgresa reguły, procedury, typy oraz elementy obiektowe. Projekt ten był sponsorowany przez Defense Advanced Research Projects Agency (DARPA), Army Research Office (ARO), National Science Foundation (NSF) oraz ESL, Inc. Również ten projekt stał się skomercjalizowany, nadano mu nazwę Illustra. Ostatecznie komercyjny już system Illustra wykupiła firma Informix. Firma Informix użyła system Illustra w swoim produkcie Universal Server. W przeciwieństwie do projektu Ingres, projekt Postgres był nadal udoskonalany na uniwersytecie. Wersję oznaczoną numerem 1 opublikowano w czerwcu 1989 roku. Następnie w 1990 roku była opublikowana wersja 2, w której przepisano systemem reguł. Natomiast w 1991 roku ukazała się wersja 3 zawierająca m.in. przepisany na nowo systemem reguł oraz poprawiony silnik zapytań. Ostatnią wersją projektu Postgres była wersja 4.2, która nadal bazowała na języku zapytań POSTQUEL.
Dwaj absolwenci, członkowie zespołu Stonebrakera, Andrew Yu oraz Jolly Chen w 1994 roku dodali interpreter języka SQL, zastępując język zapytań POSTQUEL. Projekt ten udostępniono na licencji BSD w maju 1995 roku jako Postgres95. Dalszą pracą nad projektem podjęła w 1996 roku społeczność Open Source, zmieniając nazwę projektu na PostgreSQL oraz tworząc organizację PostgreSQL Global Development Group do koordynacji rozwoju projektu. Zdecydowano się że nowa wersja będzie oznaczona numerem 6.0, jako następca Postgres95, którego da się oznaczyć jako wersję 5.0 systemu macierzystego Postgres.
W 2001 Command Prompt, Inc. wydaje Mammoth PostgreSQL, najstarszą istniejącą komercyjną dystrybucję PostgreSQL. Firma ta aktywnie wspiera do dnia dzisiejszego społeczność PostgreSQL przez sponsorowanie programistów oraz projektów dotyczących m.in. PL/Perl, PL/php oraz hostuje dla projektu PostgreSQL Build Farm.
Natomiast w 2005 roku PostgreSQL otrzymuje pełne wsparcie od firmy Pervasive Software, komercyjnego dostawcy rozwiązań bazodanowych. Firma ta znana jest pomiędzy innymi z produktu Betrieve, bardzo rozpowszechnionego na platformie Novell Netware. W międzyczasie zaangażowanie w projekt PostgreSQL zgłosiła kolejna firma EnterpiseDB. Firma ta zwraca wybitną uwagę na dostosowanie PostgreSQL do współpracy z aplikacjami specjalnie napisanymi dla Oracle. Natomiast firma Greenplum Inc. wspiera prace m.in. zmierzające do rozszerzenia możliwości systemu przy używaniu jako hurtownie danych, oraz wypuszcza system Bizgres bazujący na PostgreSQL.
W listopadzie 2005 roku Sun Microsystems wydał oficjalne wsparcie dla PostgreSQL.
5 grudnia, 2006 roku była wydana wersja 8.2.
Odznaczenia
Baza danych PostgreSQL jest wielokrotnie nagradzana przez użytkowników baz danych.
Pewne odznaczenia w poszczególnych latach:
- 1999 LinuxWorld Editor's Choice Award for Best Database
- 2000 Linux Journal Editors' Choice Awards for Best Database
- 2002 Linux New Media Editors Choice Award for Best Database
- 2003 Linux Journal Editors' Choice Awards for Best Database
- 2004 Linux New Media Award For Best Database
- 2004 Linux Journal Editors' Choice Awards for Best Database
- 2004 ArsTechnica Best Server Application Award
- 2005 Linux Journal Editors' Choice Awards for Best Database
- 2006 Linux Journal Editors' Choice Awards for Best Database
- 2008 Developer.com Product of the Year, Database Tool
Literatura
polska
angielska
Linki zewnętrzne
Przypisy