Po roku prac rozwoju opublikowano nową stabilną wersję bazy danych PostgreSQL 15. Aktualizacje dla nowej wersji będą wydawane przez pięć lat do listopada 2027 roku.
Główne nowości:
- Dodano wsparcie dla komendy SQL „MERGE”, przypominającej wyrażenie „INSERT … ON CONFLICT”. MERGE umożliwia tworzenie warunkowych wyrażeń SQL, łączących w jednym wyrażeniu operacje INSERT, UPDATE i DELETE. Na przykład, za pomocą MERGE można zrealizować scalanie dwóch tabel, wstawiając brakujące rekordy i aktualizując istniejące. MERGE INTO customer_account ca USING recent_transactions t ON t.customer_id = ca.customer_id WHEN MATCHED THEN UPDATE SET balance = balance + transaction_value WHEN NOT MATCHED THEN INSERT (customer_id, balance) VALUES (t.customer_id, t.transaction_value);
- Znacząco poprawiono algorytmy sortowania danych w pamięci i na dysku. W zależności od rodzaju danych w testach zauważono wzrost prędkości sortowania od 25% do 400%.
- Przyspieszono działanie funkcji okienkowych przy użyciu row_number(), rank(), dense_rank() oraz count().
- Zrealizowano możliwość równoległego wykonywania zapytań z wyrażeniem „SELECT DISTINCT”.
- W mechanizmie podłączania zewnętrznych tabel Foreign Data Wrapper (postgres_fdw) wprowadzono wsparcie dla asynchronicznych commitów, oprócz wcześniej dodanej możliwości asynchronicznego przetwarzania zapytań do zewnętrznych serwerów.
- Dodano możliwość zastosowania algorytmów LZ4 i Zstandard (zstd) do kompresji dzienników WAL transakcji, co przy niektórych obciążeniach pozwala jednocześnie zwiększyć wydajność i zaoszczędzić przestrzeń dyskową. W celu skrócenia czasu przywracania po awarii dodano wsparcie dla wstępnego pobierania stron, pojawiających się w dzienniku WAL.
- Do narzędzia pg_basebackup dodano wsparcie dla kompresji plików z kopiami zapasowymi po stronie serwera, wykorzystując metody gzip, LZ4 lub zstd. Zapewniono możliwość użycia własnych modułów do archiwizowania, co pozwala na obejście konieczności uruchamiania poleceń powłoki.
- Dodano serię nowych funkcji do przetwarzania ciągów z użyciem wyrażeń regularnych: regexp_count(), regexp_instr(), regexp_like() oraz regexp_substr().
- Do funkcji range_agg() dodano możliwość agregowania typów wielozakresowych („multirange”).
- Dodano tryb security_invoker, umożliwiający tworzenie widoków, które są wykonywane z prawami użytkownika wywołującego, a nie twórcy widoku.
- W przypadku replikacji logicznej wprowadzono wsparcie dla filtrowania wierszy oraz definiowania list kolumn, co pozwala na wyodrębnienie części danych z tabeli do replikacji po stronie nadawcy. Ponadto, w nowej wersji uproszczono zarządzanie konfliktami, na przykład wprowadzono możliwość pomijania konfliktujących transakcji oraz automatycznego wyłączania subskrypcji w przypadku wykrycia błędu. Przy replikacji logicznej dozwolone jest stosowanie dwuetapowych commitów (2PC).
- Dodano nowy format logów — jsonlog, przechowujący informacje w ustrukturyzowanej formie, wykorzystując format JSON.
- Administrator otrzymał możliwość delegowania użytkownikom określonych uprawnień do zmiany niektórych parametrów. konfiguracji serwera PostgreSQL.
- Do narzędzia psql dodano wsparcie dla wyszukiwania informacji o ustawieniach (pg_settings) za pomocą polecenia „\dconfig”.
- Zapewniono wykorzystanie pamięci dzielonej do gromadzenia statystyk o działaniu serwera, co pozwoliło na rezygnację z osobnego procesu zbierania statystyk oraz okresowego zapisywania stanu na dysku.
- Dodano możliwość stosowania domyślnych lokalizacji ICU „ICU Collation”; wcześniej jako domyślną lokalizację można było używać tylko lokalizacji libc.
- Wprowadzono wbudowane rozszerzenie pg_walinspect, umożliwiające inspekcję zawartości plików z logami WAL za pomocą zapytań SQL.
- Dla schemy publicznej wszyscy użytkownicy, z wyjątkiem właściciela bazy danych, otrzymali cofnięcie uprawnień do wykonywania polecenia CREATE.
- W PL/Python usunięto wsparcie dla Pythona 2. Usunięty został przestarzały tryb ekskluzywnej kopii zapasowej („exclusive backup”).
Dodatkowo: od 19:00 do 20:00 (MSK) odbędzie się webinarium dotyczące zmian w nowej wersji z Pawłem Luzanowem (Postgres Professional). Dla tych, którzy nie będą mogli dołączyć do transmisji na żywo, dostępne jest nagranie czerwcowego wykładu Pawła „PostgreSQL 15: MERGE i nie tylko” na PGConf.Russia.
Źródło: opennet.ru
