3 października 2019 została wydana nowa wersja najbardziej zaawansowanej na świecie bazy danych open source. PostgreSQL 12 jest teraz dostępny ze znaczącymi ulepszeniami wydajności zapytań (szczególnie w przypadku większych zestawów danych i ogólnego wykorzystania miejsca) oraz innymi ważnymi funkcjami.
W tym blogu przyjrzymy się tym nowym funkcjom i pokażemy, jak zdobyć i zainstalować nową wersję PostgreSQL 12. Omówimy również kilka kwestii, które należy wziąć pod uwagę podczas aktualizacji.
Funkcje i ulepszenia PostgreSQL 12
Zacznijmy wspominać o niektórych najważniejszych funkcjach i ulepszeniach tej nowej wersji PostgreSQL.
Indeksowanie
- Istnieje optymalizacja wykorzystania miejsca i wydajności odczytu/zapisu dla indeksów B-Tree.
- Zmniejszenie narzutu WAL na tworzenie indeksów GiST, GIN i SP-GiST.
- Możesz wykonywać zapytania K-najbliższych sąsiadów za pomocą operatora odległości (<->) przy użyciu indeksów SP-GiST.
- Odbuduj indeksy bez blokowania zapisów do indeksu za pomocą polecenia REINDEX CONCURRENTLY, co pozwala użytkownikom uniknąć scenariuszy przestojów w przypadku długotrwałych odbudowy indeksu.
Partycjonowanie
- Istnieją ulepszenia dotyczące zapytań dotyczących tabel podzielonych na partycje, szczególnie w przypadku tabel z tysiącami partycji, które potrzebują tylko pobierania danych z ograniczonego podzbioru.
- Ulepszenia wydajności dodawania danych do tabel partycjonowanych za pomocą funkcji INSERT i COPY.
- Będziesz mógł dołączyć nową partycję do tabeli bez blokowania zapytań.
SQL
- Możesz teraz uruchamiać zapytania na dokumentach JSON przy użyciu wyrażeń ścieżki JSON zdefiniowanych w standardzie SQL/JSON i mogą one wykorzystywać istniejące mechanizmy indeksowania dokumentów przechowywanych w formacie JSONB w celu wydajnego pobierania danych.
- Zapytania WITH mogą być teraz automatycznie wstawiane przez PostgreSQL 12 (jeśli nie są rekurencyjne, nie mają skutków ubocznych i są przywoływane tylko raz w późniejszej części zapytania), co z kolei może pomóc w zwiększeniu wydajności wielu istniejących zapytań.
- Wprowadza „wygenerowane kolumny”. Kolumna tego typu oblicza swoją wartość na podstawie zawartości innych kolumn w tej samej tabeli. Obsługiwane jest również przechowywanie tej obliczonej wartości.
Internacjonalizacja
- PostgreSQL 12 rozszerza swoją obsługę sortowania ICU, umożliwiając użytkownikom definiowanie „niedeterministycznego sortowania”, które może na przykład umożliwiać porównania bez uwzględniania wielkości liter lub akcentu.
Uwierzytelnianie
- Wprowadza szyfrowanie zarówno po stronie klienta, jak i serwera w celu uwierzytelniania przez interfejsy GSSAPI.
- Usługa PostgreSQL jest w stanie wykryć serwery LDAP, jeśli jest skompilowana z OpenLDAP.
- Uwierzytelnianie wieloskładnikowe, przy użyciu opcji clientcert=verify-full i dodatkowej metody uwierzytelniania skonfigurowanej w pliku pg_hba.conf.
Jeśli chcesz skorzystać z tych nowych funkcji i ulepszeń, możesz przejść do strony pobierania i pobrać ostatnią wersję PostgreSQL. Jeśli potrzebujesz konfiguracji HA, oto blog, który pokaże Ci, jak zainstalować i skonfigurować PostgreSQL dla HA.
Jak zainstalować PostgreSQL 12
W tym przykładzie użyjemy CentOS7 jako systemu operacyjnego. Dlatego musimy przejść do strony pobierania systemu operacyjnego opartego na RedHat i zainstalować odpowiednią wersję.
$ yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Zainstaluje repozytorium PostgreSQL z pakietami stabilnymi, testowymi i źródłowymi.
$ head /etc/yum.repos.d/pgdg-redhat-all.repo
# PGDG Red Hat Enterprise Linux / CentOS stable repositories:
[pgdg12]
name=PostgreSQL 12 for RHEL/CentOS $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/12/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG
...
Następnie zainstaluj pakiety klienta i serwera PostgreSQL12. Zainstaluje niektóre zależności Pythona.
$ yum install postgresql12 postgresql12-server
Teraz możesz zainicjować swoją nową bazę danych PostgreSQL 12.
$ /usr/pgsql-12/bin/postgresql-12-setup initdb
Initializing database ... OK
I włącz/uruchom usługę PostgreSQL.
$ systemctl enable postgresql-12
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-12.service to /usr/lib/systemd/system/postgresql-12.service.
$ systemctl start postgresql-12
I to wszystko. Masz już uruchomioną nową wersję PostgreSQL.
$ psql
psql (12.0)
Type "help" for help.
postgres=# select version();
version
---------------------------------------------------------------------------------------------------------
PostgreSQL 12.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
(1 row)
Teraz zainstalowałeś ostatnią wersję PostgreSQL, możesz przenieść swoje dane do tego nowego węzła bazy danych.
Aktualizacja do PostgreSQL 12
Jeśli chcesz zaktualizować swoją aktualną wersję PostgreSQL do nowej, masz trzy główne opcje, które wykonają to zadanie.
- pg_dump :Jest to logiczne narzędzie do tworzenia kopii zapasowych, które pozwala zrzucić dane i przywrócić je w nowej wersji PostgreSQL. Tutaj będziesz mieć czas przestoju, który będzie się różnić w zależności od rozmiaru danych. Musisz zatrzymać system lub uniknąć nowych danych w węźle głównym, uruchomić pg_dump, przenieść wygenerowany zrzut do nowego węzła bazy danych i przywrócić go. W tym czasie nie możesz pisać do swojej głównej bazy danych PostgreSQL, aby uniknąć niespójności danych.
- Pg_upgrade :Jest to narzędzie PostgreSQL do aktualizacji Twojej wersji PostgreSQL w miejscu. Może to być niebezpieczne w środowisku produkcyjnym i w takim przypadku nie zalecamy tej metody. Używając tej metody również będziesz miał przestój, ale prawdopodobnie będzie on znacznie krótszy niż przy użyciu poprzedniej metody pg_dump.
- Replikacja logiczna :Od czasu PostgreSQL 10 możesz używać tej metody replikacji, która pozwala na przeprowadzanie głównych aktualizacji wersji z zerowym (lub prawie zerowym) przestojem. W ten sposób można dodać węzeł zapasowy w ostatniej wersji PostgreSQL, a gdy replikacja jest aktualna, można przeprowadzić proces przełączania awaryjnego, aby promować nowy węzeł PostgreSQL.
Rozważania przed aktualizacją do PostgreSQL 12
Ogólnie rzecz biorąc, w przypadku wszystkich procesów uaktualniania i wszystkich technologii należy wziąć pod uwagę kilka punktów. Zobaczmy niektóre z głównych.
- Typy danych abstime, reltime i tinterval zostały usunięte.
- Ustawienia recovery.conf znajdują się w pliku postgresql.conf i nie są już używane. Jeśli masz ten plik utworzony, serwer się nie uruchomi. Pliki recovery.signal i standby.signal są teraz używane do przełączania w tryb inny niż podstawowy. Ustawienie trigger_file zostało zmienione na prom_trigger_file, a ustawienie standby_mode zostało usunięte.
- Wielokrotne sprzeczne specyfikacje recovery_target są niedozwolone.
- Specyfikacja „-f” do wysyłania zawartości zrzutu na standardowe wyjście jest wymagana w pg_restore.
- Maksymalna długość wpisu indeksu jest zmniejszona o osiem bajtów w indeksach B-Tree, aby poprawić obsługę zduplikowanych wpisów. Operacja REINDEX na indeksie pg_upgrade z poprzedniej wersji może się nie powieść.
- DROP IF EXISTS FUNCTION/PROCEDURE/AGGREGATE/ROUTINE generuje błąd, jeśli nie podano listy argumentów i istnieje wiele pasujących obiektów.
Aby uzyskać bardziej szczegółowe informacje na temat nowych funkcji PostgreSQL 12 i rozważenia ich przed migracją do niego, zapoznaj się z oficjalną stroną internetową z informacjami o wydaniu.