E.39. Выпуск 15#
E.39. Выпуск 15
Дата выпуска: 2022-10-13
E.39.1. Обзор
PostgreSQL 15 содержит множество новых функций и улучшений, включая:
Поддержка команды SQL
MERGE.Выборочная публикация содержимого таблиц в рамках публикаций логической репликации, позволяющая указывать списки столбцов и условия фильтрации строк.
Больше вариантов сжатия, включая поддержку сжатия Zstandard (zstd). Это включает поддержку сжатия на стороне сервера во время pg_basebackup.
Поддержка структурированного вывода серверного журнала с использованием формата JSON.
Улучшение производительности, особенно для сортировки в памяти и на диске.
Вышеуказанные элементы и другие новые функции PostgreSQL 15 подробно объясняются в следующих разделах.
E.39.2. Миграция на версию 15
Чтобы перенести данные с предыдущей версии, требуется выполнить резервное копирование/восстановление с использованием pg_dumpall или использовать pg_upgrade, или логическую репликацию. См. Раздел 18.6 для общей информации о переходе на новые основные версии.
Версия 15 содержит ряд изменений, которые могут повлиять на совместимость с предыдущими выпусками. Обратите внимание на следующие несовместимости:
Удалено разрешение на создание
PUBLICвpublicсхеме (Ноа Миш) §Новое значение по умолчанию является одним из безопасных схематических шаблонов использования, которые рекомендованы (Раздел 5.9.6) с момента выпуска обновления безопасности для CVE-2018-1058. Изменение применяется к новым кластерам баз данных и к новым созданным базам данных в существующих кластерах. При обновлении кластера или восстановлении дампа базы данных будут сохранены существующие разрешения для
public.Для существующих баз данных, особенно тех, в которых есть несколько пользователей, рассмотрите возможность отзыва разрешения
CREATEна схемуpublic, чтобы принять это новое значение по умолчанию. Для новых баз данных, не требующих защиты от внутренних угроз, предоставление разрешенияCREATEприведет к поведению, характерному для предыдущих версий.Владелец схемы
publicбыл изменён на новую рольpg_database_owner(Ноа Миш) §Это позволяет каждому владельцу базы данных иметь привилегии владения схемой
publicв своей базе данных. Ранее она принадлежала суперпользователю bootstrap, чтобы непривилегированные владельцы баз данных не могли с ней ничего делать.Это изменение применяется к новым кластерам баз данных и к вновь созданным базам данных в существующих кластерах. Обновление кластера или восстановление дампа базы данных сохранит существующую спецификацию владения для
public.Удален давно устаревший режим эксклюзивного резервного копирования (Дэвид Стил, Натан Боссарт) §
Если сервер базы данных останавливается внезапно в этом режиме, сервер может не запуститься. Неисключительный режим резервного копирования считается предпочтительным для всех целей. Функции
pg_start_backup()/pg_stop_backup()были переименованы вpg_backup_start()/pg_backup_stop(), а функцииpg_backup_start_time()иpg_is_in_backup()были удалены.Увеличено значение по умолчанию
hash_mem_multiplierдо 2.0 (Питер Геогеган) §Это позволяет операциям хеширования запросов использовать больше памяти
work_mem, чем другие операции.Удалён серверный язык
plpython2uи универсальный язык Pythonplpythonu(Андрес Фройнд) §Python 2.x больше не поддерживается. В то время как первоначальная цель
plpythonuзаключалась в том, чтобы в конечном итоге она могла ссылаться наplpython3u, изменение этого сейчас, кажется, скорее вызовет проблемы, чем решит их, поэтому она была просто удалена.Выдана ошибка, если
array_to_tsvector()передан элемент массива с пустой строкой (Жан-Кристоф Арну) §Это запрещено, потому что лексемы никогда не должны быть пустыми. Пользователи предыдущих версий Postgres должны проверить, что не хранятся пустые лексемы, так как они могут привести к сбоям при экспорте/импорте и несогласованным результатам.
Выдана ошибка, когда
chr()снабжен отрицательным аргументом (Петер Айзентраут) §Предотвращено изменение
CREATE OR REPLACE VIEWправила сортировки выходного столбца (Tom Lane) §Запрещены идентификаторы Unicode нулевой длины, например,
U&""(Петер Айзентраут) §Нулевые идентификаторы, не являющиеся Unicode, были запрещены ранее.
Предотвращено наличие у числовых литералов нечисловых завершающих символов (Петер Айзентраут) §
Ранее, текст запроса вида
123abcинтерпретировался как123, за которым следовал отдельный компонентabc.Настроена обработка числовых литералов JSON в соответствии со стандартом SQL/JSON (Петер Айзентраут) §
Это принимает числовые форматы, такие как
.1и1., и не разрешает наличие ненужных символов после числовых литералов, например,1.type().Когда
intervalввод предоставлял дробное значение для единицы, превышающей месяцы, округление выполнялось до ближайшего месяца (Брюс Момджиан) §Например,
1.99 годапреобразовывается в2 года, а не в1 год 11 месяцев, как раньше.Улучшена согласованность разбора
intervalс завершающими точками (Tom Lane) §Числа с точками в конце были отклонены на некоторых платформах.
Отмечена функция вывода
intervalкак стабильная, а не неизменяемая, так как она зависит отIntervalStyle(Tom Lane) §Это, например, приведет к тому, что создание индексов, основанных на текстовом выводе значений
interval, завершится неудачей.Обнаружено переполнение целого числа в функциях обоснования интервала (Джо Кошаков) §
Затронуты функции
justify_interval(),justify_hours()иjustify_days().Изменён формат ввода-вывода типа
"char"для не-ASCII символов (Tom Lane) §Байты с установленным старшим битом теперь выводятся как обратная косая черта и три восьмеричных цифры, чтобы избежать проблем с кодировкой.
Удалено привилегию по умолчанию
ADMIN OPTION, которую роль входа имела на собственное членство в роли (Роберт Хаас) §Ранее, роль входа могла добавлять/удалять членов своей собственной роли, даже без привилегии
ADMIN OPTION.Разрешено логическое реплицирование выполняться от имени владельца подписки (Марк Дилгер) §
Поскольку политики защиты на уровне строк не проверяются, репликация в таблицы с политиками защиты на уровне строк разрешена только для суперпользователей, ролей с параметром
bypassrlsи владельцев таблицы.Предотвращены операции
UPDATEиDELETEлогической репликации на таблицах, где владелец подписки не имеет разрешенияSELECTна таблицу (Джефф Дэвис) §UPDATEиDELETEкоманды обычно также включают чтение таблицы, поэтому требуют наличия у владельца подписки разрешения на выполнение командыSELECTдля таблицы.Когда
EXPLAINссылается на схему временного объекта сессии, она упоминается какpg_temp(Amul Sul) §Ранее было сообщено фактическое имя схемы, что приводило к несогласованности между сессиями.
Исправлено
pg_statio_all_tablesдля суммирования значений в редком случае таблиц TOAST с несколькими индексами (Андрей Зубков) §Ранее в таких случаях отображалась одна строка для каждого индекса.
Запрещена установка пользовательских опций, которые совпадают с именем установленного расширения, но не являются одной из объявленных переменных расширения (Флорин Ирион, Том Лейн) § § §
Это изменение приводит к удалению всех таких предварительно существующих переменных во время загрузки расширения, а затем предотвращает создание новых переменных позже в сессии. Цель состоит в том, чтобы предотвратить путаницу в том, связана ли переменная с расширением или нет.
Удалена устаревшая серверная переменная
stats_temp_directory(Андрес Фройнд, Кьотаро Хоригучи) §Улучшен алгоритм, используемый для вычисления
random()(Фабьен Коэльо) § §Это приведет к тому, что результаты функции
random()будут отличаться от того, что было получено в предыдущих версиях, даже для одного и того же начального значения (seed).libpq's
PQsendQuery()функция больше не поддерживается в режиме конвейера (Álvaro Herrera) §Приложения, которые используют эту комбинацию, должны быть изменены для использования функции
PQsendQueryParams()вместо этого.Была использована переменная окружения
HOMEдля определения домашнего каталога пользователя (Anders Kaseorg) §Если переменная
HOMEпуста или не установлена, используется предыдущий метод проверки базы данных<pwd.h>. Это изменение затрагивает libpq (например, при поиске файла~/.pgpass), а также различные клиентские приложения.Удалена опция
--no-synchronized-snapshotsиз pg_dump (Том Лейн) §Все поддерживаемые версии сервера поддерживают синхронизированные снимки, поэтому больше нет необходимости в этой опции.
После обнаружения ошибки в режиме
--single-transactionpsql, финальная командаCOMMITизменена наROLLBACKтолько если установленоON_ERROR_STOP(Michael Paquier) §Избегалось ненужное приведение типов констант в запросах, отправленных postgres_fdw (Dian Fay) §
Когда типы столбцов намеренно отличаются между локальной и удаленной базами данных, такие приведения типов могут вызывать ошибки.
Удалена функция
xml_is_well_formed()из xml2 (Том Лейн) §Эта функция была реализована в основном ядре с версии Postgres 9.1.
Разрешено поставщикам пользовательского сканирования указывать, поддерживают ли они проекции (Свен Клемм) §
Теперь по умолчанию предполагается, что пользовательские поставщики сканирования не поддерживают проекции; те, которые поддерживают, должны быть обновлены для этого выпуска.
E.39.3. Изменения
Ниже вы найдете подробное описание различий между PostgreSQL 15 и предыдущим основным выпуском.
E.39.3.1. Сервер
Запись и проверка версии сортировки каждой базы данных (Петер Айзентраут) §
Эта функция предназначена для обнаружения изменений версии сортировки для предотвращения повреждения индекса. Функция
pg_database_collation_actual_version()сообщает версию сортировки операционной системы, аALTER DATABASE ... REFRESHустанавливает записанную версию сортировки базы данных в соответствии с версией сортировки операционной системы.Разрешено ICU устанавливать сортировки в качестве значения по умолчанию для кластеров и баз данных (Питер Айзентраут) §
Ранее, только сортировки, основанные на libc, могли быть выбраны на уровне кластера и базы данных. Правила сортировки ICU могли использоваться только через явные предложения
COLLATE.Добавлено системное представление
pg_ident_file_mappingsдля отчета информации изpg_ident.conf(Жюльен Рухауд) §
E.39.3.1.1. Секционирование
Улучшено время планирования для запросов, ссылающихся на секционированные таблицы (Дэвид Роули) §
Это изменение полезно, когда только несколько из множества секций являются актуальными.
Разрешено упорядоченное сканирование разделов для избежания сортировки в большем количестве случаев (Дэвид Роули) §
Ранее, таблица с секционированием, содержащая секцию
DEFAULTили секциюLISTс несколькими значениями, не могла использоваться для упорядоченного сканирования секций. Теперь они могут использоваться, если такие секции удаляются во время планирования.Улучшено поведение внешнего ключа при обновлениях в секционированных таблицах, которые перемещают строки между секциями (Amit Langote) §
Ранее такие обновления выполняли действие удаления на исходной секции и действие вставки на целевой секции. PostgreSQL теперь будет выполнять действие обновления на корневом разделе, обеспечивая более чистую семантику.
Разрешено
CLUSTERна секционированных таблицах (Джастин Пшибы) § §Исправлено
ALTER TRIGGER RENAMEна секционированных таблицах для правильного переименования триггеров на всех секциях (Арне Роланд, Альваро Эррера) §Также запрещено переименовывание клонированных триггеров.
E.39.3.1.2. Индексы
Разрешены индексы btree на системных и TOAST таблицах для эффективного хранения дубликатов (Питер Геогеган) §
Ранее дедупликация была отключена для этих типов индексов.
Улучшена производительность поиска индексов GiST, которые были построены с использованием сортировки (Александр Каленик, Сергей Шульбаков, Андрей Бородин) §
Разрешено уникальным ограничениям и индексам рассматривать
NULLзначения как неразличимые (Питер Айзентраут) §Ранее записи с
NULLвсегда рассматривались как отдельные значения, но теперь это можно изменить, создав ограничения и индексы с использованиемUNIQUE NULLS NOT DISTINCT.Разрешено оператору
^@starts-with и функцииstarts_with()использовать btree индексы при использовании C правила сортировки (Tom Lane) §Ранее они могли использовать только индексы SP-GiST.
E.39.3.1.3. Оптимизатор
Разрешено расширенной статистике записывать статистику для родителя со всеми его потомками (Томаш Вондра, Джастин Призби) §
Стандартный инструмент статистики уже отслеживал статистику «только родитель» и статистику «родители плюс все дочерние элементы» по отдельности.
Добавлена серверная переменная
recursive_worktable_factorдля того, чтобы пользователю было позволено указать ожидаемый размер рабочей таблицы рекурсивного запроса (Саймон Риггс) §
E.39.3.1.4. Общая производительность
Разрешен хеш-поиск для
NOT INвыражений с множеством констант (Дэвид Роули, Джеймс Коулман) §Ранее код всегда последовательно сканировал список значений.
Разрешено
SELECT DISTINCTбыть параллелизированным (David Rowley) §Ускорена проверка кодировки текста UTF-8 за счет обработки 16 байт за раз (Джон Нейлор, Хейкки Линкангас) §
Это улучшит операции с большим объемом текста, такие как
COPY FROM.Улучшена производительность для сортировок, которые превышают
work_mem(Хейки Линкангас) § §Когда данные для сортировки больше не помещаются в переменную
work_mem, переключитесь на алгоритм сортировки по партиям, который использует больше выходных потоков, чем раньше.Улучшена производительность и снижено потребление памяти для сортировок в памяти (Ронан Данкло, Дэвид Роули, Томас Манро, Джон Нейлор) § § §
Разрешено WAL полное запись страниц использовать сжатие LZ4 и Zstandard (Андрей Бородин, Джастин Пшибы) § §
Это контролируется настройкой сервера
wal_compression.Разрешено вакууму быть более агрессивным в установке самого старого замороженного и мульти-транзакционного идентификатора (Питер Геогеган) §
Разрешено запросу, ссылающемуся на несколько внешних таблиц, выполнять параллельные сканирования внешних таблиц в большем числе случаев (Андрей Лепихов, Эцуро Фуджита) §
Улучшена производительность оконных функций, которые используют
row_number(),rank(),dense_rank()иcount()(David Rowley) §Улучшена производительность спинлоков на системах ARM64 с большим количеством ядер (Geoffrey Blake) §
E.39.3.1.5. Мониторинг
Включено логирование по умолчанию контрольных точек и медленных операций autovacuum (Бхарат Рупиредди) §
Это изменяет значение по умолчанию для
log_checkpointsнаonи дляlog_autovacuum_min_durationна 10 минут. Это приведет к генерации некоторого журнального вывода даже на неактивном сервере, что может вызвать проблемы на серверах с ограниченными ресурсами без ротации журнальных файлов. В таких случаях следует изменить эти значения по умолчанию.Генерация сообщений о прогрессе в журнале сервера во время медленных запусков сервера (Nitin Jadhav, Robert Haas) § §
Сообщения сообщают о причине задержки. Интервал времени для уведомления контролируется новой переменной сервера
log_startup_progress_interval.Данные системы кумулятивной статистики хранились в общей памяти (Kyotaro Horiguchi, Andres Freund, Melanie Plageman) § §
Ранее эти данные отправлялись в процессор статистики с помощью пакетов UDP и могли быть прочитаны только сессиями после их передачи через файловую систему. Больше нет отдельного процессора статистики.
Добавлена дополнительная информация в
VACUUM VERBOSEи сообщения журналирования autovacuum (Питер Геогеган) § § §Добавлен
EXPLAIN (BUFFERS)вывод для ввода-вывода блоков временных файлов (Масахико Савада) §Разрешен вывод логов в формате JSON (Сехропе Саркуни, Майкл Пакье) §
Новое значение -
log_destination = jsonlog.Разрешено
pg_stat_reset_single_table_counters()сбрасывать счетчики отношений, общих для всех баз данных (Sadhuprasad Patro) §Добавлены события ожидания для локальных команд оболочки (Fujii Masao) §
Новые события ожидания используются при вызове
archive_command,archive_cleanup_command,restore_commandиrecovery_end_command.
E.39.3.1.6. Привилегии
Разрешены доступы к таблице, выполняемые представлением, которые могут быть опционально контролируемы привилегиями вызывающего представление (Кристоф Хайсс) §
Ранее доступ к представлениям всегда рассматривался как выполненный владельцем представления. Это по-прежнему является значением по умолчанию.
Разрешено членам
pg_write_server_filesпредопределенной роли выполнять серверные базовые резервные копии (Дагфинн Илмари Маннсокер) §Ранее только суперпользователи могли выполнять такие резервные копии.
Разрешено
GRANTпредоставление разрешений на изменение отдельных серверных переменных черезSETиALTER SYSTEM(Марк Дилгер) § §Новая функция
has_parameter_privilege()сообщает о наличии этой привилегии.Добавлена предопределенная роль
pg_checkpoint, которая позволяет участникам выполнятьCHECKPOINT(Джефф Дэвис) § §Ранее контрольные точки могли выполнять только суперпользователи.
Разрешено членам предопределенной роли
pg_read_all_statsдоступ к представлениямpg_backend_memory_contextsиpg_shmem_allocations(Бхаратх Рупиредди) §Ранее эти представления могли быть доступны только суперпользователям.
Разрешено
GRANTпредоставлять разрешения наpg_log_backend_memory_contexts()(Джефф Дэвис) §Ранее эта функция могла быть запущена только суперпользователями.
E.39.3.1.7. Конфигурация сервера
Добавлена серверная переменная
shared_memory_sizeдля отчета о размере выделенной общей памяти (Натан Боссарт) § §Добавлена серверная переменная
shared_memory_size_in_huge_pagesдля отчета о количестве требуемых больших страниц памяти (Натан Боссарт) § §Это поддерживается только в Linux.
Была учтена серверная переменная
shared_preload_librariesв однопользовательском режиме (Джефф Дэвис) §Это изменение поддерживает использование
shared_preload_librariesдля загрузки пользовательских методов доступа и менеджеров ресурсов WAL, которые являются необходимыми для доступа к базе данных даже в однопользовательском режиме.Разрешено
postgres -Cправильно сообщать вычисленные во время выполнения значения (Натан Боссарт) §Ранее вычисляемые значения
data_checksums,wal_segment_sizeиdata_directory_modeсообщали значения, которые не были точными на работающем сервере. Однако это не работает на работающем сервере.
E.39.3.2. Потоковая репликация и восстановление
Добавлена поддержка сжатия LZ4 и Zstandard для серверных базовых резервных копий (Дживан Ладхе, Роберт Хаас) § § §
Запуск процессов контрольной точки и фоновой записи во время аварийного восстановления (Томас Мунро) §
Это помогает ускорить долгое восстановление после сбоев.
Разрешена обработка WAL для предварительной выборки необходимых содержимых файлов (Томас Мунро) §
Это контролируется переменной сервера
recovery_prefetch.Разрешено архивирование через загружаемые модули (Натан Боссарт) §
Ранее архивирование выполнялось только путем вызова команд оболочки. Новая переменная сервера
archive_libraryможет быть установлена для указания библиотеки, которая будет вызываться для архивирования.Больше не требуется, чтобы
IDENTIFY_SYSTEMвыполнялся передSTART_REPLICATION(Джефф Дэвис) §
E.39.3.2.1. Логическая репликация
Разрешена публикация всех таблиц в схеме (Vignesh C, Hou Zhijie, Amit Kapila) § § §
Например, теперь поддерживается такой синтаксис:
CREATE PUBLICATION pub1 FOR TABLES IN SCHEMA s1,s2.ALTER PUBLICATIONподдерживает аналогичный синтаксис. Таблицы, добавленные позже в перечисленные схемы, также будут тиражироваться.Разрешена фильтрация содержимого публикации с использованием предложения
WHERE(Hou Zhijie, Euler Taveira, Peter Smith, Ajin Cherian, Tomas Vondra, Amit Kapila) § § §Строки, не удовлетворяющие условию
WHERE, не публикуются.Разрешено ограничение содержимого публикации до определенных столбцов (Томаш Вондра, Альваро Эррера, Рахила Сайед) §
Разрешено пропускать транзакции на подписчике с использованием
ALTER SUBSCRIPTION ... SKIP(Масахико Савада) §Добавлена поддержка подготовленных (двухфазных) транзакций для логической репликации (Питер Смит, Аджин Чериан, Амит Капила, Нихил Сонтакке, Стас Кельвич) § § §
Новая опция
CREATE_REPLICATION_SLOTназываетсяTWO_PHASE. pg_recvlogical теперь поддерживает новую опцию--two-phaseпри создании слота.Предотвращена логическая репликация пустых транзакций (Ajin Cherian, Hou Zhijie, Euler Taveira) §
Ранее издатели отправляли пустые транзакции подписчикам, если подписанные таблицы не изменялись.
Добавлены функции SQL для мониторинга содержимого каталогов слотов логической репликации (Бхарат Рупиредди) §
Новые функции -
pg_ls_logicalsnapdir(),pg_ls_logicalmapdir()иpg_ls_replslotdir(). Они могут быть запущены членами предопределенной ролиpg_monitor.Разрешено подписчикам останавливать применение изменений логической репликации при ошибке (Osumi Takamichi, Mark Dilger) §
Это включается с помощью опции подписчика
disable_on_errorи предотвращает возможные бесконечные циклы ошибок во время применения потока.Настроены переменные сервера подписчика в соответствии с издателем, чтобы значения datetime и float8 интерпретировались последовательно (Japin Li) §
Некоторые издатели могут полагаться на несогласованное поведение.
Добавлено системное представление
pg_stat_subscription_statsдля отчета о активности подписчика (Masahiko Sawada) § §Новая функция
pg_stat_reset_subscription_stats()позволяет сбросить эти счетчики статистики.Подавлены дублирующиеся записи в системном представлении
pg_publication_tables(Hou Zhijie) §В некоторых случаях секция может появиться более одного раза.
E.39.3.3. Утилиты
Добавлена команда SQL
MERGEдля приведения одной таблицы в соответствие с другой (Саймон Риггс, Паван Деоласе, Альваро Эррера, Амит Ланготе) §Это похоже на
INSERT ... ON CONFLICT, но более ориентировано на пакетную обработку.Добавлена поддержка опции
HEADERв текстовом форматеCOPY(Реми Лапейр) § §Новая опция вызывает вывод и, при необходимости, проверку имен столбцов при вводе.
Добавлен новый метод с WAL-журналированием для создания базы данных (Dilip Kumar) §
Это новый метод по умолчанию для копирования шаблонной базы данных, так как он избегает необходимости создания контрольных точек во время создания базы данных. Однако, если шаблонная база данных большая, то этот метод может работать медленно, поэтому старый метод все еще доступен.
Разрешено
CREATE DATABASEустанавливать OID базы данных (Шрути Говда, Антонин Хоушка) §Разрешены действия внешнего ключа
ON DELETE SETдля воздействия только на указанные столбцы (Пол Мартинес) §Ранее все столбцы внешнего ключа всегда затрагивались.
Разрешено
ALTER TABLEизменятьACCESS METHODтаблицы (Джастин Призби, Джефф Дэвис) §Правильный вызов хуков доступа к объектам, когда
ALTER TABLEвызывает переписывание таблиц (Майкл Пакье) §Разрешено создание незалогированных последовательностей (Питер Айзентраут) §
Отслеживание зависимостей от отдельных столбцов в результатах функций, возвращающих составные типы (Том Лейн) §
Ранее, если представление или правило содержало ссылку на конкретный столбец в результате функции, возвращающей составной тип, это не отмечалось как зависимость; представление или правило считались зависимыми только от всего составного типа. Это означало, что удаление отдельного столбца было разрешено, что вызывало проблемы при последующем использовании представления или правила. Теперь также отмечается зависимость на уровне столбца, поэтому удаление такого столбца будет отклонено, если представление не изменено или удалено.
E.39.3.4. Типы данных
Разрешено, чтобы масштаб
numericзначения был отрицательным или больше его точности (Дин Рашид, Том Лейн) §Это позволяет округлять значения слева от десятичной точки, например,
'1234'::numeric(4, -2)возвращает 1200.Улучшено обнаружение переполнения при приведении значений к интервалу (Джо Кошаков) §
Изменён формат ввода-вывода типа
"char"для не-ASCII символов (Tom Lane) §Обновлена информация о ширине отображения современных символов Unicode, таких как эмодзи (Джейкоб Чемпион) § §
Также обновите с Unicode 5.0 до 14.0.0. Теперь есть автоматизированный способ поддерживать актуальность Postgres с выпусками Unicode.
E.39.3.5. Функции
Добавлен ввод мультидиапазона в
range_agg()(Пол Юнгвирт) §Добавлены агрегаты
MIN()иMAX()для типа данныхxid8(Ken Kato) §Добавлены функции регулярных выражений для совместимости с другими реляционными системами (Жиль Дарольд, Том Лейн) §
Новые функции -
regexp_count(),regexp_instr(),regexp_like()иregexp_substr(). Кроме того, к функцииregexp_replace()были добавлены новые необязательные аргументы.Добавлена возможность вычисления расстояния между
многоугольниками(Tom Lane) §Добавлены коды формата
to_char()of,tzh, иtzm(Nitin Jadhav) §Верхний регистр этих эквивалентов уже поддерживался.
При применении
AT TIME ZONEк значениюtime with time zone, использовалось время начала транзакции, а не время настенных часов, для определения, применяется ли летнее время (Александр Алексеев, Том Лейн) §Это позволяет считать преобразование стабильным, а не изменчивым, и экономит вызов ядра для каждого вызова.
Игнорировались элементы массива NULL в
ts_delete()иsetweight()функциях с аргументами массива (Жан-Кристоф Арну) §Эти функции эффективно игнорируют элементы массива, содержащие пустые строки (поскольку они никогда не могут соответствовать допустимому лексему). Кажется логичным, чтобы они также игнорировали элементы NULL, вместо того чтобы вызывать ошибку.
Добавлена поддержка петабайтных единиц в
pg_size_pretty()иpg_size_bytes()(Дэвид Кристенсен) §Изменено
pg_event_trigger_ddl_commands()для вывода ссылок на временные схемы других сессий с использованием фактического имени схемы (Том Лейн) §Ранее эта функция отображала все временные схемы как
pg_temp, но это вводит в заблуждение, поскольку это относится только к временной схеме текущей сессии.
E.39.3.6. PL/pgSQL
E.39.3.7. libpq
Разрешено сопоставление IP-адреса с альтернативным именем субъекта в сертификате сервера (Джейкоб Чемпион) §
Позволено
PQsslAttribute()сообщать о типе библиотеки SSL без необходимости подключения libpq (Джейкоб Чемпион) §Изменения отмены запросов, отправленных клиентом, чтобы использовать те же настройки TCP, что и обычные клиентские подключения (Jelte Fennema) §
Это позволяет применять настроенные таймауты TCP к соединениям для отмены запросов.
Предотвращены сбои обратного вызова события libpq, приводящие к ошибочному результату (Tom Lane) § §
E.39.3.8. Клиентские приложения
E.39.3.8.1. psql
Улучшена производительность psql команды
\copy, за счет отправки данных большими блоками (Хейкки Линнакангас) §Добавлена команда
\dconfigдля отображения серверных переменных (Марк Дилгер, Том Лейн) § § §Это аналог команды сервера
SHOW, но она может обрабатывать шаблоны для удобного отображения нескольких переменных.Добавлена команда
\getenvдля присвоения значения переменной окружения переменной psql (Том Лейн) §Добавлена опция
+к командам\lo_listи\dlдля отображения привилегий на большие объекты (Павел Лузанов) §Добавлена опция пейджера для команды
\watch(Павел Стехуле, Томас Мунро) §Это поддерживается только в Unix и контролируется переменной среды
PSQL_WATCH_PAGER.Сделано так, чтобы psql включал комментарии с двойным дефисом внутри запроса в запросы, отправляемые на сервер (Том Лейн, Грег Нанкарроу) § §
Ранее такие комментарии удалялись из запроса перед отправкой. Комментарии с двойными дефисами, которые находятся перед любым текстом запроса, не отправляются и не записываются как отдельные записи истории psql.
Настроено psql так, чтобы команда meta-
#в Readline вставляла маркер комментария с двойным дефисом (Tom Lane) §Ранее вставлялся символ решетки, если пользователь не заботился о настройке нестандартного символа комментария.
Вывод psql всех результатов, когда несколько запросов передаются на сервер одновременно (Фабьен Коэльо) §
Ранее отображался только последний результат запроса. Старое поведение можно восстановить, установив переменную
SHOW_ALL_RESULTSприложения psql в значениеoff.После обнаружения ошибки в режиме
--single-transaction, изменить финальную командуCOMMITнаROLLBACKтолько если установленоON_ERROR_STOP(Майкл Пакье) §Ранее, обнаружение ошибки в команде
-cили в скриптовом файле-fприводило к выполнению командыROLLBACKв конце, независимо от значенияON_ERROR_STOP.Улучшено автодополнение в psql (Синья Като, Дагфинн Илмари Маннсокер, Питер Смит, Кою Танигава, Кен Като, Дэвид Феттер, Хайинг Танг, Питер Айзентраут, Альваро Эррера, Том Лейн, Масахико Савада) § § § § § § § § § § § § § § § § § § § §
Ограничена поддержка обратных слеш-команд psql для серверов, работающих на PostgreSQL 9.2 или более поздних версиях (Tom Lane) §
Удалите код, который использовался только при работе с более старым сервером. Команды, которые не требуют никаких специфических настроек по сравнению с версией 9.2, по-прежнему будут работать.
E.39.3.8.2. pg_dump
Сделано так, чтобы pg_dump сохранял изменения владельца схемы
publicи метки безопасности (Ноа Миш) § §Улучшена производительность дампа баз данных с множеством объектов (Tom Lane) § § §
Это также улучшит производительность pg_upgrade.
Улучшена производительность параллельного pg_dump для таблиц с большими таблицами TOAST (Tom Lane) §
Добавлена опция дампа/восстановления
--no-table-access-methodдля принудительного использования только метода доступа к таблице по умолчанию при восстановлении (Джастин Пшибы) §Ограничена поддержка pg_dump и pg_dumpall для серверов, работающих на PostgreSQL 9.2 или более поздних версиях (Tom Lane) §
E.39.3.9. Приложения сервера
Добавлена новая опция pg_basebackup
--targetдля управления местоположением базового резервного копирования (Роберт Хаас) §Новые параметры -
serverдля записи резервной копии локально иblackholeдля отбрасывания резервной копии (для тестирования).Разрешено pg_basebackup выполнять серверную компрессию gzip, LZ4 и Zstandard, а также клиентскую компрессию LZ4 и Zstandard для файлов базового резервного копирования (Dipesh Pandit, Jeevan Ladhe) § § §
Поддержка сжатия
gzipна стороне клиента уже была реализована.Разрешено pg_basebackup сжимать на стороне сервера и распаковывать на стороне клиента перед хранением (Dipesh Pandit) §
Это достигается путем указания сжатия на стороне сервера и формата вывода в виде обычного текста.
Разрешено pg_basebackup использовать
--compressдля управления местоположением сжатия (сервер или клиент), методом сжатия и параметрами сжатия (Майкл Пакье, Роберт Хаас) § § §Добавлен метод сжатия LZ4 в pg_receivewal (Georgios Kokolatos) § §
Это включается с помощью
--compress=lz4и требует сборки бинарных файлов с использованием--with-lz4.Добавлены дополнительные возможности к pg_receivewal's
--compressопции (Georgios Kokolatos) §Улучшена способность pg_receivewal перезапускаться в правильном месте WAL (Ронан Данкло) §
Ранее pg_receivewal запускался на основе файла WAL, хранящегося в локальном архивном каталоге или в текущей точке сброса WAL на отправляющем сервере. С этим изменением, если отправляющий сервер работает на Postgres 15 или более поздней версии, локальный архивный каталог пуст и указан слот репликации, будет использована точка перезапуска слота репликации.
Добавлена pg_rewind опция
--config-fileдля упрощения использования, когда файлы конфигурации сервера хранятся вне каталога данных (Гуннар Блут) §
E.39.3.9.1. pg_upgrade
Логи и временные файлы pg_upgrade были сохранены в подкаталоге нового кластера под названием
pg_upgrade_output.d(Джастин Призби) § § §Ранее такие файлы оставались в текущем каталоге, требуя ручной очистки. Теперь они автоматически удаляются после успешного завершения pg_upgrade.
Отключена отчетность о состоянии по умолчанию во время pg_upgrade операции, если вывод не является терминалом (Андрес Фройнд) §
Выходной отчет о состоянии может быть включен для использования без tty с помощью опции
--verbose.Сделано так, чтобы pg_upgrade сообщал обо всех базах данных с недопустимыми настройками подключения (Дживан Ладхе) §
Ранее сообщалось только о первой базе данных с неверными настройками подключения.
Сделано так, чтобы pg_upgrade сохранял табличные пространства и OID базы данных, а также номера relfilenode отношений (Шрути Говда, Антонин Хоуска) § § §
Добавлена опция
--no-syncв pg_upgrade (Майкл Пакье) §Это рекомендуется только для тестирования.
Поддержка ограничения pg_upgrade для старых серверов, работающих на PostgreSQL 9.2 или более поздней версии (Tom Lane) §
E.39.3.9.2. pg_waldump
Разрешен вывод pg_waldump фильтроваться по узлу файла отношения, номеру блока, номеру вилки и полным изображениям страниц (Дэвид Кристенсен, Томас Мунро) § §
Сделано так, чтобы pg_waldump сообщал статистику перед прерванным выходом (Бхарат Рупиредди) §
Например, при нажатии Ctrl+C в терминале, где выполнялся
pg_waldump --stats --follow, текущая статистика была выведена перед завершением работы.Улучшены описания некоторых записей транзакций WAL, сообщаемых pg_waldump (Масахико Савада, Майкл Пакье) §
Разрешено pg_waldump выводить информацию о нескольких менеджерах ресурсов (Хейкки Линнакангас) §
Это включается путем указания опции
--rmgrнесколько раз.
E.39.3.10. Документация
Добавлена документация для
pg_encoding_to_char()иpg_char_to_encoding()(Иан Лоуренс Барвик) §
E.39.3.11. Исходный код
Добавлена поддержка непрерывного тестирования интеграции с использованием cirrus-ci (Андрес Фройнд, Томас Мунро, Мелани Плэгеман) §
Добавлено поле идентификатора ABI в магический блок в загружаемых библиотеках, позволяющее некоммерческим дистрибуциям PostgreSQL идентифицировать библиотеки, которые не совместимы с другими сборками (Петер Айзентраут) §
Несоответствие поля ABI вызовет ошибку при загрузке.
Создано новое значение
pg_type.typcategoryдля"char"(Tom Lane) §Некоторые другие типы, предназначенные только для внутреннего использования, также были назначены этой категории.
Добавлено новое сообщение протокола
TARGETдля указания нового методаCOPY, который будет использоваться для базовых резервных копий (Роберт Хаас) §pg_basebackup теперь использует этот метод.
Добавлено новое сообщение протокола
COMPRESSIONиCOMPRESSION_DETAILдля указания метода и параметров сжатия (Роберт Хаас) § §Удалена серверная поддержка старого синтаксиса команды
BASE_BACKUPи протокола базового резервного копирования (Роберт Хаас) § §Добавлена поддержка расширений для установки пользовательских целей резервного копирования (Роберт Хаас) §
Разрешено расширениям определять пользовательские менеджеры ресурсов WAL (Джефф Дэвис) §
Добавлена функция
pg_settings_get_flags()для получения флагов серверных переменных (Джастин Пшибы) §Требуется версия GNU make 3.81 или более поздняя для сборки PostgreSQL (Tom Lane) §
Для сборки расширения pgcrypto требовался OpenSSL (Петер Айзентраут) §
Требуется Perl версии 5.8.3 или более поздней (Dagfinn Ilmari Mannsåker) §
Требуется Python версии 3.2 или более поздней (Андрес Фройнд) §
E.39.3.12. Дополнительные модули
Разрешено amcheck проверять последовательности (Марк Дилгер) §
Улучшены проверки целостности amcheck для таблиц TOAST (Mark Dilger) §
Добавлен новый модуль basebackup_to_shell в качестве примера пользовательской цели резервного копирования (Роберт Хаас) § §
Добавлен новый модуль basic_archive в качестве примера выполнения архивирования через библиотеку (Натан Боссарт) §
Разрешены btree_gist индексы на булевых столбцах (Эмре Хасегели) § § §
Эти могут быть использованы для ограничений-исключений.
Исправлена pageinspect's
page_header()для обработки размеров страниц в 32 килобайта (Quan Zongliang) §Ранее, в некоторых случаях могли возвращаться неправильные отрицательные значения.
Добавлены счетчики для ввода-вывода блоков временных файлов в pg_stat_statements (Масахико Савада) §
Добавлены счетчики JIT в pg_stat_statements (Магнус Хагандер) §
Добавлен новый модуль pg_walinspect (Бхарат Рупиредди) §
Это дает вывод на уровне SQL, аналогичный pg_waldump.
Указано разрешающее/принудительное состояние в сообщениях журнала sepgsql (Дэйв Пейдж) §
E.39.3.12.1. postgres_fdw
Разрешено postgres_fdw выполнять передачу выражений
CASE(Александр Пыхалов) §Добавлена серверная переменная
postgres_fdw.application_nameдля управления именем приложения соединений postgres_fdw (Хаято Курода) § § §Ранее имя приложения
application_nameудаленной сессии можно было установить только на удаленном сервере или через спецификацию подключения postgres_fdw.postgres_fdw.application_nameподдерживает некоторые символьные последовательности для настройки, что упрощает отличие таких подключений на удаленном сервере.Разрешено параллельное подтверждение на серверах postgres_fdw (Etsuro Fujita) §
Это включается с помощью опции
CREATE SERVERparallel_commit.
E.39.4. Благодарности
Следующие лица (в алфавитном порядке) внесли свой вклад в этот выпуск в качестве авторов патчей, разработчиков, рецензентов, тестировщиков или сообщили об обнаруженных проблемах.
| Abhijit Menon-Sen |
| Adam Brusselback |
| Adam Mackler |
| Adrian Ho |
| Ahsan Hadi |
| Ajin Cherian |
| Alastair McKinley |
| Aleksander Alekseev |
| Ales Zeleny |
| Alex Kingsborough |
| Alex Kozhemyakin |
| Alexander Korotkov |
| Alexander Kukushkin |
| Alexander Lakhin |
| Alexander Nawratil |
| Alexander Pyhalov |
| Alexey Borzov |
| Alexey Ermakov |
| Аляксандр Каленік |
| Álvaro Herrera |
| Amit Kapila |
| Amit Khandekar |
| Amit Langote |
| Amul Sul |
| Anastasia Lubennikova |
| Андерс Касеорг |
| Andreas Dijkman |
| Andreas Grob |
| Andreas Seltenreich |
| Andrei Zubkov |
| Andres Freund |
| Andrew Alsup |
| Andrew Bille |
| Andrew Dunstan |
| Andrew Gierth |
| Andrew Kesper |
| Andrey Borodin |
| Andrey Lepikhov |
| Andrey Sokolov |
| Andy Fan |
| Anton Melnikov |
| Anton Voloshin |
| Antonin Houska) |
| Arjan van de Ven |
| Arne Roland |
| Arthur Zakirov |
| Ashutosh Bapat |
| Ashutosh Sharma |
| Ashwin Agrawal |
| Asif Rehman |
| Asim Praveen |
| Atsushi Torikoshi |
| Aya Iwata |
| Bauyrzhan Sakhariyev |
| Benoit Lobréau |
| Bernd Dorn |
| Bertrand Drouvot |
| Bharath Rupireddy |
| Björn Harrtell |
| Boris Kolpackov |
| Boris Korzun |
| Brad Nicholson |
| Brar Piening |
| Bruce Momjian |
| Bruno da Silva |
| Bryn Llewellyn |
| Carl Sopchak |
| Cary Huang |
| Chapman Flack |
| Chen Jiaoqian |
| Chris Bandy |
| Chris Lowder |
| Christian Quest |
| Christoph Berg |
| Christoph Heiss |
| Christophe Pettus |
| Christopher Painter-Wakefield |
| Claudio Freire |
| Clemens Zeidler |
| Corey Huinker |
| Dag Lem |
| Dagfinn Ilmari Mannsåker |
| Dan Kubb |
| Daniel Cherniy |
| Daniel Gustafsson |
| Daniel Polski |
| Daniel Vérité |
| Daniel Westermann |
| Daniele Varrazzo |
| Daniil Anisimov |
| Danny Shemesh |
| Darafei Praliaskouski |
| Daria Lepikhova |
| Dave Cramer |
| Dave Page |
| David Christensen |
| David Fetter |
| David G. Johnston |
| David Rowley |
| David Steele |
| David Zhang |
| Dean Rasheed |
| Dian Fay |
| Dilip Kumar |
| Dipesh Pandit |
| Dmitry Dolgov |
| Dmitry Koval |
| Dmitry Marakasov |
| Dominique Devienne |
| Dong Wook |
| Drew DeVault |
| Eduard Català |
| Egor Chindyaskin |
| Egor Rogov |
| Ekaterina Kiryanova |
| Elena Indrupskaya |
| Elvis Pranskevichus |
| Emmanuel Quincerot |
| Emre Hasegeli |
| Eric Mutta |
| Erica Zhang |
| Erik Rijkers |
| Erki Eessaar |
| Etsuro Fujita |
| Euler Taveira |
| Fabien Coelho |
| Fabrice Chapuis |
| Fabrice Fontaine |
| Fabrízio de Royes Mello |
| Фейке Стенберген |
| Filip Gospodinov |
| Florin Irion |
| Floris Van Nee |
| Frédéric Yhuel |
| Gabriela Serventi |
| Gaurab Dey |
| Geoff Winkless |
| Geoffrey Blake |
| Georgios Kokolatos |
| Gilles Darold |
| Greg Nancarrow |
| Greg Rychlewski |
| Greg Sabino Mullane |
| Greg Stark |
| Gregory Smith |
| Guillaume Lelarge |
| Gunnar Bluth |
| Gurjeet Singh |
| Haiyang Wang |
| Haiying Tang |
| Hannu Krosing |
| Hans Buschmann |
| Hayato Kuroda |
| Heath Lord |
| Heikki Linnakangas |
| Herwig Goemans |
| Himanshu Upadhyaya |
| Holly Roberts |
| Hou Zhijie |
| Hubert Lubaczewski |
| Ian Barwick |
| Ian Campbell |
| Ibrar Ahmed |
| Ildus Kurbangaliev |
| Ilya Anfimov |
| Itamar Gafni |
| Jacob Champion |
| Jaime Casanova |
| Jakub Wartak |
| James Coleman |
| James Hilliard |
| James Inform |
| Jan Piotrowski |
| Japin Li |
| Jason Harvey |
| Jason Kim |
| Jean-Christophe Arnu |
| Jeevan Ladhe |
| Jeff Davis |
| Jeff Janes |
| Jehan-Guillaume de Rorthais |
| Jelte Fennema |
| Jeremy Evans |
| Jeremy Schneider |
| Jian Guo |
| Jian He |
| Jimmy Yih |
| Jiri Fejfar |
| Jitka Plesníková |
| Джо Конвей |
| Joe Wildish |
| Joel Jacobson |
| Joey Bodoia |
| John Naylor |
| Jonathan Katz |
| Josef Simanek |
| Joseph Koshakow |
| Josh Soref |
| Joshua Brindle |
| Juan José Santamaría Flecha |
| Julien Rouhaud |
| Julien Roze |
| Junwang Zhao |
| Jürgen Purtz |
| Justin Pryzby |
| Ken Kato |
| Kevin Burke |
| Kevin Grittner |
| Kevin Humphreys |
| Kevin McKibbin |
| Kevin Sweet |
| Kevin Zheng |
| Klaudie Willis |
| Konstantin Knizhnik |
| Konstantina Skovola |
| Kosei Masumura |
| Kotaro Kawamoto |
| Koyu Tanigawa |
| Kuntal Ghosh |
| Kyotaro Horiguchi |
| Lars Kanis |
| Lauren Fliksteen |
| Laurent Hasson |
| Laurenz Albe |
| Leslie Lemaire |
| Liam Bowen |
| Lingjie Qiang |
| Liu Huailing |
| Louis Jachiet |
| Lukas Fittl |
| Ma Liangzhu |
| Maciek Sakrejda |
| Magnus Hagander |
| Mahendra Singh Thalor |
| Maksim Milyutin |
| Marc Bachmann |
| Marcin Krupowicz |
| Marcus Gartner |
| Marek Szuba |
| Marina Polyakova |
| Mario Emmenlauer |
| Mark Dilger |
| Mark Murawski |
| Mark Wong |
| Markus Wanner |
| Markus Winand |
| Martijn van Oosterhout |
| Martin Jurca |
| Martin Kalcher |
| Martín Marqués |
| Masahiko Sawada |
| Masahiro Ikeda |
| Masao Fujii |
| Masaya Kawamoto |
| Masayuki Hirose |
| Matthias van de Meent |
| Matthijs van der Vleuten |
| Maxim Orlov |
| Maxim Yablokov |
| Melanie Plageman |
| Michael Banck |
| Michael Harris |
| Michael J. Sullivan |
| Michael Meskes |
| Michael Mühlbeyer |
| Michael Paquier |
| Michael Powers |
| Mike Fiedler |
| Mike Oh |
| Mikhail Kulagin |
| Miles Delahunty |
| Naoki Okano |
| Nathan Bossart |
| Nathan Long |
| Nazir Bilal Yavuz |
| Neha Sharma |
| Neil Chen |
| Nicola Contu |
| Nicolas Lutic |
| Nikhil Benesch |
| Nikhil Shetty |
| Nikhil Sontakke |
| Nikita Glukhov |
| Nikolai Berkoff |
| Nikolay Samokhvalov |
| Nikolay Shaplov |
| Nitin Jadhav |
| Noah Misch |
| Noboru Saito |
| Noriyoshi Shinoda |
| Olaf Bohlen |
| Olly Betts |
| Onder Kalaci |
| Oskar Stenberg |
| Otto Kekalainen |
| Paul Guo |
| Paul Jungwirth |
| Paul Martinez |
| Pavan Deolasee |
| Pavel Borisov |
| Pavel Luzanov |
| Pavel Stehule |
| Peter Eisentraut |
| Peter Geoghegan |
| Peter Slavov |
| Peter Smith |
| Petr Jelínek |
| Phil Florent |
| Phil Krylov |
| Pierre-Aurélien Georges |
| Prabhat Sahu |
| Quan Zongliang |
| Rachel Heaton |
| Rahila Syed |
| Rajakavitha Kodhandapani |
| Rajkumar Raghuwanshi |
| Ranier Vilela |
| Rei Kamigishi |
| Reid Thompson |
| Rémi Lapeyre |
| Renan Soares Lopes |
| Richard Guo |
| Richard Wesley |
| RKN Sai Krishna |
| Robert Haas |
| Роберт Трит |
| Roberto Mello |
| Robins Tharakan |
| Roger Mason |
| Roman Zharkov |
| Ронан Дунклау |
| Rui Zhao |
| Ryan Kelly |
| Ryo Matsumura |
| Ryohei Takahashi |
| Sadhuprasad Patro |
| Сайт Талха Нисанчи |
| Sami Imseih |
| Sandeep Thakkar |
| Sebastian Kemper |
| Sehrope Sarkuni |
| Sergei Kornilov |
| Sergei Shoulbakov |
| Sergey Shinderuk |
| Shay Rojansky |
| Shenhao Wang |
| Shi Yu |
| Shinya Kato |
| Shruthi Gowda |
| Simon Perepelitsa |
| Simon Riggs |
| Sirisha Chamarthi |
| Soumyadeep Chakraborty |
| Stan Hu |
| Stas Kelvich |
| Stefen Hillman |
| Stephen Frost |
| Steve Chavez |
| Sumanta Mukherjee |
| Suraj Khamkar |
| Suraj Kharage |
| Sven Klemm |
| Takamichi Osumi |
| Takayuki Tsunakawa |
| Takeshi Ideriha |
| Tatsuhiro Nakamori |
| Tatsuhito Kasahara |
| Tatsuo Ishii |
| Tatsuro Yamada |
| Teja Mupparti |
| Федор Сигаев |
| Thibaud Walkowiak |
| Thom Brown |
| Thomas McKay |
| Томас Манро |
| Tim McNamara |
| Timo Stolz |
| Тимур Ханжанов |
| Tom Lane |
| Tomas Barton |
| Tomas Vondra |
| Tony Reix |
| Troy Frericks |
| Tushar Ahuja |
| Victor Wagner |
| Victor Yegorov |
| Vignesh C |
| Vik Fearing |
| Vincas Dargis |
| Vitaly Burovoy |
| Vitaly Voronov |
| Vladimir Sitnikov |
| Wang Ke |
| Wei Sun |
| Wei Wang |
| Whale Song |
| Will Mortensen |
| Wolfgang Walther |
| Yanliang Lei |
| Yaoguang Chen |
| Yogendra Suralkar |
| YoungHwan Joo |
| Yugo Nagata |
| Yukun Wang |
| Yura Sokolov |
| Yusuke Egashira |
| Yuzuko Hosoya |
| Zhang Mingli |
| Zhang Wenjie |
| Zhihong Yu |
| Zhiyong Wu |