E.30. Релиз 15#
E.30. Релиз 15
Дата релиза: 2022-10-13
E.30.1. Обзор
PostgreSQL 15 содержит множество новых функций и улучшений, включая:
Поддержка команды SQL
MERGE
.Выборочная публикация содержимого таблиц в рамках публикаций логической репликации, позволяющая указывать списки столбцов и условия фильтрации строк.
Больше вариантов сжатия, включая поддержку сжатия Zstandard (zstd). Это включает поддержку сжатия на стороне сервера во время pg_basebackup.
Поддержка структурированного вывода серверного журнала с использованием формата JSON.
Улучшение производительности, особенно для сортировки в памяти и на диске.
Вышеуказанные элементы и другие новые функции PostgreSQL 15 подробно объясняются в следующих разделах.
E.30.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()
вместо этого.На платформах, отличных от Windows, переменная окружения
HOME
используется для определения домашнего каталога пользователя (Anders Kaseorg) §Если переменная
HOME
пуста или не установлена, используется предыдущий метод проверки базы данных<pwd.h>
. Это изменение затрагивает libpq (например, при поиске файла~/.pgpass
), а также различные клиентские приложения.Удалена опция
--no-synchronized-snapshots
из pg_dump (Том Лейн) §Все поддерживаемые версии сервера поддерживают синхронизированные снимки, поэтому больше нет необходимости в этой опции.
После обнаружения ошибки в режиме
--single-transaction
psql, финальная командаCOMMIT
изменена наROLLBACK
только если установленоON_ERROR_STOP
(Michael Paquier) §Избегалось ненужное приведение типов констант в запросах, отправленных postgres_fdw (Dian Fay) §
Когда типы столбцов намеренно отличаются между локальной и удаленной базами данных, такие приведения типов могут вызывать ошибки.
Удалена функция
xml_is_well_formed()
из xml2 (Том Лейн) §Эта функция была реализована в основном ядре с версии Postgres 9.1.
Разрешено поставщикам пользовательского сканирования указывать, поддерживают ли они проекции (Свен Клемм) §
Теперь по умолчанию предполагается, что пользовательские поставщики сканирования не поддерживают проекции; те, которые поддерживают, должны быть обновлены для этого релиза.
E.30.3. Изменения
Ниже вы найдете подробное описание различий между PostgreSQL 15 и предыдущим мажорным релизом.
E.30.3.1. Сервер
Запись и проверка версии сортировки каждой базы данных (Петер Айзентраут) §
Эта функция предназначена для обнаружения изменений версии сортировки для предотвращения повреждения индекса. Функция
pg_database_collation_actual_version()
сообщает версию сортировки операционной системы, аALTER DATABASE ... REFRESH
устанавливает записанную версию сортировки базы данных в соответствии с версией сортировки операционной системы.Разрешено ICU устанавливать сортировки в качестве значения по умолчанию для кластеров и баз данных (Питер Айзентраут) §
Ранее, только сортировки, основанные на libc, могли быть выбраны на уровне кластера и базы данных. Правила сортировки ICU могли использоваться только через явные предложения
COLLATE
.Добавлено системное представление
pg_ident_file_mappings
для отчета информации изpg_ident.conf
(Жюльен Рухауд) §
E.30.3.1.1. Секционирование
Улучшено время планирования для запросов, ссылающихся на секционированные таблицы (Дэвид Роули) §
Это изменение полезно, когда только несколько из множества секций являются актуальными.
Разрешено упорядоченное сканирование разделов для избежания сортировки в большем количестве случаев (Дэвид Роули) §
Ранее, таблица с секционированием, содержащая секцию
DEFAULT
или секциюLIST
с несколькими значениями, не могла использоваться для упорядоченного сканирования секций. Теперь они могут использоваться, если такие секции удаляются во время планирования.Улучшено поведение внешнего ключа при обновлениях в секционированных таблицах, которые перемещают строки между секциями (Amit Langote) §
Ранее такие обновления выполняли действие удаления на исходной секции и действие вставки на целевой секции. PostgreSQL теперь будет выполнять действие обновления на корневом разделе, обеспечивая более чистую семантику.
Разрешено
CLUSTER
на секционированных таблицах (Джастин Пшибы) § §Исправлено
ALTER TRIGGER RENAME
на секционированных таблицах для правильного переименования триггеров на всех секциях (Арне Роланд, Альваро Эррера) §Также запрещено переименовывание клонированных триггеров.
E.30.3.1.2. Индексы
Разрешены индексы btree на системных и TOAST таблицах для эффективного хранения дубликатов (Питер Геогеган) §
Ранее дедупликация была отключена для этих типов индексов.
Улучшена производительность поиска индексов GiST, которые были построены с использованием сортировки (Александр Каленик, Сергей Шульбаков, Андрей Бородин) §
Разрешено уникальным ограничениям и индексам рассматривать
NULL
значения как неразличимые (Питер Айзентраут) §Ранее записи с
NULL
всегда рассматривались как отдельные значения, но теперь это можно изменить, создав ограничения и индексы с использованиемUNIQUE NULLS NOT DISTINCT
.Разрешено оператору
^@
starts-with и функцииstarts_with()
использовать btree индексы при использовании C коллации (Tom Lane) §Ранее они могли использовать только индексы SP-GiST.
E.30.3.1.3. Оптимизатор
Разрешено расширенной статистике записывать статистику для родителя со всеми его потомками (Томаш Вондра, Джастин Призби) §
Стандартный инструмент статистики уже отслеживал статистику «только родитель» и статистику «родители плюс все дочерние элементы» по отдельности.
Добавлена серверная переменная
recursive_worktable_factor
для того, чтобы пользователю было позволено указать ожидаемый размер рабочей таблицы рекурсивного запроса (Саймон Риггс) §
E.30.3.1.4. Общая производительность
Разрешен хеш-поиск для
NOT IN
выражений с множеством констант (Дэвид Роули, Джеймс Коулман) §Ранее код всегда последовательно сканировал список значений.
Разрешено
SELECT DISTINCT
быть параллелизированным (David Rowley) §Ускорена проверка кодировки текста UTF-8 за счет обработки 16 байт за раз (Джон Нейлор, Хейкки Линкангас) §
Это улучшит операции с большим объемом текста, такие как
COPY FROM
.Улучшена производительность для сортировок, которые превышают
work_mem
(Хейки Линкангас) § §Когда данные для сортировки больше не помещаются в переменную
work_mem
, переключитесь на алгоритм сортировки по партиям, который использует больше выходных потоков, чем раньше.Улучшена производительность и снижено потребление памяти для сортировок в памяти (Ронан Данкло, Дэвид Роули, Томас Манро, Джон Нейлор) § § §
Разрешено WAL полное запись страниц использовать сжатие LZ4 и Zstandard (Андрей Бородин, Джастин Пшибы) § §
Это контролируется настройкой сервера
wal_compression
.Добавлена поддержка записи WAL с использованием прямого ввода-вывода на macOS (Томас Мунро) §
Это работает только если
max_wal_senders = 0
иwal_level = minimal
.Разрешено вакууму быть более агрессивным в установке самого старого замороженного и мульти-транзакционного идентификатора (Питер Геогеган) §
Разрешено запросу, ссылающемуся на несколько внешних таблиц, выполнять параллельные сканирования внешних таблиц в большем числе случаев (Андрей Лепихов, Эцуро Фуджита) §
Улучшена производительность оконных функций, которые используют
row_number()
,rank()
,dense_rank()
иcount()
(David Rowley) §Улучшена производительность спинлоков на системах ARM64 с большим количеством ядер (Geoffrey Blake) §
E.30.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.30.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.30.3.1.7. Конфигурация сервера
Добавлена серверная переменная
shared_memory_size
для отчета о размере выделенной общей памяти (Натан Боссарт) § §Добавлена серверная переменная
shared_memory_size_in_huge_pages
для отчета о количестве требуемых больших страниц памяти (Натан Боссарт) § §Это поддерживается только в Linux.
Была учтена серверная переменная
shared_preload_libraries
в однопользовательском режиме (Джефф Дэвис) §Это изменение поддерживает использование
shared_preload_libraries
для загрузки пользовательских методов доступа и менеджеров ресурсов WAL, которые являются необходимыми для доступа к базе данных даже в однопользовательском режиме.На Solaris, сделана настройка по умолчанию
dynamic_shared_memory_type
какsysv
(Томас Мунро) §Предыдущий выбор по умолчанию,
posix
, может привести к ложным сбоям на этой платформе.Разрешено
postgres -C
правильно сообщать вычисленные во время выполнения значения (Натан Боссарт) §Ранее вычисляемые значения
data_checksums
,wal_segment_size
иdata_directory_mode
сообщали значения, которые не были точными на работающем сервере. Однако это не работает на работающем сервере.
E.30.3.2. Потоковая репликация и восстановление
Добавлена поддержка сжатия LZ4 и Zstandard для серверных базовых резервных копий (Дживан Ладхе, Роберт Хаас) § § §
Запуск процессов контрольной точки и фоновой записи во время аварийного восстановления (Томас Мунро) §
Это помогает ускорить долгое восстановление после сбоев.
Разрешена обработка WAL для предварительной выборки необходимых содержимых файлов (Томас Мунро) §
Это контролируется переменной сервера
recovery_prefetch
.Разрешено архивирование через загружаемые модули (Натан Боссарт) §
Ранее архивирование выполнялось только путем вызова команд оболочки. Новая переменная сервера
archive_library
может быть установлена для указания библиотеки, которая будет вызываться для архивирования.Больше не требуется, чтобы
IDENTIFY_SYSTEM
выполнялся передSTART_REPLICATION
(Джефф Дэвис) §
E.30.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.30.3.3. Утилиты
Добавлена команда SQL
MERGE
для приведения одной таблицы в соответствие с другой (Саймон Риггс, Паван Деоласе, Альваро Эррера, Амит Ланготе) §Это похоже на
INSERT ... ON CONFLICT
, но более ориентировано на пакетную обработку.Добавлена поддержка опции
HEADER
в текстовом форматеCOPY
(Реми Лапейр) § §Новая опция вызывает вывод и, при необходимости, проверку имен столбцов при вводе.
Добавлен новый метод с WAL-журналированием для создания базы данных (Dilip Kumar) §
Это новый метод по умолчанию для копирования шаблонной базы данных, так как он избегает необходимости создания контрольных точек во время создания базы данных. Однако, если шаблонная база данных большая, то этот метод может работать медленно, поэтому старый метод все еще доступен.
Разрешено
CREATE DATABASE
устанавливать OID базы данных (Шрути Говда, Антонин Хоушка) §Предотвращено случайное сбойное выполнение
DROP DATABASE
,DROP TABLESPACE
иALTER DATABASE SET TABLESPACE
при одновременном использовании в Windows (Томас Мунро) §Разрешены действия внешнего ключа
ON DELETE SET
для воздействия только на указанные столбцы (Пол Мартинес) §Ранее все столбцы внешнего ключа всегда затрагивались.
Разрешено
ALTER TABLE
изменятьACCESS METHOD
таблицы (Джастин Призби, Джефф Дэвис) §Правильный вызов хуков доступа к объектам, когда
ALTER TABLE
вызывает переписывание таблиц (Майкл Пакье) §Разрешено создание незалогированных последовательностей (Питер Айзентраут) §
Отслеживание зависимостей от отдельных столбцов в результатах функций, возвращающих составные типы (Том Лейн) §
Ранее, если представление или правило содержало ссылку на конкретный столбец в результате функции, возвращающей составной тип, это не отмечалось как зависимость; представление или правило считались зависимыми только от всего составного типа. Это означало, что удаление отдельного столбца было разрешено, что вызывало проблемы при последующем использовании представления или правила. Теперь также отмечается зависимость на уровне столбца, поэтому удаление такого столбца будет отклонено, если представление не изменено или удалено.
E.30.3.4. Типы данных
Разрешено, чтобы масштаб
numeric
значения был отрицательным или больше его точности (Дин Рашид, Том Лейн) §Это позволяет округлять значения слева от десятичной точки, например,
'1234'::numeric(4, -2)
возвращает 1200.Улучшено обнаружение переполнения при приведении значений к интервалу (Джо Кошаков) §
Изменён формат ввода-вывода типа
"char"
для не-ASCII символов (Tom Lane) §Обновлена информация о ширине отображения современных символов Unicode, таких как эмодзи (Джейкоб Чемпион) § §
Также обновите с Unicode 5.0 до 14.0.0. Теперь есть автоматизированный способ поддерживать актуальность Postgres с релизами Unicode.
E.30.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.30.3.6. PL/pgSQL
E.30.3.7. libpq
Разрешено сопоставление IP-адреса с альтернативным именем субъекта в сертификате сервера (Джейкоб Чемпион) §
Позволено
PQsslAttribute()
сообщать о типе библиотеки SSL без необходимости подключения libpq (Джейкоб Чемпион) §Изменения отмены запросов, отправленных клиентом, чтобы использовать те же настройки TCP, что и обычные клиентские подключения (Jelte Fennema) §
Это позволяет применять настроенные таймауты TCP к соединениям для отмены запросов.
Предотвращены сбои обратного вызова события libpq, приводящие к ошибочному результату (Tom Lane) § §
E.30.3.8. Клиентские приложения
E.30.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.30.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.30.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.30.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.30.3.9.2. pg_waldump
Разрешен вывод pg_waldump фильтроваться по узлу файла отношения, номеру блока, номеру вилки и полным изображениям страниц (Дэвид Кристенсен, Томас Мунро) § §
Сделано так, чтобы pg_waldump сообщал статистику перед прерванным выходом (Бхарат Рупиредди) §
Например, нажатие комбинации клавиш Control-C в терминале, запущенном с командой
pg_waldump --stats --follow
, приведет к выводу текущей статистики перед выходом. Это не работает в Windows.Улучшены описания некоторых записей транзакций WAL, сообщаемых pg_waldump (Масахико Савада, Майкл Пакье) §
Разрешено pg_waldump выводить информацию о нескольких менеджерах ресурсов (Хейкки Линнакангас) §
Это включается путем указания опции
--rmgr
несколько раз.
E.30.3.10. Документация
Добавлена документация для
pg_encoding_to_char()
иpg_char_to_encoding()
(Иан Лоуренс Барвик) §
E.30.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()
для получения флагов серверных переменных (Джастин Пшибы) §На Windows все глобальные переменные сервера были экспортированы с использованием маркеров
PGDLLIMPORT
(Роберт Хаас) §Ранее, только определенные переменные были доступны расширениям в Windows.
Требуется версия GNU make 3.81 или более поздняя для сборки PostgreSQL (Tom Lane) §
Для сборки расширения pgcrypto требовался OpenSSL (Петер Айзентраут) §
Требуется Perl версии 5.8.3 или более поздней (Dagfinn Ilmari Mannsåker) §
Требуется Python версии 3.2 или более поздней (Андрес Фройнд) §
E.30.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.30.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 SERVER
parallel_commit
.
E.30.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 |
Anders Kaseorg |
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 |