Після року розробки опубліковано нову стабільну гілку СУБД PostgreSQL 15. Оновлення для нової гілки виходитимуть протягом п'яти років до листопада 2027 року.
Основні нововведення:
- Додано підтримку SQL-команди «MERGE», що нагадує вираз «INSERT … ON CONFLICT». MERGE дозволяє створювати умовні SQL-вирази, що поєднують в одному виразі операції INSERT, UPDATE та DELETE. Наприклад, за допомогою MERGE можна організувати злиття двох таблиць, вставляючи відсутні записи та оновлюючи існуючі. 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
- Значно покращено алгоритми сортування даних у пам'яті та на диску. Залежно від типу даних у тестах спостерігається підвищення швидкості сортування від 25 до 400%.
- Прискорено роботу віконних функцій з використанням row_number(), rank(), dense_rank() та count().
- Реалізовано можливість паралельного виконання запитів із виразом «SELECT DISTINCT».
- У механізмі підключення зовнішніх таблиць Foreign Data Wrapper (postgres_fdw) реалізовано підтримку асинхронних коммітів на додаток до доданої раніше можливості асинхронної обробки запитів до зовнішніх серверів.
- Додано можливість застосування алгоритмів LZ4 та Zstandard (zstd) для стиснення WAL-логів транзакцій, що при деяких навантаженнях дозволяє одночасно підвищити продуктивність та заощадити дисковий простір. Для скорочення часу відновлення після збою додано підтримку випереджального вилучення сторінок, що фігурують у WAL-лозі.
- В утиліту pg_basebackup додано підтримку стиснення файлів з резервними копіями на стороні сервера, використовуючи методи gzip, LZ4 або zstd. Надано можливість використання власних модулів для архівування, що дозволяє уникнути необхідності запуску shell-команд.
- Додано серію нових функцій для обробки рядків з використанням регулярних виразів: regexp_count(), regexp_instr(), regexp_like() та regexp_substr().
- До функції range_agg() додано можливість агрегування багатодіапазоних типів («multirange»).
- Додано режим security_invoker, який дозволяє створювати уявлення, що виконуються з правами користувача, а не творця уявлення.
- Для логічної реплікацією реалізована підтримка фільтрації рядків та завдання списків стовпців, що дозволяють на стороні відправника виділити з таблиці підмножину даних для реплікації. Крім того, в новій версії спрощено управління конфліктами, наприклад, з'явилася можливість пропуску транзакцій, що конфліктують, і автоматичного відключення підписки при виявленні помилки. За логічної реплікації дозволено використання двофазних коммітів (2PC).
- Доданий новий формат логів - jsonlog, що зберігає інформацію в структурованому вигляді, використовуючи формат JSON.
- Адміністратору надано можливість делегування користувачам окремих повноважень зміни певних параметрів конфігурації сервера PostgreSQL.
- В утиліту psql додана підтримка пошуку інформації про налаштування (pg_settings) за допомогою команди \dconfig.
- Забезпечено використання пам'яті, що розділяється, для накопичення статистики про роботу сервера, що дозволило позбутися окремого процесу збору статистики та періодичного скидання стану на диск.
- Надано можливість використання за умовчанням ICU локалів «ICU Collation», раніше як локаль за замовчуванням можна було використовувати лише локалі libc.
- Запропоновано вбудоване розширення pg_walinspect, що дозволяє перевіряти вміст файлів з WAL-логами за допомогою SQL-запитів.
- Для схеми public у всіх користувачів, за винятком власника БД, здійснено відкликання повноважень на виконання команди CREATE.
- У PL/Python видалено підтримку Python 2. Видалено застарілий ексклюзивний режим резервного копіювання («exclusive backup»).
Додаток: З 19 до 00 (MSK) відбудеться вебінар-обговорення змін нової версії з Павлом Лузановим (Postgres Professional). Для тих, хто не зможе приєднатися до ефіру, відкрито запис червневої доповіді Павла «PostgreSQL 20: MERGE і не тільки» на PGConf.Russia.
Джерело: opennet.ru