Реліз СУБД PostgreSQL 14

Після року розробки опубліковано нову стабільну гілку СУБД PostgreSQL 14. Оновлення для нової гілки виходитимуть протягом п'яти років до листопада 2026 року.

Основні нововведення:

  • Додано підтримку доступу до даних JSON за допомогою виразів, що нагадує роботу з масивами: SELECT ('{«postgres»: {«release»: 14 }}'::jsonb)['postgres']['release']; SELECT * FROM test WHERE details['attributes']['size'] = 'Medium';

    Аналогічний синтаксис реалізований і даних у форматі ключ/значення, забезпечуваних типом hstore. Подібний синтаксис спочатку реалізовано з використанням універсального фреймворку, який у майбутньому може бути задіяний і для інших типів. Приклад типу hstore: INSERT INTO mytable VALUES ('a=>b, c=>d'); SELECT h['a'] FROM mytable; UPDATE mytable SET h['c'] = 'new';

  • Сімейство типів для визначення діапазонів розширено новими типами «multirange», що дозволяють задавати впорядковані списки значень, що не перекриваються. На додаток до кожного існуючого range-типу запропонований свій multirange-тип, наприклад типу "int4range" відповідає "int4multirange", а "daterange" - "datemultirange". Застосування нових типів полегшує оформлення запитів, що маніпулюють зі складними послідовностями діапазонів. SELECT '{[3,7), [8,9)}'::int4multirange; SELECT nummultirange(numrange(1.0, 14.0), numrange(20.0, 25.0));
  • Внесено оптимізацію для підвищення продуктивності високонавантажених систем, що обробляють велику кількість сполук. У деяких тестах спостерігається дворазовий приріст продуктивності.
  • Підвищено ефективність роботи індексів B-tree та вирішено проблему з розростанням індексів при частому оновленні таблиць.
  • Додано підтримку працюючого на стороні клієнта (реалізований на рівні libpq) режиму конвеєрної (pipeline) передачі запитів, що дозволяє значно прискорити сценарії роботи з БД, пов'язані з виконанням великої кількості дрібних операцій запису (INSERT/UPDATE/DELETE) за рахунок надсилання наступного запиту не чекаючи результату попереднього. Режим також допомагає прискорити роботу з'єднання з великими затримками доставки пакетів.
  • Розширено можливості для розподілених конфігурацій, що включають декілька серверів PostgreSQL. У реалізації логічної реплікації з'явилася можливість відправлення потоковому режимі транзакцій, що у процесі виконання, що дозволяє значно підвищити продуктивність реплікації великих транзакцій. Крім того, оптимізовано логічне декодування даних, що надходять у процесі логічної реплікації.
  • У механізмі підключення зовнішніх таблиць Foreign Data Wrapper (postgres_fdw) додано підтримку паралельної обробки запитів, яка поки що застосовується лише при підключенні до інших серверів PostgreSQL. Postgres_fdw також додає підтримку додавання даних у зовнішні таблиці в пакетному режимі і можливість імпорту секціонованих таблиць через вказівку директиви «IMPORT FOREIGN SCHEMA».
  • Внесено оптимізацію в реалізацію операції VACUUM (складання сміття та упаковка дискового сховища). Додано аварійний режим очищення («emergency mode»), що пропускає несуттєві операції чищення, якщо створюються умови догляду на друге коло номерів ідентифікаторів транзакцій (transaction ID wraparound). Знижено накладні витрати при обробці індексів у форматі B-Tree. Значно прискорено виконання операції «ANALYZE, що збирає статистику роботи БД.
  • Додано можливість налаштування методу стиснення, що застосовується в системі TOAST, що відповідає за збереження великих даних, таких як текстові блоки або геометрична інформація. Крім методу стиснення pglz у TOAST тепер можна використовувати алгоритм LZ4.
  • Розширено кошти на моніторинг за роботою СУБД. Додано уявлення для відстеження прогресу виконання команд COPY (pg_stat_progress_copy), статистики про слоти реплікації (pg_stat_replication_slots) та активності, пов'язаної з WAL-логом транзакцій (pg_stat_wal). Додано функцію compute_query_id, що включає в різних підсистемах, таких як pg_stat_activity та EXPLAIN VERBOSE, відстеження запитів із присвоєнням унікального для кожного запиту ідентифікатора.
  • У планувальник запитів додано оптимізації, що покращують паралельну обробку запитів і дозволяють підняти продуктивність одночасного виконання операцій послідовного сканування записів, паралельного запуску запитів у PL/pgSQL за допомогою команди RETURN QUERY і паралельного виконання запитів REFRESH MATERIALIZED VIEW. Для підвищення продуктивності циклічних вкладених злиттів (join) реалізовано підтримку додаткового кешування.
  • Для оптимізації виразів тепер може бути використана розширена статистика, а для оптимізації віконних функцій інкрементальне сортування.
  • У процедурах, що зберігаються, що дозволяють управляти транзакціями в блоках коду, реалізована підтримка визначення даних, що повертаються за допомогою параметрів «OUT».
  • Додана функція date_bin для округлення значень з типом timestamp відповідно до заданого інтервалу. SELECT date_bin('15 minutes', TIMESTAMP '2020-02-11 15:44:17', TIMESTAMP '2001-01-01'); 2020-02-11 15:30:00
  • Додано певні у стандарті SQL вирази SEARCH і CYCLE, що спрощують упорядкування та виявлення циклів у рекурсивних узагальнених табличних виразах (Common Table Expression, CTE). WITH RECURSIVE search_tree(id, link, data) AS ( SELECT t.id, t.link, t.data FROM tree t UNION ALL SELECT t.id, t.link, t.data FROM tree t, search_tree st WHERE t. id = st.link ) SEARCH DEPTH FIRST BY ID SET ordercol SELECT * FROM search_tree ORDER BY ordercol;
  • В утиліті psql покращено автодоповнення команд табуляцією, у команді \df додано можливість показу аргументів функцій, а в команді \dX розширена виведена статистика.
  • Надано можливість призначати користувачам привілеї, які допускають лише читання або запис. Привілеї можуть бути задані у прив'язці до окремих таблиць, уявлень та схем за допомогою визначених ролей pg_read_all_data та pg_write_all_data. GRANT pg_read_all_data TO user1;
  • У нових установках за промовчанням забезпечено застосування парольної автентифікації з використанням методу SCRAM-SHA-256 замість md5 (параметр «password_encryption» при генерації postgresql.conf тепер встановлюється значення 'scram-sha-256').

Джерело: opennet.ru

Додати коментар або відгук