Рэліз СКБД 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

Дадаць каментар