PostgreSQL
![]() Logo programu | |
![]() | |
Autor | PostgreSQL Global Development Group |
---|---|
Pierwsze wydanie | 1995-05-01T00:00:00.001 1 maja 1995(dts) |
Aktualna wersja stabilna | 16.4 (8 sierpnia 2024) [±] |
Aktualna wersja testowa | 17 beta 3 (8 sierpnia 2024) [±] |
Język programowania | C |
Platforma sprzętowa | x86, x86_64, IA64, PowerPC, PowerPC 64, S/390, S/390x, SPARC, SPARC64, ARM, MIPS, MIPSEL, and PA-RISC |
System operacyjny | FreeBSD, OS X, Linux, Windows, UNIX (AIX, BSD, HP-UX, SGI IRIX, Solaris, Tru64) |
Rodzaj | relacyjny system baz danych |
Licencja | Licencja PostgreSQL |
Strona internetowa |
PostgreSQL (/poːstɡɹ ɛs kjuː ɛl/[1]), także Postgres – obok MySQL i SQLite, jeden z najpopularniejszych[2][3] otwartych systemów zarządzania relacyjnymi bazami danych. Początkowo opracowywany na Uniwersytecie Kalifornijskim w Berkeley i opublikowany pod nazwą Ingres. W miarę rozwoju i zwiększania funkcjonalności, baza danych otrzymała nazwy Postgres95 i ostatecznie PostgreSQL, aby upamiętnić pierwowzór oraz zaznaczyć zgodność ze standardem SQL. Aktualnie baza implementuje większość standardu SQL:2016[4].
Większość dystrybucji Linuksa zawiera pakiety umożliwiające instalację bazy PostgreSQL. MacOS, od wersji Lion, posiada 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ści w nazwie PostgreSQL prowadzi często do nieporozumień. Oficjalną i jedyną nazwą jest PostgreSQL. Często używanym zdrobnieniem jest Postgres. Nazwa nawiązuje do początków projektu jako „post-Ingres”.
Platformy
Systemy operacyjne
PostgreSQL działa na następujących systemach operacyjnych: Linux (wszystkie niedawne dystrybucje), Windows (Win2000 SP4 i późniejszy), FreeBSD, OpenBSD, NetBSD, macOS, AIX, BSD/OS, HP-UX, IRIX, OpenIndiana, OpenSolaris, SCO OpenServer, SCO UnixWare, Solaris i Tru64 Unix.
W 2012 r. wsparcie dla następujących systemów zostało usunięte[5]: DG/UX, NeXTSTEP, SunOS 4, SVR4, Ultrix 4 oraz Univel.
W większości pozostałych systemów Uniksowych i uniksopodobnych również powinna działać[6].
Architektury
PostgreSQL działa na architekturach sprzętowych takich jak: x86, x86-64, IA64 Itanium, PowerPC, PowerPC 64, S/390, S/390x, SPARC, SPARC 64, Alpha, ARM, MIPS, MIPSel, M68k, PA-RISC, M32R, NS32k i VAX. Dodatkowo można zbudować PostgreSQLa dla niewspieranych procesorów poprzez wyłączenie spinlocków[6].
Cechy
Funkcje
W samej bazie można pisać procedury składowane w różnych językach programowania. Domyślnie dostępne są:
- PL/pgSQL, podobny do proceduralnego języka PL/SQL w bazie Oracle;
- PL/Python;
- PL/Perl;
- PL/Tcl;
- język SQL (procedura to ciąg parametryzowanych instrukcji SQL).
Dodatkowo można zainstalować rozszerzenia udostępniające:
- języki skryptowe: PL/Lua, plPHP, PL/Ruby, PL/sh, PL/Scheme, PL/LOLCODE;
- języki kompilowane: C, C++ oraz Java (jako PL/Java);
- język statystyczny R jako PL/R.
Indeksy
W PostgreSQL zaimplementowano obsługę wielu typów indeksów[7], do których należą:
- B-drzewo,
- Hash, używany tylko przy korzystaniu z operatora =,
- GiST, obsługuje różne strategie indeksowania dla różnych danych np. zamiennik indeksu R-drzewo dla danych geometrycznych,
- SP-GiST,
- BRIN,
- GIN, stosowany do indeksowania wielu danych przetrzymywanych w jednej kolumnie[8].
Indeksy można utworzyć zarówno na kolumnie, lub kolumnach tabeli, jak i widoku zmaterializowanego. 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ęść tabeli, mogą zostać utworzone przez dodanie klauzuli „WHERE” na końcu CREATE INDEX.
- Ustawienie kolejności sortowania wartości w indeksie malejąco (DESC), lub rosnąco (ASC).
- W razie potrzeby PostgreSQL może przeglądać indeksy od końca.
- Określenie położenia wartości NULL – na początku (FIRST) lub końcu indeksu (LAST).
- Współbieżne budowanie[9] i usuwanie[10] indeksu.
- Od wersji 8.1 możliwe jest łączenie indeksów podczas wykonywania zapytania przy użyciu tzw. bitmap indeksowych.
- Od wersji 9.2 możliwe są index-only scany, dzięki temu baza wykonując zapytanie może korzystać tylko z indeksu i z niego wyciągnąć wszystkie dane potrzebne do zwrócenia. Umożliwia to szybsze zapytania, bo nie trzeba przeszukiwać pliku z danymi, a pliki z indeksami są przeważnie znacznie mniejsze.
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 lub po operacjach takich jak UPDATE, INSERT, DELETE i TRUNCATE. Do widoków można użyć mechanizmu reguł (ang. rules) by w ten sposób symulować możliwość zmieniania danych w widoku, który w PostgreSQL-u jest z zasady tylko do odczytu. Od wersji 9.1 można także tworzyć wyzwalacze na widokach.
Od wersji 9.3 możliwe jest tworzenie tzw. event triggers, wyzwalaczy reagujących na instrukcje DDL, m.in. CREATE TABLE, CREATE INDEX, CREATE FUNCTION[11].
Wyzwalacz jest mechanizmem uruchamiającym procedurę, która może być napisana w dowolnym języku proceduralnym, który jest obsługiwany przez bazę, m.in. PL/SQL, PL/Perl, PL/Python lub PL/Tcl.
MVCC
PostgreSQL ma zaimplementowany mechanizm MVCC (Multiversion Concurrency Control) do zarządzania transakcjami. Mechanizm ten umożliwia udostępnienie tej samej krotki więcej niż jednej transakcji. Równocześnie może istnieć przynajmniej kilka 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 mogą być stosowane m.in. jako rozszerzenie widoków. Za pomocą reguł można zrealizować widoki modyfikujące, jako że reguły mogą mieć 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, character alias char, character varying alias varchar)[12]
- typy binarne (bit, bit varying)
- typy do przechowywania daty i 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 również wyrażenia XPath (od wersji 8.3)
- UUID (od wersji 8.3)
- JSON (od wersji 9.2)
- typy zakresowe (Range Type) (od wersji 9.2)
Dodatkowo użytkownicy mogą definiować własne typy danych[13], 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ć większość obiektów bazodanowych m.in.:
- rzutowania
- konwersje typów
- typy danych
- domeny
- funkcje, włączając w to funkcje agregujące
- indeksy, włączając w to indeksy dla definiowanych typów danych
- operatory, istniejące mogę być nadpisane
- języki proceduralne
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ń |
Maksymalna liczba kolumn w tabeli | 250 – 1600 (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 i dziedziczenia typów tablic.
Posiada zaawansowany system transakcji, dwufazowe zatwierdzanie (2PC) i możliwość dodawania funkcjonalności m.in. dzięki modułom zawartym w zbiorze „contrib”.
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 i UnixWare.
PostgreSQL jest dostępny na licencji Postgresql, podobnej do licencji BSD oraz licencji MIT
Narzędzia do współpracy z bazą danych
- pgAdmin
- phpPgAdmin – administracja za pomocą przeglądarki internetowej
- psql
- DBeaver
- TOra
- EMS SQL Manager for PostgreSQL Freeware
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 został wyposażony w zaawansowany język zapytań POSTQUEL. Następnie w 1987 roku wprowadzono do Postgresa reguły, procedury, typy i elementy obiektowe. Projekt ten był sponsorowany przez Defense Advanced Research Projects Agency (DARPA), Army Research Office (ARO), National Science Foundation (NSF) i ESL, Inc. Również ten projekt został 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 została opublikowana wersja 2, w której przepisano system reguł. Natomiast w 1991 roku ukazała się wersja 3 zawierająca m.in. przepisany na nowo systemem reguł i 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 i 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 i 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 można oznaczyć jako wersję 5.0 systemu macierzystego Postgres.
W 2001 firma Command Prompt, Inc. wydała Mammoth PostgreSQL, najstarszą istniejącą komercyjną dystrybucję PostgreSQL. Firma ta aktywnie wspiera do dnia dzisiejszego społeczność PostgreSQL przez sponsorowanie programistów i projektów dotyczących m.in. PL/Perl, PL/php oraz hostuje dla projektu PostgreSQL Build Farm.
W roku 2005 PostgreSQL otrzymał pełne wsparcie od firmy Pervasive Software, komercyjnego dostawcy rozwiązań bazodanowych, znanego m.in. z produktu Btrieve, bardzo rozpowszechnionego na platformie Novell Netware. W międzyczasie zaangażowanie w projekt PostgreSQL zgłosiła kolejna firma, EnterpiseDB. Firma ta zwracała szczególną uwagę na dostosowanie PostgreSQL do współpracy z aplikacjami specjalnie napisanymi dla Oracle. Natomiast firma Greenplum Inc. wspierała prace m.in. zmierzające do rozszerzenia możliwości systemu przy używaniu jako hurtownie danych, oraz wypuściła system Bizgres bazujący na PostgreSQL.
W listopadzie 2005 roku Sun Microsystems ogłosił oficjalne wsparcie dla PostgreSQL.
Znaczący użytkownicy
- BASF, platforma zakupowa portalu agrobiznesowego[14]
- Międzynarodowa Stacja Kosmiczna, do gromadzenia danych z orbity, następnie replikowania jej na Ziemi[15]
- OpenStreetMap, projekt społecznościowy udostępniający darmową, edytowalną mapę całego świata[16]
- Reddit, serwis internetowy zawierający informacje dodawane przez użytkowników[17]
- Skype, komunikator internetowy, główna baza danych[18]
Nagrody i wyróżnienia
Baza danych PostgreSQL jest często nagradzana przez użytkowników baz danych.
Niektóre wyróżnienia 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
- 2012 Linux New Media Award for Best Open Source Database[19]
Przypisy
- ↑ przykład dźwiękowy, 5,6 kB MP3.
- ↑ Most popular database management systems 2022 [online], Statista [dostęp 2022-01-30] (ang.).
- ↑ DB-Engines Ranking [online], DB-Engines [dostęp 2022-01-30] (ang.).
- ↑ PostgreSQL: About [online], www.postgresql.org [dostęp 2022-01-30] .
- ↑ git.postgresql.org Git – postgresql.git/commitdiff [online], git.postgresql.org [dostęp 2017-11-26] (ang.).
- ↑ a b PostgreSQL: Documentation: 10: 16.6. Supported Platforms [online], www.postgresql.org [dostęp 2017-11-26] (ang.).
- ↑ Chapter 11. Indexes [online], PostgreSQL Documentation, 11 listopada 2021 [dostęp 2022-01-30] (ang.).
- ↑ The PostgreSQL Global Development Group: Create index. [dostęp 2013-11-09]. (ang.).
- ↑ The PostgreSQL Global Development Group: Building Indexes Concurrently. [dostęp 2013-11-09]. (ang.).
- ↑ The PostgreSQL Global Development Group: Drop Index. [dostęp 2013-11-09]. (ang.).
- ↑ The PostgreSQL Global Development Group: Event Trigger Firing Matrix. [dostęp 2013-12-29]. (ang.).
- ↑ Character Types. PostgreSQL Documentation. [dostęp 2013-07-30]. (ang.).
- ↑ Heikki Linnakangas: Writing a user-defined datatype. 2013-10-30. [dostęp 2013-11-09]. (ang.).
- ↑ Web Commerce Group: A Web Commerce Group Case Study on PostgreSQL. 2002-07-17. [dostęp 2018-08-16]. (ang.).
- ↑ Duncavage, Daniel: NASA needs Postgres – Nagios help. 2010-07-13. [dostęp 2018-08-16]. (ang.).
- ↑ Database. [dostęp 2018-08-16]. (ang.).
- ↑ Web Commerce Group: Architecture Overview. 2015-04-01. [dostęp 2018-08-16]. (ang.).
- ↑ Asko Oja: Database Tools by Skype. [dostęp 2018-08-16]. (ang.).
- ↑ Cebit 2012: Android, Libre Office und Samsung streichen Preise ein. www.linux-magazin.de, 2012-03-09. [dostęp 2012-03-09]. (niem.).
Bibliografia
polska
- „Bazy danych i PostgreSQL od podstaw” (Richard Stones, Neil Matthew). ISBN 83-7197-650-X.
- BruceB. Momjian BruceB., PostgreSQL, HenrykH. Westwalewicz, Wrocław: Robomatic, [cop. 2001], ISBN 83-87150-22-3, OCLC 749380251 .
- „PostgreSQL” Wydanie II (Zdzisław Dybikowski). ISBN 978-83-246-3068-4.
- „PostgreSQL, Praktyczny przewodnik” (John C. Worsley, Joshua D. Drake). ISBN 83-7197-754-9.
- „PostgreSQL: receptury dla administratora” (Simon Riggs, Hannu Krosing). ISBN 978-83-246-3061-5.
- GregoryG. Smith GregoryG., Wysoko wydajny PostgreSQL 9.0, RobertR. Górczyński (tłum.), Gliwice: Wydawnictwo Helion, 2011, ISBN 978-83-246-3062-2, OCLC 802762864 .
anglojęzyczna
PostgreSQL 9.1 – 9.2
- „PostgreSQL: Up and Running” (Regina Obe, Leo Hsu). ISBN 1-4493-2633-1.
PostgreSQL 9
- „PostgreSQL 9 Administration Cookbook” (Simon Riggs, Hannu Krosing). ISBN 1-84951-028-8.
- „PostgreSQL 9 High Performance” (Greg Smith). ISBN 1-84951-030-X.
PostgreSQL 8
- „Beginning PHP and PostgreSQL 8: From Novice to Professional” (W. Jason Gilmore, Robert Treat). ISBN 1-59059-547-5.
- KorryK. Douglas KorryK., PostgreSQL, Second edition, Indianapolis, Indiana, ISBN 0-672-32756-2, OCLC 61524548 .
- „Beginning Databases with PostgreSQL, Second Edition” (Neil Matthew, Richard Stones). ISBN 1-59059-478-9.
PostgreSQL 7
- „Practical PostgreSQL” (John C. Worsley, Joshua D. Drake). ISBN 1-56592-846-6 (także dostępna online)
Linki zewnętrzne
- Strona domowa PostgreSQL
- PostgreSQL Wiki
- Dokumentacja do stabilnych wersji PostgreSQL
- Dokumentacja do wersji deweloperskiej (aktualnie rozwijanej) PostgreSQL
- Old Planet PostgreSQL – stara strona agregująca blogi o PostgreSQLu (do 4 stycznia 2011)
- Planet PostgreSQL – nowa strona agregująca blogi o PostgreSQLu (od 4 stycznia 2011)
- Polska strona projektu – ostatnia aktualizacja 4 lutego 2008
- Catalana: 0518474