Излизането на СУБД 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“, които позволяват задаване на подредени списъци от непокриващи се диапазони от стойности. В допълнение към всеки съществуващ диапазонен тип е предложен своя 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster