Π Π΅Π»ΠΈΠ· Π‘Π£Π‘Π” PostgreSQL 18

ПослС Π³ΠΎΠ΄Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° новая ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ Π²Π΅Ρ‚ΠΊΠ° Π‘Π£Π‘Π” PostgreSQL 18. ОбновлСния для Π½ΠΎΠ²ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ пяти Π»Π΅Ρ‚ Π΄ΠΎ ноября 2030 Π³ΠΎΠ΄Π°. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° PostgreSQL 13.x, самой старой ΠΈΠ· ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Π²Π΅Ρ‚ΠΎΠΊ, Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° 13 ноября.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° подсистСма асинхронного Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΏΡƒΡΠΊΠ½ΡƒΡŽ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ. Помимо доступной Π½Π° всСх ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ AIO (io_method=worker), основанной Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… процСссов-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 3), Π² Linux ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ интСрфСйс асинхронного Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° io_uring (io_method=io_uring), ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΉ начиная с ядра Linux 5.1. Асинхронный Π²Π²ΠΎΠ΄/Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΠΊΠ° задСйствован Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ускорСния выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, связанных с Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€, сканированиС Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Ρ€Ρ‚Ρ‹ индСксов ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ чистки (vacuum). Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… тСстах ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ AIO ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² 2-3 Ρ€Π°Π·Π°. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² синхронном Ρ€Π΅ΠΆΠΈΠΌΠ΅ для достиТСния Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ACID.
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° оптимизация Β«skip scanΒ» Π² многостолбцовых индСксах, благодаря ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ индСкс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ проиндСксированного столбца ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ связки столбцов, Π½ΠΎ ΠΈ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… проиндСксированных столбцов. НапримСр, Ρ€Π°Π½Π΅Π΅ ΠΏΡ€ΠΈ создании B-tree индСкса Π½Π°Π΄ столбцами Β«(status, date)Β» индСкс примСнялся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для запросов, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π΅ Β«statusΒ» ΠΈΠ»ΠΈ ΠΎΠ±Π° поля Β«statusΒ» ΠΈ Β«dateΒ», Π° ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Π² запросС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ поля Β«dateΒ» Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ сканированиС содСрТимого Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π Π΅ΠΆΠΈΠΌ Β«skip scanΒ» позволяСт Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ситуациях ΡΠΊΠ°Π½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ индСкс ΠΏΡ€ΠΈ запросС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ поля Β«dateΒ». Π Π΅ΠΆΠΈΠΌ примСняСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для индСксов Β«B-treeΒ» ΠΏΡ€ΠΈ использовании Π² запросС условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«=Β» Π½Π°Π΄ индСксированным ΠΏΠΎΠ»Π΅ΠΌ, Π² ситуациях, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ нСбольшоС количСство Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, оптимизация сработаСт, Ссли ΠΏΠΎΠ»Π΅ статус Β«statusΒ» ΠΈΠΌΠ΅Π΅Ρ‚ нСсколько фиксированных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ).
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ, Π±ΠΎΠ»Π΅Π΅ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ индСксы для запросов, содСрТащих конструкции Β«ORΒ» ΠΈ Β«IN (…)Β» Π² Π±Π»ΠΎΠΊΠ΅ Β«WHEREΒ», Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ планирования ΠΈ выполнСния объСдинСния Ρ‚Π°Π±Π»ΠΈΡ† (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ускорСн ΠΊΠΎΠ΄ слияниС Ρ…ΡΡˆΠ΅ΠΉ ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ сортировку ΠΏΡ€ΠΈ слиянии Ρ‚Π°Π±Π»ΠΈΡ†).
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° распараллСливания построСния индСксов GIN (Generalized Inverted Index), примСняСмых для индСксации составных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ массивы, ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ поиска ΠΏΠΎ полнотСкстовым Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈΠ»ΠΈ структурам JSON.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ создания ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… прСдставлСний ΠΈ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ для сСкционирования Ρ‚Π°Π±Π»ΠΈΡ† с индСксами с ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ Β«uniqueΒ», Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌΠΈ структуру B-tree.
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π° общая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ для запросов, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с большим количСством Ρ‚Π°Π±Π»ΠΈΡ†, Π° Ρ‚Π°ΠΊΠΆΠ΅ внСсСны ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡ Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запросов ΠΊ сСкционированным Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ, ΡƒΡΠΊΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ отсСиваниС Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… сСкций ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ слияния (JOIN).
  • УскорСны ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с тСкстом, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ привСдСния Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ/Π½ΠΈΠΆΠ½ΠΈΠΉ рСгистр. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ€Π΅ΠΆΠΈΠΌ PG_UNICODE_FAST для ускорСния ΡƒΡ‡Ρ‘Ρ‚Π° свойств Π»ΠΎΠΊΠ°Π»ΠΈ Unicode-символов.
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сохранСния статистики ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° запросов послС обновлСния ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ€Π΅Π»ΠΈΠ·Π°ΠΌΠΈ PostgreSQL. ИзмСнСниС позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ выполнСния рСсурсоёмкой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Β«ANALYZEΒ» послС запуска Π½ΠΎΠ²ΠΎΠΉ вСрсии, Π΄ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π°Π±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ просСданиС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π‘Π£Π‘Π”.
  • ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ pg_upgrade, примСняСмой для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ выпуск PostgreSQL. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ особСнно Π·Π°ΠΌΠ΅Ρ‚Π½Ρ‹ ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ Π‘Π”, содСрТащих большоС число ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Для ускорСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ pg_upgrade Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ„Π»Π°Π³ Β«β€”jobs NΒ» для распараллСливания ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π² N ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ Ρ„Π»Π°Π³ Β«β€”swapΒ» для Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ² с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π±Π΅Π· выставлСния ссылок, Π±Π΅Π· клонирования ΠΈ Π±Π΅Π· копирования Ρ„Π°ΠΉΠ»ΠΎΠ².
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… столбцов, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… вычисляСтся Π½Π° Π»Π΅Ρ‚Ρƒ Π² процСссС выполнСния запросов, Π±Π΅Π· сохранСния Π½Π° диск. Если Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Β«CREATE TABLE…» для Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… столбцов ΡƒΠΊΠ°Π·Π°Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«GENERATEDΒ» Π±Π΅Π· уточнСния Ρ‚ΠΈΠΏΠ° (STORED ΠΈΠ»ΠΈ VIRTUAL), Ρ‚ΠΎ Π½ΠΎΠ²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ примСняСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ вмСсто старой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’ старой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ значСния Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π²ΠΎ врСмя выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Β«INSERTΒ» ΠΈΠ»ΠΈ Β«UPDATEΒ» ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΠ»ΠΈΡΡŒ Π½Π° диск для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ использования. НСдостатком Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… столбцов являСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования ΠΈΡ… Π² индСксах, Π° достоинством β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π»Π΅Ρ‚Ρƒ (Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ JSON). Π§Ρ‚ΠΎ касаСтся классичСских Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… столбцов, Ρ‚ΠΎ Π² Π½ΠΎΠ²ΠΎΠΌ выпускС для Π½ΠΈΡ… обСспСчСна ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° логичСской Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
  • Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… INSERT, UPDATE, DELETE ΠΈ MERGE Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΡ€ΠΎΡˆΠ»Ρ‹Ρ… (OLD) ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… (CURRENT) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ RETURNING. НапримСр, Β«UPDATE… RETURNING WITH (OLD AS o, NEW AS n) o.*, n.*.Β».
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция uuidv7() для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ случайных ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ UUIDv7. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ старой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ UUID (gen_random_uuid), которая Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ доступна ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ uuidv4(), Π² UUIDv7 ΠΏΠΎΠΌΠΈΠΌΠΎ случайного значСния Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ врСмя Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ. НаличиС упорядочСнных частСй Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ UUID (ΠΏΠ΅Ρ€Π²Ρ‹Π΅ 12 символов β€” ΡΠΏΠΎΡ…Π°Π»ΡŒΠ½ΠΎΠ΅ врСмя, Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ 18 β€” случайноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅) ΠΏΠΎΠ²Ρ‹ΡˆΠ°Π΅Ρ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ сортировки ΠΈ индСксирования, Ρ‡Ρ‚ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ UUID ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ»ΡŽΡ‡ΠΈ, созданныС Π² Π±Π»ΠΈΠ·ΠΊΠΎΠ΅ врСмя Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ рядом Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ Π² индСксС).
  • Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Β«LIKEΒ» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сопоставлСний с тСкстом, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π½Π΅Π΄Π΅Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ свойства Π»ΠΎΠΊΠ°Π»ΠΈ Β«collationΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ сопоставлСния с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ смысла символов (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ сравнСнии ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ принимаСтся Π²ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π·Π½Π°ΠΊ ударСния). Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция CASEFOLD для измСнСния рСгистра символов c ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ свойств Π»ΠΎΠΊΠ°Π»ΠΈ Β«collationΒ» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ символы ΠΈΠΌΠ΅ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… строчных Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ сравнСнии Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ прСобразования Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр, Π° Π½Π΅ Π² Π½ΠΈΠΆΠ½ΠΈΠΉ).
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ (temporal constraint). Π’ значСниях Β«PRIMARY KEYΒ» ΠΈ Β«UNIQUEΒ» для добавлСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Β«WITHOUT OVERLAPSΒ», Π° Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Β«FOREIGN KEYΒ» β€” Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ PERIOD. НапримСр, ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ΠΈ с ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΌΠΈΡΡ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°ΠΌΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Β«CREATE FOREIGN TABLE … LIKE commandΒ» для создания схСмы внСшнСй Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° основС опрСдСлСния локальной Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π‘Π£Π‘Π”, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½Π° Π±Π°Π·Π΅ OAUTH 2.0 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠΊΠ΅Π½Π° доступа вмСсто пароля. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ OAUTH позволяСт Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ Π² Π‘Π”, Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· внСшниС сСрвисы, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ возмоТности ΠΊΠ°ΠΊ двухфакторная аутСнтификация ΠΈ Сдиная Ρ‚ΠΎΡ‡ΠΊΠ° Π²Ρ…ΠΎΠ΄Π° (SSO).
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° функция ssl_tls13_ciphers(), Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ список Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, допустимых ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ с использованиСм ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° TLSv1.3.
  • Π’ разряд ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… ΠΈ Π·Π°ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΊ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ с использованиСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° md5 для Ρ…ΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΉ. ВмСсто md5 рСкомСндуСтся ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ SCRAM (SCRAM-SHA-256), появившийся Π² PostgreSQL 10. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ отмСчаСтся рСализация ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ проброса Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π½Π° Π±Π°Π·Π΅ SCRAM ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· postgres_fdw ΠΈ dblink ΠΊ внСшним сСрвСрам PostgreSQL.
  • ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Β«EXPLAIN ANALYZEΒ» обСспСчСн Π²Ρ‹Π²ΠΎΠ΄ свСдСний ΠΎ числС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ поиска Π² индСксах ΠΏΡ€ΠΈ сканировании индСкса ΠΈ числС ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Π±ΡƒΡ„Π΅Ρ€Π°ΠΌ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запроса. Π’ Π²Ρ‹Π²ΠΎΠ΄ Β«EXPLAIN ANALYZE VERBOSEΒ» Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° статистика ΠΎ CPU, WAL-ΠΆΡƒΡ€Π½Π°Π»Π΅ ΠΈ интСнсивности ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ чтСния. Π’ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ pg_stat_all_tables Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ свСдСния ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΏΠΎΡ‚Ρ€Π°Ρ‡Π΅Π½Π½ΠΎΠΌ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ VACUUM ΠΈ Π°Π½Π°Π»ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π° статистика ΠΎΠ± интСнсивности Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π½Π° WAL-ΠΆΡƒΡ€Π½Π°Π» Π² Ρ€Π°Π·Ρ€Π΅Π·Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… соСдинСний. Π’ pg_stat_subscription_stats ΠΈ Π»ΠΎΠ³Π°Ρ… Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° информация с диагностикой ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи Π²ΠΎ врСмя логичСской Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ.
  • Π’ Π½ΠΎΠ²Ρ‹Ρ… установках Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ использованиС ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Ρ… сумм для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Для ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ повСдСния ΠΏΡ€ΠΈ запускС initdb слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠΏΡ†ΠΈΡŽ Β«β€”no-data-checksumsΒ».
  • Π’ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ pg_createsubscriber Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ„Π»Π°Π³ Β«β€”allΒ» для создания логичСских Ρ€Π΅ΠΏΠ»ΠΈΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ сразу для всСх Π‘Π”.
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° новая вСрсия (3.2) ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, примСняСмого для взаимодСйствия Π²Π½Π΅ΡˆΠ½ΠΈΡ… ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ с Π‘Π£Π‘Π” ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ libpq. ΠŸΡ€ΠΎΡˆΠ»ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΎ Π² PostgreSQL 7.4 (2003 Π³ΠΎΠ΄). Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ libpq ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вСрсия 3.0.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ