E.15. Выпуск 16#
E.15. Выпуск 16 #
Дата релиза: 2023-09-14
E.15.1. Обзор #
PostgreSQL 16 содержит много новых функций и улучшений, включая:
Разрешена параллелизация
FULL
и внутреннего правогоOUTER
хэш-соединенияРазрешена логическая репликация с резервных серверов
Разрешено подписчикам логической репликации применять большие транзакции параллельно
Разрешено мониторинг статистики I/O с использованием нового представления
pg_stat_io
Добавлены SQL/JSON конструкторы и функции идентичности
Улучшена производительность замораживания vacuum
Добавлена поддержка сопоставления регулярных выражений для имен пользователей и баз данных в
pg_hba.conf
, и имен пользователей вpg_ident.conf
Вышеперечисленные элементы и другие новые функции PostgreSQL 16 объяснены более подробно в разделах ниже.
E.15.2. Миграция на версию 16 #
Для тех, кто желает перенести данные с любой предыдущей версии, требуется выполнить дамп/восстановление с использованием pg_dumpall или использовать pg_upgrade или логическую репликацию. См. Раздел 17.6 для получения общей информации о миграции на новые основные версии.
Версия 16 содержит ряд изменений, которые могут повлиять на совместимость с предыдущими выпусками. Следующие несовместимости должны быть учтены:
Изменены правила присвоения для PL/pgSQL связанных переменных курсора (Tom Lane) §
Ранее строковое значение таких переменных устанавливалось в соответствии с именем переменной при присвоении курсора; теперь оно будет присваиваться во время
OPEN
, и не будет совпадать с именем переменной. Чтобы восстановить прежнее поведение, присвойте желаемое имя портала переменной курсора передOPEN
.Запрещены индексы
NULLS NOT DISTINCT
для первичных ключей (Даниэль Густафссон) §Изменено
REINDEX DATABASE
и reindexdb, чтобы не обрабатывать индексы в системных каталогах (Саймон Риггс) § §Обработка таких индексов все еще возможна с использованием
REINDEX SYSTEM
иreindexdb --system
.Ужесточены ограничения выражений
GENERATED
на унаследованных и секционированных таблицах (Амит Ланготе, Том Лейн) §Столбцы родительских/секционированных и дочерних/секционированных таблиц должны иметь одинаковый статус генерирования, хотя теперь фактические генерирующего выражения могут быть разными.
Удалены функции pg_walinspect
pg_get_wal_records_info_till_end_of_wal()
иpg_get_wal_stats_till_end_of_wal()
(Bharath Rupireddy) §Переименована серверная переменная
force_parallel_mode
вdebug_parallel_query
(Дэвид Роули) § §Удалена возможность создавать представления вручную с помощью правил
ON SELECT
(Tom Lane) §Удалена серверная переменная
vacuum_defer_cleanup_age
(Андрес Фройнд) §Это было ненужно с тех пор, как
hot_standby_feedback
и слоты репликации были добавлены.Переменная сервера
promote_trigger_file
удалена (Саймон Риггс) §Это использовалось для повышения резервного сервера до основного, но теперь это легче выполняется с помощью
pg_ctl promote
илиpg_promote()
.Удалены серверные переменные только для чтения
lc_collate
иlc_ctype
(Петер Айзентраут) §Сопоставления и локали могут различаться между базами данных, поэтому их наличие в качестве серверных переменных только для чтения было бесполезным.
Наследование ролей теперь контролирует статус наследования по умолчанию для добавленных ролей-участников во время
GRANT
(Роберт Хаас) §Поведение наследования по умолчанию для роли может быть переопределено с помощью нового предложения
GRANT ... WITH INHERIT
. Это позволяет наследовать некоторые роли, а не другие, потому что статус наследования участников устанавливается во времяGRANT
. Ранее статус наследования ролей-участников контролировался только статусом наследования роли, и изменения в статусе наследования роли влияли на все предыдущие и будущие роли-участники.Ограничены привилегии
CREATEROLE
и его способность изменять другие роли (Роберт Хаас) § §Ранее роли с привилегиями
CREATEROLE
могли изменять многие аспекты любой роли, не являющейся суперпользователем. Такие изменения, включая добавление участников, теперь требуют, чтобы роль, запрашивающая изменение, имела разрешениеADMIN OPTION
. Например, теперь они могут изменять свойстваCREATEDB
,REPLICATION
иBYPASSRLS
только в том случае, если у них также есть эти разрешения.Символические ссылки для бинарного файла postmaster были удалены (Петер Айзенраут) §
E.15.3. Изменения #
Ниже приведен подробный отчет об изменениях между PostgreSQL 16 и предыдущим основным выпуском.
E.15.3.1. Сервер #
E.15.3.1.1. Оптимизатор #
Разрешены инкрементные сортировки в большем числе случаев, включая
DISTINCT
(Дэвид Роули) § §Добавлена возможность для агрегатов с
ORDER BY
илиDISTINCT
использовать предварительно отсортированные данные (Дэвид Роули) § § §Новая серверная переменная
enable_presorted_aggregate
может быть использована для отключения этого.Разрешено использование мемоизации поверх
UNION ALL
(Ричард Гуо) §Разрешено выполнение анти-соединений с ненулевым вводом в качестве внутреннего отношения (Ричард Гуо) §
Разрешена параллелизация
FULL
и внутренних правыхOUTER
хеш-соединений (Мелани Плагеман, Томас Мунро) §Улучшена точность оценок стоимости доступа к индексу
GIN
оптимизатором (Ronan Dunklau) §
E.15.3.1.2. Общая производительность #
Разрешено более эффективное добавление страниц кучи и индекса (Андрес Фройнд) § §
Во время операций, не связанных с заморозкой, выполняется заморозка страниц, где это уместно (Питер Геогеган) § § §
Это делает полные вакуумы заморозки таблиц менее необходимыми.
Разрешено оконным функциям использовать более быстрый
ROWS
режим внутренне, когда активен, но не требуется режимRANGE
(Дэвид Роули) §Разрешена оптимизация всегда увеличивающихся оконных функций
ntile()
,cume_dist()
иpercent_rank()
(David Rowley) §Разрешено агрегатным функциям
string_agg()
иarray_agg()
быть распараллелены (David Rowley) §Улучшена производительность за счет кэширования
RANGE
иLIST
поиска разделов (Amit Langote, Hou Zhijie, David Rowley) §Разрешено управление использованием разделяемого буфера вакуумом и анализом (Мелани Плагеман) § § §
Опция
VACUUM
/ANALYZE
- этоBUFFER_USAGE_LIMIT
, а опция vacuumdb - это--buffer-usage-limit
. Значение по умолчанию задается серверной переменнойvacuum_buffer_usage_limit
, которая также контролирует autovacuum.Поддержка
wal_sync_method=fdatasync
на Windows (Томас Мунро) §Разрешены обновления с HOT, если обновлены только колонки, индексированные с помощью
BRIN
(Маттиас ван де Меент, Йозеф Симанек, Томаш Вондра) §Улучшена скорость обновления заголовка процесса (Дэвид Роули) §
Разрешены поиски
xid
/subxid
и обнаружение строк в ASCII с использованием векторных операций (Натан Боссарт, Джон Нейлор) § § § §ASCII обнаружение особенно полезно для
COPY FROM
. Векторные операции также использованы для некоторых поисков в массивах C.Снижена нагрузка на выделение памяти (Андрес Фройнд, Дэвид Роули) §
E.15.3.1.3. Мониторинг #
Добавлено системное представление
pg_stat_io
для отслеживания статистики I/O (Мелани Плагеман) § § § § §Запись статистики о последних последовательных и индексных сканированиях таблиц (Дэйв Пейдж) §
Эта информация отображается в
pg_stat_*_tables
иpg_stat_*_indexes
.Запись статистики о случаях перемещения обновленных строк на новые страницы (Кори Хуинкер) §
Колонка
pg_stat_*_tables
n_tup_newpage_upd
.Добавлена информация о спекулятивных блокировках в системное представление
pg_locks
(Масахико Савада, Норийоши Шинода) §Идентификатор транзакции отображается в
transactionid
столбце, а токен спекулятивной вставки отображается вobjid
столбце.Добавлено отображение типов результатов подготовленных операторов в представление
pg_prepared_statements
(Дагфинн Илмари Маннсокер) § §Созданы записи статистики подписки во время создания подписки, чтобы
stats_reset
был точным (Андрес Фройнд) §Ранее записи создавались только при первом сообщении о статистике.
Исправлен учет I/O для записей временных отношений, показанных в
pg_stat_database
(Мелани Плагеман) §Добавлена функция
pg_stat_get_backend_subxact()
для отчета о кэше подтранзакций сессии (Дилип Кумар) §Были использованы
pg_stat_get_backend_idset()
,pg_stat_get_backend_activity()
и связанные функции с использованием неизменяемого идентификатора бэкенда (Натан Боссарт) §Ранее значения индекса могли изменяться в течение сессии.
Отдельные серверные процессы были отмечены специальным типом серверного процесса (Мелани Плагеман) §
Добавлено событие ожидания
SpinDelay
для отчета о задержках сна спинлока (Андрес Фройнд) §Создано новое событие ожидания
DSMAllocate
для указания ожидания выделения динамической общей памяти (Томас Мунро) §Ранее этот тип ожидания был сообщен как
DSMFillZeroWrite
, который также использовался для выделенийmmap()
.Добавлено имя базы данных в заголовок процесса логических отправителей WAL (Tatsuhiro Nakamori) §
Физические отправители WAL не отображают имя базы данных.
Добавлена информация о контрольной точке и
REDO LSN
в сообщенияlog_checkpoints
(Бхарат Рупиредди, Кётаро Хоригучи) §Предоставлены дополнительные детали при сбоях клиентского сертификата (Джейкоб Чемпион) §
E.15.3.1.4. Привилегии #
Добавлена предопределенная роль
pg_create_subscription
с разрешением на создание подписок (Роберт Хаас) §Разрешено подпискам не требовать пароли (Роберт Хаас) § § §
Это было достигнуто с опцией
password_required=false
.Упрощены разрешения для
LOCK TABLE
(Джефф Дэвис) §Ранее возможность пользователя выполнять
LOCK TABLE
на различных уровнях блокировки была ограничена уровнями блокировки, требуемыми командами, которые они имели разрешение выполнять на таблице. Например, кто-то с разрешениемUPDATE
мог выполнять все уровни блокировки, кромеACCESS SHARE
, даже если это был более низкий уровень блокировки. Теперь пользователи могут выдавать более низкие уровни блокировки, если у них уже есть разрешение на более высокие уровни блокировки.Разрешено
ALTER GROUP group_name ADD USER user_name
выполняться сADMIN OPTION
(Роберт Хаас) §Ранее требовалось разрешение
CREATEROLE
.Разрешено
GRANT
использовать синтаксисWITH ADMIN TRUE
/FALSE
(Роберт Хаас) §Ранее поддерживался только синтаксис
WITH ADMIN OPTION
.Разрешено ролям, которые создают другие роли, автоматически наследовать права новой роли или возможность
SET ROLE
для новой роли (Роберт Хаас, Ши Ю) § §Это контролируется серверной переменной
createrole_self_grant
.Предотвращено изменение пользователями привилегий по умолчанию для неунаследованных ролей (Роберт Хаас) §
Это теперь разрешено только для унаследованных ролей.
При предоставлении членства в роли требуется, чтобы роль, предоставляющая права, была ролью, имеющей соответствующие разрешения (Роберт Хаас) §
Это требование даже в случае, когда членство в роли предоставляется не суперпользователем начальной загрузки.
Разрешено несуперпользователям предоставлять разрешения, используя пользователя, предоставившего права, который не является текущим пользователем (Роберт Хаас) §
Текущий пользователь все еще должен иметь достаточные разрешения, предоставленные указанным пользователем, который предоставил.
Добавлена
GRANT
для управления разрешением на использованиеSET ROLE
(Роберт Хаас) §Это контролируется новой опцией
GRANT ... SET
.Добавлено отслеживание зависимостей для ролей, которым предоставлены привилегии (Роберт Хаас) §
Например, удаление
ADMIN OPTION
завершится неудачей, если существуют привилегии, использующие эту опцию; необходимо использоватьCASCADE
для отзыва зависимых разрешений.Добавлено отслеживание зависимостей грантодателей для записей
GRANT
(Роберт Хаас) §Это гарантирует, что
pg_auth_members
.grantor
значения всегда действительны.Разрешено наличие нескольких записей членства в роли (Роберт Хаас) § §
Ранее новое предоставление членства удаляло бы предыдущее соответствующее предоставление членства, даже если другие аспекты предоставления не совпадали.
Предотвращено удаление привилегий суперпользователя для пользователя начальной загрузки (Роберт Хаас) §
Восстановление таких пользователей могло привести к ошибкам.
Разрешено
makeaclitem()
принимать несколько имен привилегий (Робинс Тхаракан) §Ранее принималось только одно имя привилегии, например,
SELECT
.
E.15.3.1.5. Конфигурация сервера #
Добавлена поддержка делегирования учетных данных Kerberos (Stephen Frost) § § § §
Это было включено с помощью серверной переменной
gss_accept_delegation
и параметра подключения libpqgssdelegation
.Позволено установить количество итераций SCRAM с помощью серверной переменной
scram_iterations
(Даниэль Густафссон) §Улучшена производительность управления переменными сервера (Tom Lane) § §
Ужесточены ограничения на то, какие серверные переменные могут быть сброшены (Масахико Савада) §
Ранее, хотя некоторые переменные, такие как
transaction_isolation
, не затрагивалисьRESET ALL
, они могли быть индивидуально сброшены в неподходящих ситуациях.Перемещены различные элементы
postgresql.conf
в новые категории (Shinya Kato) §Это также влияет на категории, отображаемые в представлении
pg_settings
.Предотвращена рекурсия конфигурационного файла более чем на 10 уровней (Жюльен Рухауд) §
Разрешено автовакууму более часто учитывать изменения настроек задержки (Мелани Плагеман) § §
Вместо того чтобы учитывать изменения только в начале каждой связи, они учитываются в начале каждого блока.
Убраны ограничения на то, чтобы архивные файлы были надежно переименованы (Натан Боссарт) § §
Команда
archive_command
теперь с большей вероятностью будет вызвана с уже архивированными файлами после сбоя.Предотвращено одновременное задание
archive_library
иarchive_command
(Натан Боссарт) §Ранее
archive_library
переопределялarchive_command
.Разрешено завершение дочерних процессов постмастером с помощью сигнала прерывания (Tom Lane) §
Это позволяет собирать дамп памяти для зависшего дочернего процесса. Это контролируется
send_abort_for_crash
иsend_abort_for_kill
. Переключатель-T
постмастера теперь эквивалентен установкеsend_abort_for_crash
.Удалена нефункциональная опция postmaster
-n
(Tom Lane) §Разрешено серверу резервировать слоты для ролей с
pg_use_reserved_connections
членством (Натан Боссарт) §Количество зарезервированных слотов устанавливается серверной переменной
reserved_connections
.Разрешено использование больших страниц на более новых версиях Windows 10 (Томас Мунро) §
Это добавляет специальную обработку, необходимую для включения огромных страниц в новых версиях Windows 10.
Добавлена настройка
debug_io_direct
для использования разработчиками (Томас Мунро, Андрес Фройнд, Бхарат Рупиредди) § §Хотя в первую очередь для разработчиков,
wal_sync_method=open_sync
/open_datasync
был изменен, чтобы не использовать прямой I/O сwal_level=minimal
; теперь это включено сdebug_io_direct=wal
.Добавлена функция
pg_split_walfile_name()
для отчета о значениях сегмента и временной шкалы имен файлов WAL (Бхарат Рупиредди) § §
E.15.3.1.6. pg_hba.conf #
Добавлена поддержка сопоставления с регулярными выражениями для записей базы данных и ролей в
pg_hba.conf
(Бертран Друво) §Шаблоны регулярных выражений начинаются с косой черты. Имена баз данных и ролей, которые начинаются с косых черт, должны быть заключены в двойные кавычки, если они упоминаются в
pg_hba.conf
.Улучшена обработка пользовательских колонок в
pg_ident.conf
для соответствияpg_hba.conf
(Jelte Fennema) §В частности, добавлена поддержка
all
, членства в роли с+
, и регулярных выражений с ведущей косой чертой. Любое имя пользователя, соответствующее этим шаблонам, должно быть заключено в двойные кавычки.Разрешено включение файлов в
pg_hba.conf
иpg_ident.conf
(Жюльен Рухауд) §Эти параметры контролируются
include
,include_if_exists
иinclude_dir
. Системные представленияpg_hba_file_rules
иpg_ident_file_mappings
теперь отображают имя файла.Разрешено токенам в
pg_hba.conf
иметь неограниченную длину (Tom Lane) §Добавлены номера правил и карт в системное представление
pg_hba_file_rules
(Жюльен Рухауд) §
E.15.3.1.7. Локализация #
Определение кодировки по умолчанию из локали при использовании ICU (Джефф Дэвис) §
Ранее по умолчанию всегда использовался
UTF-8
.Опции
CREATE DATABASE
иCREATE COLLATION
LOCALE
, а также опции initdb и createdb--locale
, контролируют поставщиков правил сортировки, не относящихся к libc (Джефф Дэвис)Ранее они контролировались только провайдерами libc.
Добавлены предопределенные сортировки
unicode
иucs_basic
(Петер Айзентраут) §Это работает только если поддержка ICU включена.
Разрешено создание пользовательских правил сортировки ICU (Питер Айзентраут) §
Это было сделано с использованием нового предложения
RULES
вCREATE COLLATION
, а также новых опций дляCREATE DATABASE
, createdb, и initdb.Разрешено Windows автоматически импортировать системные локали (Хуан Хосе СантаМария Флеча) §
Ранее могли быть импортированы только локали ICU на Windows.
E.15.3.2. Логическая репликация #
Разрешено логическое декодирование на резервных серверах (Бертран Друво, Андрес Фройнд, Амит Хандекар) § § §
Снимки записей WAL требуются для создания логических слотов, но не могут быть созданы на резервных серверах. Чтобы избежать задержек, новая функция
pg_log_standby_snapshot()
позволяет создавать такие записи.Добавлена серверная переменная для управления тем, как издатели логического декодирования передают изменения и как подписчики их применяют (Shi Yu) § § §
Переменная
debug_logical_replication_streaming
.Разрешена начальная синхронизация таблицы логической репликации для копирования строк в бинарном формате (Мелих Мутлу) §
Это возможно только для подписок, отмеченных как двоичные.
Разрешено параллельное применение логической репликации (Hou Zhijie, Wang Wei, Amit Kapila) § § §
Опция
CREATE SUBSCRIPTION
STREAMING
теперь поддерживаетparallel
для включения применения больших транзакций параллельными рабочими. Количество параллельных рабочих контролируется новой серверной переменнойmax_parallel_apply_workers_per_subscription
. События ожиданияLogicalParallelApplyMain
,LogicalParallelApplyStateChange
иLogicalApplySendData
также были добавлены. Колонкаleader_pid
была добавлена в системное представлениеpg_stat_subscription
для отслеживания параллельной активности.Улучшена производительность для применения логической репликации без первичного ключа (Onder Kalaci, Amit Kapila) §
В частности,
REPLICA IDENTITY FULL
теперь может использовать btree индексы вместо последовательного сканирования таблицы для поиска совпадений.Разрешено подписчикам логической репликации обрабатывать только изменения, которые не имеют происхождения (Виньеш С, Амит Капила) § §
Это может быть использовано для предотвращения циклов репликации. Это контролируется новой опцией
CREATE SUBSCRIPTION ... ORIGIN
.Выполнение логической репликации
SELECT
и DML действий как владельца таблицы (Роберт Хаас) § §Это улучшает безопасность и теперь требует, чтобы владельцы подписок были либо суперпользователями, либо имели
SET ROLE
разрешение на все роли, владеющие таблицами в наборе репликации. Предыдущее поведение выполнения всех операций от имени владельца подписки может быть включено с помощью опции подпискиrun_as_owner
.wal_retrieve_retry_interval
настроен на работу на основе каждой подписки (Натан Боссарт) §Ранее время повторной попытки применялось глобально. Это также добавляет события ожидания >
LogicalRepLauncherDSA
иLogicalRepLauncherHash
.
E.15.3.3. Утилиты #
Добавлена опция
EXPLAIN
GENERIC_PLAN
для отображения общего плана для параметризованного запроса (Лауренц Альбе) §Разрешено значению
COPY FROM
отображаться наDEFAULT
столбца (Исраэль Барт Рубио) §Разрешено
COPY
в иностранные таблицы добавлять строки пакетами (Андрей Лепихов, Эцуро Фуджита) §Это контролируется опцией postgres_fdw
batch_size
.Разрешено указание типа
STORAGE
с помощьюCREATE TABLE
(Теодор Сигаев, Александр Алексеев) § §Ранее только
ALTER TABLE
могло это контролировать.Разрешены триггеры усечения на внешних таблицах (Юго Нагата) §
Разрешено
VACUUM
и vacuumdb обрабатывать только таблицыTOAST
(Натан Боссарт) §Это было достигнуто путем отключения
VACUUM
параметраPROCESS_MAIN
или с помощью vacuumdb с использованием опции--no-process-main
.Добавлены
VACUUM
опции для пропуска или обновления всех замороженных статистик (Том Лейн, Натан Боссарт) §Опции
SKIP_DATABASE_STATS
иONLY_DATABASE_STATS
.Изменены
REINDEX DATABASE
иREINDEX SYSTEM
так, чтобы больше не требовался аргумент (Саймон Риггс) § §Ранее имя базы данных должно было быть указано.
Разрешено
CREATE STATISTICS
генерировать имя статистики, если оно не указано (Саймон Риггс) §
E.15.3.4. Типы данных #
Разрешены недесятичные целочисленные литералы (Питер Айзентраут) §
Например,
0x42F
,0o273
, и0b100101
.Разрешено
NUMERIC
обрабатывать шестнадцатеричные, восьмеричные и двоичные целые числа любого размера (Дин Рашид) §Ранее поддерживались только некавыченные восьмибайтовые целые числа с этими недесятичными основаниями.
Разрешены символы подчеркивания в целочисленных и числовых константах (Питер Айзентраут, Дин Рашид) §
Это может улучшить читаемость для длинных строк цифр.
Было принято написание
+infinity
в вводе даты и времени (Вик Фиринг) §Предотвращено указание
epoch
иinfinity
вместе с другими полями в строках даты и времени (Joseph Koshakow) §Удалена недокументированная поддержка ввода даты в форме
Y
(Джозеф Кошаков) §year
Mmonth
Dday
Добавлены функции
pg_input_is_valid()
иpg_input_error_info()
для проверки ошибок преобразования типов (Tom Lane) § §
E.15.3.5. Общие запросы #
E.15.3.6. Функции #
Добавлены конструкторы SQL/JSON (Никита Глухов, Теодор Сигаев, Олег Бартунов, Александр Коротков, Амит Ланготе) §
Новые функции
JSON_ARRAY()
,JSON_ARRAYAGG()
,JSON_OBJECT()
иJSON_OBJECTAGG()
являются частью стандарта SQL.Добавлены проверки объектов SQL/JSON (Никита Глухов, Теодор Сигаев, Олег Бартунов, Александр Коротков, Амит Ланготе, Эндрю Данстан) §
Проверки
IS JSON
включают проверки значений, массивов, объектов, скаляров и уникальных ключей.Разрешен разбор строк JSON с использованием векторных операций (Джон Нейлор) §
Улучшена обработка функции выделения полного текста
ts_headline()
для выраженийOR
иNOT
(Tom Lane) §Добавлены функции для сложения, вычитания и генерации значений
timestamptz
в указанной временной зоне (Przemyslaw Sztoch, Gurjeet Singh) §Функции
date_add()
,date_subtract()
, иgenerate_series()
.Изменение
date_trunc(unit, timestamptz, time_zone)
на неизменяемую функцию (Przemyslaw Sztoch) §Это позволяет создавать индексы выражений с использованием этой функции.
Добавлена серверная переменная
SYSTEM_USER
(Бертран Друво) §Этот метод аутентификации и его аутентифицированный пользователь были сообщены.
Добавлены функции
array_sample()
иarray_shuffle()
(Мартин Кальхер) §Добавлена агрегатная функция
ANY_VALUE()
, которая возвращает любое значение из набора (Вик Фиринг) §Добавлена функция
random_normal()
для предоставления нормально распределённых случайных чисел (Пол Рэмси) §Добавлена функция ошибки
erf()
и её дополнениеerfc()
(Дин Рашид) §Улучшена точность числовой
power()
для целых показателей степени (Дин Рашид) §Добавлена опция
XMLSERIALIZE()
INDENT
для форматирования вывода (Jim Jones) §Изменено
pg_collation_actual_version()
для возврата разумного значения для коллации по умолчанию (Джефф Дэвис) §Ранее возвращалось
NULL
.Разрешено
pg_read_file()
иpg_read_binary_file()
игнорировать отсутствующие файлы (Киотаро Хоригучи) §Добавлена спецификация байтов (
B
) вpg_size_bytes()
(Петер Айзентраут) §Разрешено
to_reg
* функциям принимать числовые OID в качестве ввода (Tom Lane) §
Добавлена возможность получения OID текущей функции в PL/pgSQL (Pavel Stehule) §
Это было выполнено с помощью
GET DIAGNOSTICS variable = PG_ROUTINE_OID
.
Добавлена опция подключения libpq
require_auth
для указания списка допустимых методов аутентификации (Джейкоб Чемпион) §Это также может быть использовано для запрета определенных методов аутентификации.
Разрешено случайное выбор нескольких узлов, указанных libpq (Йелте Феннема) § §
Это было включено с
load_balance_hosts=random
и может быть использовано для балансировки нагрузки.Добавлена опция libpq
sslcertmode
для управления передачей клиентского сертификата (Джейкоб Чемпион) §Значения параметра:
disable
,allow
иrequire
.Разрешено libpq использовать системный пул сертификатов для проверки сертификатов (Джейкоб Чемпион, Томас Хабетс) §
Это было включено с
sslrootcert=system
, что также включаетsslmode=verify-full
.
E.15.3.9. Клиентские приложения #
Разрешено
ECPG
объявления переменных использовать имена, определенные с помощью typedef, которые совпадают с незарезервированными SQL ключевыми словами (Tom Lane) §Это изменение предотвращает обработку ключевых слов, которые совпадают с именами typedef в C, как ключевых слов в последующих блоках
EXEC SQL
.
Позволено psql управлять максимальной шириной строк заголовка в расширенном формате (Платон Пронко) §
Это контролируется
xheader_width
.Добавлена команда psql
\drg
для отображения деталей членства в роли (Павел Лузанов) § §Столбец вывода
Member of
был удалён из\du
и\dg
, потому что эта новая команда отображает эту информацию более подробно.Разрешено командам управления привилегиями доступа psql показывать системные объекты (Nathan Bossart) § §
Добавлено обозначение
FOREIGN
в psql\d+
для дочерних внешних таблиц и партиций (Ian Lawrence Barwick) §Предотвращено отображение исходного кода функции в
\df+
(Айзек Морланд) §Тела функций легче просматриваются с помощью
\sf
.Разрешено psql отправлять запросы, используя расширенный протокол запросов (Петер Айзенштраут) §
Передача аргументов в такие запросы осуществлялась с использованием новой команды psql
\bind
.Разрешено psql
\watch
ограничивать количество выполнений (Андрей Бородин) §Опции
\watch
теперь могут быть названы при указании.Обнаружены недопустимые значения для psql
\watch
, и разрешено использование нуля для указания отсутствия задержки (Андрей Бородин) §Разрешено сценариям psql получать статус выхода команд оболочки и запросов (Кори Хуинкер, Том Лейн) § §
Новые переменные управления psql - это
SHELL_ERROR
иSHELL_EXIT_CODE
.Различные улучшения автодополнения в psql (Виньеш С, Александр Алексеев, Дагфинн Илмари Маннсокер, Ши Ю, Майкл Пакье, Кен Като, Питер Смит) § § § § § § § § § § § §
Добавлен контроль pg_dump для дампа дочерних таблиц и разделов (Gilles Darold) §
Новые параметры:
--table-and-children
,--exclude-table-and-children
и--exclude-table-data-and-children
.Добавлены LZ4 и Zstandard сжатие в pg_dump (Georgios Kokolatos, Justin Pryzby)
Разрешено pg_dump и pg_basebackup использовать
длинный
режим для сжатия (Джастин Призби) § § § §Улучшено pg_dump для принятия более согласованного синтаксиса сжатия (Georgios Kokolatos) §
Опции, такие как
--compress=gzip:5
.
E.15.3.10. Приложения сервера #
Добавлена initdb опция для установки серверных переменных на время выполнения initdb и всех будущих запусков сервера (Tom Lane) §
Опция
-c name=value
.Добавлены опции в createuser для управления дополнительными параметрами пользователя (Shinya Kato) § §
В частности, новые параметры управляют датой окончания действия, обходом безопасности на уровне строк и членством в роли.
Устаревший createuser параметр
--role
(Натан Боссарт) § §Эта опция могла бы быть легко перепутана с новыми createuser параметрами членства в роли, поэтому опция
--member-of
была добавлена с той же функциональностью. Опция--role
все еще может быть использована.Разрешено управление обработкой схем в vacuumdb (Жиль Дарольд) §
Эти параметры контролируются опциями
--schema
и--exclude-schema
.Использованы новые
VACUUM
опции для улучшения производительности vacuumdb (Tom Lane, Nathan Bossart) §Были pg_upgrade установлены локаль и кодировка нового кластера (Джефф Дэвис) §
Это устраняет требование, чтобы новый кластер был создан с теми же настройками локали и кодировки.
Добавлена pg_upgrade опция для указания режима передачи по умолчанию (Петер Айзентраут) §
Опция
--copy
.Улучшено pg_basebackup для принятия числовых параметров сжатия (Георгиос Коколатос, Майкл Пакье) §
Опции, такие как
--compress=server-5
, теперь поддерживаются.Исправлено pg_basebackup для обработки таблиц, хранящихся в каталоге
PGDATA
(Роберт Хаас) §Добавлена pg_waldump опция
--save-fullpage
для дампа полных изображений страниц (Дэвид Кристенсен) §Разрешены pg_waldump опции
-t
/--timeline
для принятия шестнадцатеричных значений (Петер Айзентраут) §Добавлена поддержка отчета о прогрессе в pg_verifybackup (Масахико Савада) §
Разрешено pg_rewind правильно отслеживать изменения временной шкалы (Хейкки Линнакангас) § §
Ранее, если pg_rewind запускался после переключения временной шкалы, но до выдачи контрольной точки, он мог неправильно определить, что перемотка была не нужна.
pg_receivewal и pg_recvlogical завершены корректно при получении
SIGTERM
(Christoph Berg) §Этот сигнал часто используется systemd.
E.15.3.11. Исходный код #
Поддержка ICU была включена по умолчанию (Джефф Дэвис) §
Добавлена поддержка SSE2 (Streaming SIMD Extensions 2) векторных операций на архитектурах x86-64 (Джон Нейлор) §
Добавлена поддержка расширенных инструкций SIMD (Single Instruction Multiple Data) (NEON) на архитектурах ARM (Nathan Bossart) §
Бинарные файлы для Windows, собранные с использованием MSVC, были настроены для использования
RandomizedBaseAddress
(ASLR) (Майкл Пакье) §Это уже было включено в сборках MinGW.
Предотвращено экспортирование символов библиотек расширений по умолчанию (Андрес Фройнд, Том Лейн) § §
Функции, которые необходимо вызывать из основного бэкенда или других расширений, теперь должны быть явно помечены
PGDLLEXPORT
.Требуются Windows 10 или более новые версии (Майкл Пакье, Хуан Хосе Санта-Мария Флеча) §
Ранее поддерживались Windows Vista и Windows XP.
Требуется Perl версии 5.14 или более поздней (Джон Нейлор) §
Требуется Bison версии 2.3 или более поздней (Джон Нейлор) §
Требуется версия Flex 2.5.35 или более поздняя (Джон Нейлор) §
Требуется MIT Kerberos для поддержки GSSAPI (Стивен Фрост) §
Поддержка Visual Studio 2013 была удалена (Майкл Пакье) §
Поддержка HP-UX удалена (Томас Мунро) §
Поддержка HP/Intel Itanium была удалена (Thomas Munro) §
Поддержка архитектур M68K, M88K, M32R, и SuperH CPU была удалена (Thomas Munro) § §
Удалена поддержка libpq аутентификации с использованием учетных данных SCM (Майкл Пакье) §
Поддержка этого метода аутентификации на стороне сервера была удалена в PostgresSQL 9.1.
Это в конечном итоге заменит системы сборки на основе Autoconf и Windows, MSVC.
Разрешено управление местоположением openssl бинарного файла, используемого системой сборки (Петер Айзентраут) §
Сделано нахождение программы openssl опцией configure или meson
Добавлена опция сборки для тестирования небольших размеров сегментов таблиц (Андрес Фройнд) §
Добавлены опции для pgindent (Эндрю Данстан) § § § § § § §
Новые параметры:
--show-diff
,--silent-diff
,--commit
, и--help
, и разрешено использование нескольких параметров--exclude
. Также требуется явное указание файла typedef. Параметры--code-base
и--build
также были удалены.Добавлен исходный код pg_bsd_indent в основное дерево (Tom Lane) §
Улучшены make_ctags и make_etags (Юго Нагата) §
Настроены
pg_attribute
столбцы для повышения эффективности (Петер Айзентраут) §
E.15.3.12. Дополнительные модули #
Улучшено использование индексов на основе расширений на булевых столбцах (Zongliang Quan, Tom Lane) §
Добавлена поддержка Daitch-Mokotoff Soundex в fuzzystrmatch (Dag Lem) §
Разрешено auto_explain записывать значения, переданные параметризованным операторам (Дагфинн Илмари Маннсокер) §
Это влияет на запросы, использующие серверные
PREPARE
/EXECUTE
и клиентскую разборку/привязку. Логирование контролируется параметромauto_explain.log_parameter_max_length
; по умолчанию параметры запроса будут записываться в журнал без ограничения длины.Был auto_explain режим
log_verbose
учтен в значенииcompute_query_id
(Ацуши Торикоши) §Ранее, даже если
compute_query_id
был включен,log_verbose
не показывал идентификатор запроса.Изменена максимальная длина меток ltree с 256 до 1000 и разрешены дефисы (Гарен Торикиан) §
Были
pg_stat_statements
нормализованы константы, используемые в утилитных командах (Майкл Пакье) §Ранее вместо заполнителей появлялись константы, например,
$1
.Добавлена pg_walinspect функция
pg_get_wal_block_info()
для отчета информации о блоках WAL (Майкл Пакье, Мелани Плагеман, Бхарат Рупиредди) § § § §Изменено, как pg_walinspect функции
pg_get_wal_records_info()
иpg_get_wal_stats()
интерпретируют конечные LSN (Бхарат Рупиредди) §Ранее заканчивающиеся LSN, которые представляют несуществующие местоположения WAL, вызывали ошибку, в то время как теперь они будут интерпретироваться как конец WAL.
Подробные описания записей WAL были добавлены в pg_walinspect и pg_waldump (Мелани Плагеман, Питер Геогеган) § § § §
Добавлена pageinspect функция
bt_multi_page_stats()
для отчета статистики по нескольким страницам (Хамид Ахтар) §Это похоже на
bt_page_stats()
, за исключением того, что оно может сообщать о диапазоне страниц.Добавлен пустой столбец диапазона в pageinspect функцию
brin_page_items()
(Томаш Вондра) §Модули архива были переработаны для большей гибкости (Натан Боссарт) §
Изменения инициализации потребуют обновления модулей, написанных для более старых версий Postgres.
Исправлено неточное отслеживание строк pg_stat_statements для операторов расширенного протокола запросов (Сами Имсейх) §
Добавлена pg_buffercache функция
pg_buffercache_usage_counts()
для отчета об общем использовании (Nathan Bossart) §Добавлена pg_buffercache функция
pg_buffercache_summary()
для отчета обобщенной статистики буферов (Мелих Мутлу) §Разрешено, чтобы схемы требуемых расширений ссылались в скриптах расширений, используя новый синтаксис
@extschema:referenced_extension_name@
(Регина Оби) §Разрешено обязательным расширениям быть помеченными как не перемещаемые с использованием
no_relocate
(Регина Оби) §Это позволило
@extschema:referenced_extension_name@
рассматриваться как константа на протяжении всего времени существования расширения.
E.15.3.12.1. postgres_fdw #
Разрешено postgres_fdw выполнять прерывания параллельно (Etsuro Fujita) §
Это было включено с postgres_fdw опцией
parallel_abort
.Сделан
ANALYZE
на внешних таблицах postgres_fdw более эффективным (Tomas Vondra) §Опция postgres_fdw
analyze_sampling
контролирует метод выборки.Ограничена отправка констант типа
reg
* в postgres_fdw только теми, которые ссылаются на встроенные объекты или расширения, отмеченные как отправляемые (Tom Lane) §postgres_fdw и dblink обработали прерывания во время установления соединения (Andres Freund) §
E.15.4. Благодарности #
Следующие лица (в алфавитном порядке) внесли свой вклад в этот релиз в качестве авторов патчей, разработчиков, рецензентов, тестировщиков или сообщили об обнаруженных проблемах.
Abhijit Menon-Sen |
Adam Mackler |
Адриан Клейвер |
Ahsan Hadi |
Ajin Cherian |
Аджит Авекар |
Алан Ходжсон |
Aleksander Alekseev |
Алекс Денман |
Alex Kozhemyakin |
Александр Королев |
Alexander Korotkov |
Alexander Lakhin |
Alexander Pyhalov |
Alexey Borzov |
Alexey Ermakov |
Алексей Махмутов |
Álvaro Herrera |
Amit Kapila |
Amit Khandekar |
Amit Langote |
Amul Sul |
Anastasia Lubennikova |
Компания Anban |
Andreas Dijkman |
Андреас Карлссон |
Андреас Шербаум |
Andrei Zubkov |
Andres Freund |
Andrew Alsup |
Andrew Bille |
Andrew Dunstan |
Andrew Gierth |
Andrew Kesper |
Andrey Borodin |
Andrey Lepikhov |
Andrey Sokolov |
Анкит Кумар Пандей |
Анте Крещич |
Anton Melnikov |
Антон Сидякин |
Anton Voloshin |
Antonin Houska) |
Arne Roland |
Артем Анисимов |
Arthur Zakirov |
Ashutosh Bapat |
Ashutosh Sharma |
Asim Praveen |
Atsushi Torikoshi |
Аяки Тачикэке |
Балаж Сзилфаи |
Benoit Lobréau |
Бернд Хельмле |
Bertrand Drouvot |
Bharath Rupireddy |
Билва Санаба |
Боб Криер |
Борис Центнер |
Brad Nicholson |
Brar Piening |
Bruce Momjian |
Bruno da Silva |
Carl Sopchak |
Cary Huang |
Чанхон Фэй |
Крис Трэверс |
Christoph Berg |
Christophe Pettus |
Corey Huinker |
Крейг Рингер |
Курт Коловсон |
Dag Lem |
Dagfinn Ilmari Mannsåker |
Daniel Gustafsson |
Daniel Vérité |
Даниэль Ватцингер |
Daniel Westermann |
Daniele Varrazzo |
Daniil Anisimov |
Danny Shemesh |
Dave Page |
David Christensen |
David G. Johnston |
Дэвид Гейер |
Дэвид Гилман |
Дэвид Кимура |
David Rowley |
David Steele |
Дэвид Турон |
David Zhang |
Давиндер Сингх |
Dean Rasheed |
Денис Лаксальд |
Dilip Kumar |
Димос Стаматакес |
Дмитрий Кузьмин |
Дмитрий Астапов |
Dmitry Dolgov |
Dmitry Koval |
Донг Ук Ли |
Дунмин Лю |
Drew DeVault |
Дункан Сандс |
Эд Масте |
Egor Chindyaskin |
Ekaterina Kiryanova |
Elena Indrupskaya |
Emmanuel Quincerot |
Eric Mutta |
Erik Rijkers |
Erki Eessaar |
Эрвин Брандштеттер |
Etsuro Fujita |
Евгений Жужнев |
Euler Taveira |
Эван Джонс |
Евгений Морозов |
Fabrízio de Royes Mello |
Фариас де Оливейра |
Florin Irion |
Франц-Йозеф Фэрбер |
Гарен Торикиан |
Georgios Kokolatos |
Gilles Darold |
Greg Stark |
Guillaume Lelarge |
Gunnar Bluth |
Гуннар Морлинг |
Gurjeet Singh |
Haiyang Wang |
Haiying Tang |
Хамид Ахтар |
Hans Buschmann |
Хао Ву |
Hayato Kuroda |
Heath Lord |
Heikki Linnakangas |
Himanshu Upadhyaya |
Хисахиро Каути |
Хонгю Сун |
Hubert Lubaczewski |
Хунг Нгуен |
Ian Barwick |
Ibrar Ahmed |
Илья Гладышев |
Илья Ненашев |
Исаак Морланд |
Израиль Барт Рубио |
Jacob Champion |
Джейкоб Шпайдель |
Jaime Casanova |
Jakub Wartak |
James Coleman |
James Inform |
Джеймс Ваннс |
Ян Вик |
Japin Li |
Jeevan Ladhe |
Jeff Davis |
Jeff Janes |
Jehan-Guillaume de Rorthais |
Jelte Fennema |
Jian He |
Джим Джонс |
Цзиньбао Чэнь |
Джо Конвей |
Joel Jacobson |
John Naylor |
Jonathan Katz |
Josef Simanek |
Joseph Koshakow |
Juan José Santamaría Flecha |
Julien Rouhaud |
Julien Roze |
Junwang Zhao |
Justin Pryzby |
Джастин Чжан |
Карина Лицкевич |
Карл О. Пинк |
Кейсуке Курода |
Ken Kato |
Kevin McKibbin |
Киран МакКаскер |
Кирк Волак |
Konstantin Knizhnik |
Коши Шибагаки |
Kotaro Kawamoto |
Куй Лю |
Kyotaro Horiguchi |
Лакшми Нараянан Сритхар |
Лоуренс Парри |
Laurenz Albe |
Лука Феррари |
Lukas Fittl |
Maciek Sakrejda |
Magnus Hagander |
Майя Заложник |
Марсель Хофштеттер |
Marina Polyakova |
Mark Dilger |
Маркo Тииккая |
Markus Winand |
Martijn van Oosterhout |
Martin Jurca |
Martin Kalcher |
Мэри Сюй |
Masahiko Sawada |
Masahiro Ikeda |
Masao Fujii |
Мейсон Шарп |
Матеус Алкантара |
Матс Киндал |
Matthias van de Meent |
Matthijs van der Vleuten |
Maxim Orlov |
Maxim Yablokov |
Мехмет Эмин Каракас |
Melanie Plageman |
Мелих Мутлу |
Майка Гейтса |
Michael Banck |
Michael Paquier |
Михаил Николаев |
Мишель Пельтье |
Mike Oh |
Михаил Грибков |
Минли Чжан |
Мирослав Бендик |
Мицуру Хината |
Мьо Вай Тант |
Наим Ахтер |
Naoki Okano |
Nathan Bossart |
Nazir Bilal Yavuz |
Neha Sharma |
Ник Бабаджанян |
Nicola Contu |
Nikhil Shetty |
Nikita Glukhov |
Nikolay Samokhvalov |
Nikolay Shaplov |
Нишант Шарма |
Nitin Jadhav |
Noah Misch |
Noboru Saito |
Noriyoshi Shinoda |
Нуко Йокогама |
Олег Бартунов |
Олег Целебровский |
Olly Betts |
Onder Kalaci |
Онур Тиртир |
Пабло Федерико |
Палле Гиргенсон |
Paul Guo |
Paul Jungwirth |
Пол Рэмси |
Pavel Borisov |
Павел Кулаков |
Pavel Luzanov |
Pavel Stehule |
Пейфэн Цю |
Peter Eisentraut |
Peter Geoghegan |
Peter Smith |
Phil Florent |
Филипп Годфрен |
Платон Пронко |
Пшемыслав Штох |
Rachel Heaton |
Ranier Vilela |
Регина Оби |
Reid Thompson |
Райнер Петерке |
Richard Guo |
Рииво Колка |
Ришу Багга |
Robert Haas |
Роберт Шёблом |
Роберт Трит |
Roberto Mello |
Robins Tharakan |
Roman Zharkov |
Ронан Дунклау |
Рушаб Латия |
Ryo Matsumura |
Самай Шарма |
Sami Imseih |
Sandeep Thakkar |
Сандро Сантилли |
Себастьен Флеш |
Себастьен Лардьер |
Sehrope Sarkuni |
Сергей Беляшов |
Сергей Панков |
Sergey Shinderuk |
Shi Yu |
Shinya Kato |
Шо Като |
Shruthi Gowda |
Швета Маллик |
Simon Riggs |
Синди Сеньорита |
Sirisha Chamarthi |
Шраван Кумар |
Стефан Ташуар |
Stephen Frost |
Steve Chavez |
Стоун Тикл |
Sven Klemm |
Takamichi Osumi |
Takeshi Ideriha |
Tatsuhiro Nakamori |
Tatsuo Ishii |
Teja Mupparti |
Тендер Ван |
Федор Сигаев |
Тиаго Нунес |
Thom Brown |
Томас Хабетс |
Томас Мак Кей |
Томас Манро |
Тим Кэри-Смит |
Тим Филд |
Timo Stolz |
Tom Lane |
Tomas Vondra |
Тор Эрик Линнеруд |
Торстен Фёрч |
Тристан Партин |
Troy Frericks |
Tushar Ahuja |
Валери Вулард |
Вибхор Кумар |
Виктор Спирин |
Виктория Шепард |
Vignesh C |
Vik Fearing |
Vitaly Burovoy |
Виталий Давыдов |
Ван Вэй |
Вэньцзинь Цзэн |
Whale Song |
Will Mortensen |
Wolfgang Walther |
Син Вэнь |
Син Го |
Синван Сюй |
СюэЦзин Чжао |
Yanliang Lei |
Юмиу Мо |
Yugo Nagata |
Yura Sokolov |
Юта Кацураги |
Чжэнь Минъян |
Чжэн Ли |
Zhihong Yu |
Чжицзе Хоу |
Цзунлян Цюань |
Цзумин Цзян |