Wersja PostgreSQL 14 DBMS

Po roku rozwoju opublikowano nową stabilną gałąź systemu DBMS PostgreSQL 14. Aktualizacje dla nowej gałęzi będą wydawane w ciągu pięciu lat, do listopada 2026 r.

Główne innowacje:

  • Dodano obsługę dostępu do danych JSON przy użyciu wyrażeń tablicowych: SELECT ('{ "postgres": { "release": 14 }}'::jsonb)['postgres']['release']; WYBIERZ * Z testu GDZIE szczegóły['atrybuty']['rozmiar'] = '"średni"';

    Podobna składnia jest zaimplementowana dla danych klucza/wartości dostarczanych przez typ hstore. Składnia ta została początkowo zaimplementowana przy użyciu uniwersalnego frameworka, który w przyszłości może zostać wykorzystany dla innych typów. Przykład dla typu hstore: INSERT INTO mytable VALUES ('a=>b, c=>d'); WYBIERZ h['a'] Z mojejtabeli; UPDATE mytable SET h['c'] = 'nowy';

  • Rodzina typów służących do definiowania zakresów została rozszerzona o nowe typy „wielozakresowe”, które pozwalają na określenie uporządkowanych list nienakładających się na siebie zakresów wartości. Oprócz każdego istniejącego typu zakresu proponowany jest jego własny typ wielozakresowy, na przykład typ „int4range” odpowiada „int4multirange”, a typ „daterange” odpowiada „datemultirange”. Zastosowanie nowych typów upraszcza projektowanie zapytań manipulujących złożonymi sekwencjami zakresów. WYBIERZ '{[3,7), [8,9)}'::int4multirange; WYBIERZ nummultirange(liczbazakres(1.0; 14.0), liczbazakres(20.0, 25.0));
  • Wprowadzono optymalizacje mające na celu poprawę wydajności systemów o dużym obciążeniu, przetwarzających dużą liczbę połączeń. W niektórych testach obserwuje się dwukrotny wzrost wydajności.
  • Poprawiono wydajność indeksów B-drzewa i rozwiązano problem wzrostu indeksu podczas częstej aktualizacji tabel.
  • Dodano obsługę po stronie klienta (zaimplementowanej na poziomie libpq) trybu potokowego przesyłania żądań, co pozwala znacząco przyspieszyć scenariusze bazodanowe związane z wykonywaniem dużej liczby małych operacji zapisu (INSERT/UPDATE/DELETE) poprzez wysłanie następne żądanie bez czekania na wynik poprzedniego. Tryb pomaga także przyspieszyć pracę na połączeniach z dużymi opóźnieniami w dostarczaniu pakietów.
  • Zwiększone możliwości konfiguracji rozproszonych obejmujących wiele serwerów PostgreSQL. Przy wdrażaniu replikacji logicznej możliwe stało się obecnie przesyłanie w trybie strumieniowym transakcji będących w trakcie realizacji, co może znacznie poprawić wydajność replikacji dużych transakcji. Dodatkowo zoptymalizowano logiczne dekodowanie danych odbieranych podczas replikacji logicznej.
  • W mechanizmie łączenia tabel zewnętrznych Foreign Data Wrapper (postgres_fdw) dodano obsługę równoległego przetwarzania zapytań, która obecnie ma zastosowanie tylko przy łączeniu się z innymi serwerami PostgreSQL. postgres_fdw dodaje także obsługę dodawania danych do tabel zewnętrznych w trybie wsadowym oraz możliwość importowania tabel partycjonowanych poprzez określenie dyrektywy „IMPORT FOREIGN SCHEMA”.
  • Wprowadzono optymalizację w implementacji operacji VACUUM (zbieranie śmieci i pakowanie pamięci dyskowej). Dodano awaryjny tryb czyszczenia, który pomija nieistotne operacje czyszczenia, jeśli zostaną utworzone warunki zawijania identyfikatora transakcji. Zmniejszone obciążenie podczas przetwarzania indeksów w formacie B-Tree. Znacznie przyspieszono realizację operacji „ANALIZA”, która zbiera statystyki dotyczące działania bazy danych.
  • Dodano możliwość konfiguracji metody kompresji stosowanej w systemie TOAST, który odpowiada za przechowywanie dużych danych, takich jak bloki tekstu czy informacje geometryczne. Oprócz metody kompresji pglz, TOAST może teraz używać algorytmu LZ4.
  • Rozszerzono narzędzia do monitorowania pracy SZBD. Dodano widoki umożliwiające śledzenie postępu poleceń COPY (pg_stat_progress_copy), statystyki dotyczące slotów replikacji (pg_stat_replication_slots) oraz aktywności związanej z dziennikiem transakcji WAL (pg_stat_wal). Dodano funkcję compute_query_id, która umożliwia różnym podsystemom, takim jak pg_stat_activity i EXPLAIN VERBOSE, śledzenie żądań poprzez przypisanie unikalnego identyfikatora każdemu żądaniu.
  • Do planera zapytań dodano optymalizacje w celu usprawnienia równoległego przetwarzania zapytań i poprawy wydajności jednoczesnego wykonywania operacji sekwencyjnego skanowania rekordów, równoległego wykonywania zapytań w PL/pgSQL przy użyciu polecenia „RETURN QUERY” oraz równoległego wykonywania zapytań w „ ODŚWIEŻONY, ZMATERIALIZOWANY WIDOK”. Aby poprawić wydajność cyklicznych zagnieżdżonych łączeń (łączenie), zaimplementowano obsługę dodatkowego buforowania.
  • Zaawansowane statystyki można teraz wykorzystać do optymalizacji wyrażeń, a sortowanie przyrostowe można teraz wykorzystać do optymalizacji funkcji okna.
  • Procedury składowane, które pozwalają zarządzać transakcjami w blokach kodu, obsługują teraz definiowanie zwracanych danych za pomocą parametrów „OUT”.
  • Dodano funkcję date_bin umożliwiającą zaokrąglanie wartości znaczników czasu według określonego przedziału. WYBIERZ date_bin('15 minut', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01'); 2020-02-11 15:30:00
  • Dodano wyrażenia SEARCH i CYCLE zdefiniowane w standardzie SQL, aby ułatwić porządkowanie i identyfikację cykli w rekurencyjnych wspólnych wyrażeniach tabelowych (CTE). Z REKURSNYM search_tree(id, link, data) AS ( WYBIERZ t.id, t.link, t.data Z drzewa t UNION ALL WYBIERZ t.id, t.link, t.data Z drzewa t, search_tree st GDZIE t. id = st.link ) WYSZUKAJ GŁĘBOKOŚĆ NAJPIERW PRZEZ id SET Ordercol WYBIERZ * Z drzewa wyszukiwania ZAMÓW PRZEZ Ordercol;
  • W narzędziu psql poprawiono autouzupełnianie poleceń tabulatorami, dodano możliwość wyświetlania argumentów funkcji do polecenia „\df”, a wyświetlane statystyki rozszerzono do polecenia „\dX”.
  • Użytkownikom można nadawać uprawnienia tylko do odczytu lub tylko do zapisu. Uprawnienia można ustawić dla poszczególnych tabel, widoków i schematów przy użyciu predefiniowanych ról pg_read_all_data i pg_write_all_data. PRZYZNAJ pg_read_all_data TO użytkownik1;
  • Nowe instalacje domyślnie korzystają z uwierzytelniania hasłem przy użyciu SCRAM-SHA-256 zamiast md5 (parametr „password_encryption” podczas generowania pliku postgresql.conf jest teraz ustawiony na „scram-sha-256”).

Źródło: opennet.ru

Dodaj komentarz