След една година разработка е публикувана новата стабилна версия на СУБД PostgreSQL 17. Актуализациите за новата версия ще излизат през следващите пет години до ноември 2029 година. Поддръжката на PostgreSQL 12.x, най-старата от поддържаните версии, ще бъде прекратена на 14 ноември.
Основни нововъведения:
- При изпълнението на операцията VACUUM (събиране на боклук, почистване и опаковане на дисковото хранилище) е внедрена нова структура от данни, която изразходва до 20 пъти по-малко памет. Преминаването към новата структура е позволило ускоряване на операцията VACUUM и намаляване на потреблението на споделени ресурси.
- Продължава оптимизацията на производителността на входно/изходните операции. Благодарение на подобрението в кода за обработка на логовете на отложеното записване WAL, успяхме да увеличим до два пъти пропускателната способност на записните операции в системи с голям брой едновременни заявки. Предлага се нов интерфейс за потоков вход/изход, който е подобрил скоростта на последователно сканиране на данни в таблиците и е ускорил обновяването на статистиките за планировчика на заявки след изпълнението на операция ANALYZE.
- Повишена е производителността на заявките с израза „IN“, когато в тях се използват индекси на базата на структурата B-tree. Реализирана е възможността за паралелно изграждане на индекси BRIN (Block Range Index). В планировчика на заявки са оптимизирани проверките за „NOT NULL“ и е ускорена обработката на общи таблични изрази (Common Table Expression, CTE), дефинирани с SQL команди „WITH“. Осигурено е използването на инструкции за векторни процесори (SIMD) за ускоряване на определени изчисления, например, за ускоряване на функцията bit_count са използвани инструкции AVX-512.
- Реализирана е поддръжка на нови възможности за работа с формата JSON, определени в стандарта SQL/JSON. Добавена е функция JSON-TABLE за преобразуване на данни от формата JSON в обикновени таблици на PostgreSQL, както и нови оператори jsonpath за преобразуване на JSON данни в родни на PostgreSQL типове данни. Предложени са нови функции за създаване (JSON, JSON_SCALAR и JSON_SERIALIZE) и заявка (JSON_EXISTS, JSON_QUERY и JSON_VALUE) на данни в JSON формат.
- Разширени възможности на SQL командата «MERGE», позволяваща създаване на условни SQL изрази, които обединяват в едно изречение операциите INSERT, UPDATE и DELETE. Добавена е поддръжка на израза RETURNING, който позволява изчисляване и връщане на стойности на базата на добавени, обновени или изтрити редове. Реализирана е поддръжка за обновяване на изгледи.
- Разширени възможности за зареждане и експортиране на данни в пакетен режим. В командата COPY скоростта на експортиране на големи редове е увеличена до два пъти, оптимизирано е копирането при съвпадение на изходни и целеви кодировки, добавена е опция ON_ERROR, позволяваща продължаване на импорта след грешки при вмъкване на данни.
- За секционираните таблици е добавена възможност за използване на колони с уникални идентификатори и поддръжка на техника за оптимизация на запитвания «Constraint exclusion».
- В механизма за свързване на външни таблици Foreign Data Wrapper (postgres_fdw) е реализирана възможността за предаване на външен сървър подзапитвания «EXISTS» и «IN.
- Реализиран е вграден платформа-независим механизъм за обработка на свойства на локала «Collation», използвани за задаване на правила за сортиране и методи на съпоставяне, отчитащи значението на символите (например, при сортиране на цифрови стойности се взема предвид наличието на минус и точка пред числото и различни видове написване, а при сравнение не се взима предвид регистъра на символите и наличието на ударение). Новият механизъм гарантира еднообразно поведение при сортиране на резултатите от запитванията, независимо от платформата, на която се стартира PostgreSQL.
- В механизма на логичната репликация, позволяваща трансфер на изменения към друг сървър, внасяни в БД при добавяне, изтриване или обновяване на записи, процесът по обновяване на СУБД е опростен. Ако преди, при преминаване на ново значително издание, беше необходимо да се изтриват слотовете на логичната репликация и да се синхронизира отново данните, то сега може да се мине без изтриване на слотове. За конфигурации с отказоустойчивост е реализирана възможност за управление на превключване към запасен сървър (failover) за логичната репликация. Добавен е нов утилитет pg_createsubscriber за преобразуване на физическа реплика в нова логична реплика.
- Добавена нова опция «sslnegotiation» за директно споразумение на защитени TLS-съединения с използване на TLS-разширението ALPN.
- Реализирана е предопределена роля pg_maintain, предоставяща на потребителя право да извършва операции, свързани с поддръжката на СУБД.
- В утилитата pg_basebackup, използвана за създаване на резервни копия на БД, е добавена поддръжка за инкрементални бекъпи. За реконструиране на пълно бекъп от набор инкрементални копия е предложена нова утилита pg_combinebackup. В утилитата pg_dump е добавена опция «—filter» за избор на включените в дампа обекти.
- При анализа на заявки чрез SQL-командата «EXPLAIN» е реализиран извода на времето, прекарано за четене и запис на локални блокове при въвеждане/извеждане. В командата «EXPLAIN» също са добавени две нови опции «MEMORY» и «SERIALIZE», чрез които може да се определи размерът на използваната памет и времето, прекарано за преобразуване на данните за предаване по мрежата.
- Осигурена е индикация на напредъка при изпълнението на операцията VACUUM с индекси.
- Добавено е системно представление pg_wait_events, което в комбинация с представлението pg_stat_activity позволява по-подробно изучаване на причините за оставащите активни сесии в състояние на изчакване.
Източник: opennet.ru
