E.24. Выпуск 13
Дата выпуска: 2020-09-24
E.24.1. Обзор
PostgreSQL 13 содержит много новых возможностей и улучшений, в том числе:
Экономия дискового пространства и увеличение быстродействия за счёт исключения дубликатов в индексах-B-деревьях
Увеличение производительности запросов в части использования секционированных таблиц и агрегатных функций
Улучшение планов запросов с использованием расширенной статистики
Распараллеливание очистки индексов
Инкрементальная сортировка
Предыдущие пункты и другие новые возможности PostgreSQL 13 более подробно описаны в следующих разделах.
E.24.2. Миграция на версию 13
Тем, кто хочет перенести данные из любой предыдущей версии, необходимо выполнить выгрузку/восстановление данных с помощью pg_dumpall либо использовать pg_upgrade или логическую репликацию. Общую информацию о переходе на более новую основную версию можно найти в Разделе 18.6.
В версии 13 реализован ряд изменений, которые могут повлиять на совместимость с предыдущими выпусками. Рассмотрите следующие несовместимые аспекты:
Команда
SIMILAR TO ... ESCAPE NULLтеперь возвращаетNULL(Том Лейн) §Новое поведение соответствует стандарту SQL. Ранее
ESCAPENULL воспринималось как указание использовать спецсимвол по умолчанию (обратную косую черту). Это также касается функцииsubstring(. Предыдущее поведение будет сохранено в ранее созданных представлениях, для этого оставлена исходная функция.текстFROMшаблонESCAPEтекст)Дополнение проверки слова
stringв функцияхjson[b]_to_tsvector()(Доминик Чарнота) §Изменение зависимости степени параллельности от значений effective_io_concurrency (Томас Манро) §
Ранее значение этого параметра пересчитывалось и влияло на число параллельных операций косвенно, теперь же оно используется непосредственно. При этом влияние значения по умолчанию не изменилось. Преобразовать старые значения в новые можно по формуле:
SELECT round(sum(
СТАРОЕ_ЗНАЧЕНИЕ/ n::float)) AS newvalue FROM generate_series(1,СТАРОЕ_ЗНАЧЕНИЕ) s(n);Исключение вспомогательных процессов из системных представлений pg_stat_ssl и pg_stat_gssapi (Эйлер Тавейра) §
В запросах, которые соединяют эти представления с pg_stat_activity, ожидая получить информацию и о таких процессах, теперь нужно будет использовать левые соединения.
Переименование различных событий ожидания для единообразия (Фудзии Масао, Том Лейн) § § § § §
Смена тега, выдаваемого командой
ALTER FOREIGN TABLE ... RENAME COLUMN, на более подходящий (Фудзии Масао) §Теперь она будет выдавать тег
ALTER FOREIGN TABLEвместоALTER TABLE.Смена тега, выдаваемого командой
ALTER MATERIALIZED VIEW ... RENAME COLUMN, на более подходящий (Фудзии Масао) §Теперь она будет выдавать тег
ALTER MATERIALIZED VIEWвместоALTER TABLE.Переименование параметра конфигурации
wal_keep_segmentsв wal_keep_size (Фудзии Масао) §Этот параметр определяет объём WAL, который нужно сохранять для ведомых серверов, в мегабайтах, а не в количестве файлов, как старый параметр. Если ранее вы использовали
wal_keep_segments, соответствующее значение нового параметра можно вычислить так:wal_keep_size = wal_keep_segments * wal_segment_size (обычно 16 Мбайт)
Прекращение поддержки определения классов операторов с использованием синтаксиса, который был принят в PostgreSQL до версии 8.0 (Даниэль Густафссон) §
Прекращение поддержки определения ограничений внешнего ключа с использованием синтаксиса, который был принят в PostgreSQL до версии 7.3 (Даниэль Густафссон) §
Прекращение поддержки псевдотипов «opaque», необходимых для серверов PostgreSQL до версии 7.3 (Даниэль Густафссон) §
Прекращение поддержки обновления неупакованных (созданных до версии 9.1) расширений (Том Лейн)
Указание
FROMкомандыCREATE EXTENSIONболее не поддерживается. Там, где по-прежнему используются неупакованные расширения, их нужно заменить упакованными, прежде чем производить обновление PostgreSQL до версии 13.Ликвидация поддержки файлов
posixrulesв базе часовых поясов (Том Лейн) §Координаторы базы часовых поясов IANA признали эту функциональность устаревшей; таким образом, она будет постепенно уходить из баз данных в составе операционных систем на протяжении нескольких лет. Мы решили отказаться от поддержки этой функциональности в PostgreSQL версии 13, не дожидаясь, когда она будет вдруг ликвидирована в одном из обновлений базы часовых поясов. Это изменение касается только указаний часовых поясов в стиле POSIX, в которых нельзя явно задать правило перехода на летнее время; ранее нужное правило можно было определить, установив собственный файл
posixrules, но теперь оно зашито в коде. В инсталляциях, которые зависят от старой функциональности, рекомендуется перейти к использованию географического названия часового пояса.Исправление в ltree интерпретации смежных звёздочек с фигурными скобками в путях
lquery; например, путь*{2}.*{3}должен восприниматься как*{5}(Никита Глухов) §Смена типов, выдаваемых функцией
bt_metap()модуля pageinspect, на более подходящие в целях исключения переполнений (Питер Гейган) §
E.24.3. Изменения
Ниже вы найдёте подробный список изменений, произошедших между предыдущим основным выпуском и выпуском PostgreSQL 13.
E.24.3.1. Сервер
E.24.3.1.1. Секционирование
Увеличение числа случаев, когда может иметь место отсечение секций (Юзуко Хосоя, Амит Ланготе, Альваро Эррера) § §
Поддержка соединения с учётом секционирования в большем числе случаев (Ашутош Бапат, Эцуро Фудзита, Амит Ланготе, Том Лейн) § §
Например, теперь такие соединения возможны даже между секционированными таблицами, границы секций в которых не совпадают в точности.
Добавление поддержки триггеров
BEFOREуровня строк в секционированных таблицах (Альваро Эррера) §Заметьте, что в таких триггерах нельзя изменить целевую секцию строки.
Реализация возможности логической репликации секционированных таблиц через публикации (Амит Ланготе) §
Ранее секции надо было реплицировать индивидуально, но теперь можно явно опубликовать секционированную таблицу, и при этом автоматически будут опубликованы все её секции. При добавлении/удалении секций из секционированных таблиц они так же автоматически будут добавляться/удаляться из публикаций. Будут ли изменения в секциях публиковаться на уровне секций или на уровне родителя, определяет параметр
publish_via_partition_rootкомандыCREATE PUBLICATION.Поддержка логической репликации в секционированные таблицы на стороне подписчика (Амит Ланготе) §
Ранее подписчики могли получать строки только в несекционированные таблицы.
Поддержка использования переменных вида
таблица.*(включающих всю строку) в секционирующих выражениях (Амит Ланготе) §
E.24.3.1.2. Индексы
Более эффективное хранение дубликатов в индексах-B-деревьях (Анастасия Лубенникова, Питер Гейган) §
Хранение повторяющихся ключей в единственном экземпляре позволяет оптимизировать индексы-B-деревья, построенные по столбцам, имеющим малую мощность. Пользователи, мигрирующие на новую версию посредством pg_upgrade, должны выполнить
REINDEXдля существующих индексов, чтобы задействовать для них эту оптимизацию.Возможность использования индексов GiST и SP-GiST по столбцам
boxдля поддержки запросовORDER BY(Никита Глухов) § §прямоугольник<->точкаБолее эффективная обработка операторов
!(НЕ) в запросахtsqueryс использованием индексов GIN (Никита Глухов, Александр Коротков, Том Лейн, Жюльен Руо) §Возможность определения параметров для классов операторов в индексах (Никита Глухов) §
Возможность указания в
CREATE INDEXразмера сигнатуры и максимального количества целочисленных диапазонов для GiST (Никита Глухов) §В индексах по столбцам tsvector, pg_trgm, ltree, hstore и массивам с четырёх- и восьмибайтовыми целыми теперь можно сменить подразумеваемые значения этих параметров GiST на более подходящие.
Недопущение добавления индексов, использующих нестандартные правила сортировки, в ограничения уникальности или первичного ключа (Том Лейн) §
Для индекса и для нижележащего столбца должно быть задано одно правило сортировки, однако раньше команда
ALTER TABLEэто не контролировала.
E.24.3.1.3. Оптимизатор
Улучшение в оптимизаторе оценки избирательности для операторов включения/совпадения (Том Лейн) §
Возможность определения ориентиров статистики для объектов расширенной статистики (Томаш Вондра) §
Для этого предназначен новый вариант команды
ALTER STATISTICS ... SET STATISTICS. Ранее эти значения выбирались исходя из более общих ориентиров статистики.Возможность использования нескольких объектов расширенной статистики в одном запросе (Томаш Вондра) § §
Возможность использования объектов расширенной статистики для предложений OR и условий IN/
ANYсо списком констант (Пьер Дюкроке, Томаш Вондра) § § §Возможность встраивания (подтягивания в место использования) функций, фигурирующих в предложении
FROM, если они сводятся к константе (Александр Кузьменков, Александр Парфёнов) § §
E.24.3.1.4. Общая производительность
Реализация инкрементальной сортировки (Джеймс Коулман, Александр Коротков, Томаш Вондра) § §
Если известно, что промежуточный результат запроса упорядочен по одному или нескольким начальным ключам запрошенного порядка сортировки, дополнительную сортировку можно выполнить, рассмотрев только оставшиеся ключи. Для этого строки должны быть собраны в группы с одинаковыми значениями начальных ключей.
Изменить это поведение при необходимости позволяет параметр enable_incremental_sort.
Возможность использования дискового хранилища для агрегирования по хешу при обработке большого объёма результатов (Джефф Девис) § § §
Ранее агрегирование по хешу выбиралось, только если расчётное количество необходимой для него памяти не превышало work_mem. Теперь же такого ограничения нет. Если объём хеш-таблицы превысит значение
work_mem, умноженное на hash_mem_multiplier, она будет вытеснена на диск.Это поведение в большинстве случаев должно быть лучше старого, когда после выбора варианта агрегирования по хешу хеш-таблица должна была находиться в памяти, какой бы большой она ни была (при ошибке планировщика она могла оказаться очень объёмной). Но при необходимости подобное прежнему поведение можно получить, увеличив
hash_mem_multiplier.Возможность запуска автоочистки в процессе autovacuum в зависимости от числа добавленных строк, а не только от числа удалённых или изменённых (Лауренц Альбе, Дорофей Пролесковский) §
Ранее, если строки только добавлялись в таблицу, могла вызываться процедура автоанализа, но не процедура автоочистки, из тех соображений, что при этом не появляются «мёртвые» кортежи, которые нужно удалять. Однако сканирование в процессе очистки полезно и тем, что в ходе его выполнения устанавливаются биты полностью видимых страниц, позволяющие увеличить эффективность сканирования только по индексу. Кроме того, когда таблицу, в которую только добавляются записи, периодически обрабатывает процедура очистки, это способствует распределению работы по «замораживанию» старых кортежей, что позволяет избежать необходимости экстренно обрабатывать сразу всю таблицу для предотвращения зацикливания транзакций.
При необходимости это поведение можно скорректировать, воспользовавшись новыми параметрами autovacuum_vacuum_insert_threshold и autovacuum_vacuum_insert_scale_factor или аналогичными параметрами хранения таблицы.
Добавление параметра maintenance_io_concurrency для управления степенью параллельности ввода-вывода при выполнении операций обслуживания (Томас Манро) §
Возможность обойтись без записи в WAL во время транзакции, которая создаёт или полностью переписывает отношение, при wal_level равном
minimal(Кётаро Хоригути) §Отношения, объём которых превышает wal_skip_threshold, теперь могут сразу сбрасываться в файловую систему в обход WAL. Ранее это делалось только при выполнении
COPY, но в прежней реализации обнаружился дефект, чреватый потерей данных при восстановлении после сбоя.Ускорение воспроизведения команд
DROP DATABASEв случае использования множества табличных пространств (Фудзии Масао) §Ускорение операции опустошения очень больших отношений (Кирк Джемисон) §
Оптимизация излечения начальных байтов из значений TOAST (Бинго Бао, Андрей Бородин) §
Ранее сжатые отдельно значения TOAST считывались полностью, даже когда было известно, что потребуются только несколько начальных байт. Теперь считываться будут только те данные, которые нужны для получения результата.
Оптимизация производительности команд
LISTEN/NOTIFY(Мартейн Ван Остерхаут, Том Лейн) § § §Ускорение перевода целых чисел в текстовый вид (Давид Феттер) §
Уменьшение объёма памяти, который занимают обрабатываемые строки запросов и скрипты расширений, содержащие множество SQL-операторов (Амит Ланготе) §
E.24.3.1.5. Мониторинг
Возможность отслеживания статистики использования WAL, в том числе при автоочистке, в
EXPLAIN, auto_explain и в pg_stat_statements (Кирилл Бычик, Жюльен Руо) § § §Возможность протоколирования не всех, а только выборочного множества SQL-операторов (Адриен Найрат) §
В журнал будет вноситься задаваемая параметром log_statement_sample_rate доля от всех операторов, длительность которых превышает log_min_duration_sample.
Добавление типа обслуживающего процесса в формат csvlog и возможность добавления этого типа в log_line_prefix (Питер Эйзентраут) §
Гибкое управление выводом параметров подготовленных операторов, вносимых в журнал (Алексей Баштанов, Альваро Эррера) § §
Новый параметр GUC log_parameter_max_length_on_error задаёт максимальную длину для значений параметров оператора, который вносится в журнал по причине ошибки, а log_parameter_max_length ограничивает длину параметров для оператора, вносимого по другим причинам. Ранее в случае ошибок параметры подготовленных операторов никогда не выводились в журнал.
Возможность добавления в журнал стека вызовов после возникновения ошибки (Питер Эйзентраут, Альваро Эррера) § §
Для каких функций в коде C должен записываться стек в случае ошибки в них, определяется новым параметром backtrace_functions.
Перевод счётчиков использования буферов при очистке на 64-битные целые во избежание переполнения (Альваро Эррера) §
E.24.3.1.6. Системные представления
Добавление в представление pg_stat_activity поля
leader_pid, позволяющего определить ведущий процесс для параллельных исполнителей (Жюльен Руо) §Добавление системного представления
pg_stat_progress_basebackupдля наблюдения за передачей потока данных в ходе базового копирования (Фудзии Масао) §Добавление системного представления
pg_stat_progress_analyzeдля наблюдения за выполнением команды ANALYZE (Альваро Эррера, Тацуро Ямада, Винаяк Покале) §Добавление системного представления
pg_shmem_allocationsдля отслеживания использования общей памяти (Андрес Фройнд, Роберт Хаас) §Добавление системного представления
pg_stat_slruдля наблюдения за внутренними SLRU-кешами (Томаш Вондра) §Увеличение максимально допустимого значения track_activity_query_size до 1 Мбайта (Вячеслав Макаров) §
Ранее верхний предел равнялся 100 килобайтам.
E.24.3.1.7. События ожидания
Добавление события ожидания, связанного с выделением DSM-сегмента функцией
posix_fallocate()(Томас Манро) §Добавление события ожидания VacuumDelay, представляющего задержку очистки по стоимости (Джастин Призби) §
Добавление событий ожидания, представляющих паузы в процессе архивирования и восстановления WAL (Фудзии Масао) §
Новые события называются BackupWaitWalArchive и RecoveryPause.
Добавление событий ожидания RecoveryConflictSnapshot и RecoveryConflictTablespace для наблюдения за конфликтами восстановления (Масахико Савада) §
Оптимизация производительности при обработке событий ожидания в системах на базе BSD (Томас Манро) §
E.24.3.1.8. Аутентификация
Недопущение чтения параметра ssl_passphrase_command обычными пользователями (Инсон Мун) §
Доступ к нему был ограничен из соображений безопасности.
Смена выбираемой сервером по умолчанию минимальной версии протокола защиты соединений TLS с 1.0 на 1.2 (Питер Эйзентраут) §
Выбрать другую версию позволяет параметр ssl_min_protocol_version.
E.24.3.1.9. Конфигурация сервера
Усиление ограничений, при которых допускается выполнение служебных команд в транзакции без записи (Роберт Хаас) §
Вместе с тем увеличено количество служебных команд, которые могут выполняться в параллельных запросах.
Добавление возможности изменения параметра allow_system_table_mods после запуска сервера (Питер Эйзентраут) §
Предотвращение изменения системных таблиц обычными пользователями при установленном параметре allow_system_table_mods (Питер Эйзентраут) §
Ранее, если при запуске сервера был установлен параметр allow_system_table_mods, обычные пользователи могли выполнять операции
INSERT/UPDATE/DELETEс системными таблицами.Реализация поддержки Unix-сокетов в Windows (Питер Эйзентраут) §
E.24.3.2. Потоковая репликация и восстановление
Применение изменённых параметров потоковой репликации при перезагрузке конфигурации (Сергей Корнилов) §
Ранее для изменения действующих значений primary_conninfo и primary_slot_name требовалось перезапустить сервер.
Возможность использования WAL-приёмниками временного слота репликации в ситуациях, когда постоянный слот не определён (Питер Эйзентраут, Сергей Корнилов) §
Новое поведение включается параметром wal_receiver_create_temp_slot.
Ограничение объёма хранилища WAL, требуемого для слотов репликации, параметром max_slot_wal_keep_size (Кётаро Хоригути) §
Слоты репликации, которым заданного объёма недостаточно, помечаются как нерабочие.
Отмена паузы при поступлении признанного более приоритетным запроса на повышение ведомого (Фудзии Масао) §
До этого нельзя было перейти к повышению непосредственно из состояния паузы.
Завершение восстановления ошибкой в случаях, когда заданная цель восстановления не достигается (Лейф Гуннар Эрландсен, Питер Эйзентраут) §
Ранее сервер успешно повышался, доходя до конца WAL, даже если заданная цель не была достигнута.
Ограничение объёма памяти, выделяемой для логического декодирования, после превышении которого данные вытесняются на диск (Томаш Вондра, Дилип Кумар, Амит Капила) §
Этот объём задаётся параметром logical_decoding_work_mem.
Возможность продолжения восстановления даже при обнаружении в WAL ссылок на неверные страницы (Фудзии Масао) §
Для включения этой возможности предназначен параметр ignore_invalid_pages.
E.24.3.3. Служебные команды
Возможность параллельной обработки индексов одной таблицы в ходе
VACUUM(Масахико Савада, Амит Капила)Этой возможностью управляет новый параметр
PARALLEL.Дополнение предложения
FETCH FIRSTуказаниемWITH TIES, позволяющим получить все дополнительные строки, совпадающие с последней строкой результата (Сурафел Темесген) §Добавление в вывод
EXPLAINс указаниемBUFFERсведений об использования буферов во время планирования (Жюльен Руо) §Обеспечение переноса командой
CREATE TABLE LIKEсвойстваNO INHERIT, которое может быть у ограничений, в создаваемую таблицу (Ильдар Мусин, Крис Трэверс) §Избавление от проверок разрешений в подчинённых таблицах при выполнении
LOCK TABLEдля секционированной таблицы (Амит Ланготе) §Поддержка указания
OVERRIDING USER VALUEпри добавлении данных в столбцы идентификации (Дин Рашид) §Добавление конструкции
ALTER TABLE ... DROP EXPRESSION, позволяющей убрать у столбца свойствоGENERATED(Питер Эйзентраут) §Исправление ошибок в поведении многоэтапных команд
ALTER TABLE(Том Лейн)Предложения
IF NOT EXISTSтеперь работают ожидаемым образом, то есть вторичные действия (например, создание индекса) не выполняются, если столбец уже существует. Кроме того, теперь корректно выполняются некоторые сочетания действийALTER TABLE, которые раньше не работали.Добавление в синтаксис
ALTER VIEWвозможности переименования столбцов представления (Фудзии Масао) §Переименовать столбцы представления можно было и раньше, но только с помощью команды
ALTER TABLE RENAME COLUMN, что вносило путаницу.Добавление в
ALTER TYPEвозможности изменять характеристики TOAST и опорные функции для базовых типов (Томаш Вондра, Том Лейн) §Добавление в
CREATE DATABASEпараметраLOCALE(Питер Эйзентраут) §В новом параметре объединены два ранее существовавших параметра
LC_COLLATEиLC_CTYPE.Реализация в
DROP DATABASEвозможности принудительно удалить базу, отключив от неё пользователей (Павел Стехуле, Амит Капила) §Для такого удаления предназначено указание
FORCE.Добавление во внутреннюю структуру поля
tg_updatedcols, из которого триггеры на C, обрабатывающие изменения, могут узнать, какие столбцы были изменены (Питер Эйзентраут) §
E.24.3.4. Типы данных
Добавление новых полиморфных типов данных, полезных для функций, принимающих совместимые аргументы (Павел Стехуле) §
А именно, добавлены типы
anycompatible,anycompatiblearray,anycompatiblenonarrayиanycompatiblerange.Добавление SQL-типа
xid8для представления полных идентификаторов транзакций (Томас Манро)Существовавший и ранее тип
xidимеет размер всего 4 байта и не вмещает эпоху транзакции.Добавление типа данных
regcollationи вспомогательных функций, представляющих в понятном виде OID правил сортировки (Жюльен Руо) §Использование версии gcc в качестве идентификатора версии правила сортировки там, где это уместно (Томас Манро)
Теперь при смене версии glibc будет выдаваться предупреждение о возможном повреждении индексов, зависящих от правил сортировки.
Поддержка версионирования правил сортировки в Windows (Томас Манро) §
Возможность извлечения членов выражений
ROWс использованием суффиксной записи (Том Лейн) §Например, результатом выражения
(ROW(4, 5.0)).f1будет 4.
E.24.3.5. Функции
Добавление альтернативного варианта
jsonb_set()с расширенной обработкойNULL(Эндрю Дунстан) §Новая функция
jsonb_set_lax(), получаяNULLв качестве нового значения, может по выбору вызывающего присвоить JSON-значение null заданному ключу, удалить ключ, выдать исключение или возвратить неизменённое значениеjsonb.Добавление в jsonpath метода .
datetime()(Никита Глухов, Фёдор Сигаев, Олег Бартунов, Александр Коротков) §Этот метод позволяет преобразовывать значения JSON в значения времени, которыми затем можно оперировать в выражениях
jsonpath. При этом также добавлены функцииjsonpath, выдающие результат с учётом часового пояса.Добавление SQL-функции
NORMALIZE() для нормализации строк в Unicode и конструкцииIS NORMALIZEDдля проверки нормализации (Питер Эйзентраут) §Добавление агрегатных функций
min()иmax()для типаpg_lsn(Фабрицио де Ройес Мелло) §Они могут быть полезны прежде всего в запросах, выполняемых в целях мониторинга.
Возможность указания в виде спецпоследовательности Unicode (например,
E'\uилиnnnn'U&'\) любого символа, допустимого в кодировке базы данных, даже если это не UTF-8 (Том Лейн) §nnnn'Добавление в
to_date()иto_timestamp()возможности распознавать не только английские названия дней недели/месяцев (Хуан Хосе Сантамария Флеча, Том Лейн) §Допустимыми будут те же названия, что выводит функция
to_char()с теми же шаблонами формата.Добавление шаблонов формата даты/времени
FF1–FF6для ввода или вывода от 1 до 6 цифр в дробной части секунд (Александр Коротков, Никита Глухов, Фёдор Сигаев, Олег Бартунов) §Такие шаблоны могут приниматься функциями
to_char(),to_timestamp(), а также методом jsonpath .datetime().Добавление шаблона формата даты/времени
SSSSSв качестве соответствующего стандарту SQL синонима дляSSSS(Никита Глухов, Александр Коротков) §Реализация функции
gen_random_uuid(), генерирующей UUID версии 4 (Питер Эйзентраут) §Ранее сгенерировать UUID можно было только дополнительными функциями, реализованными во внешних модулях uuid-ossp и pgcrypto.
Добавление функций
gcdиlcm, вычисляющих наибольший общий делитель и наименьшее общее кратное, соответственно (Вик Фиринг) §Увеличение быстродействия и точности вычисления квадратного корня (
sqrt) и натурального логарифма (ln) для значенийnumeric(Дин Рашид) § §Реализация функции
min_scale(), которая выдаёт количество цифр справа от десятичной точки, необходимое для представления значенияnumericс полной точностью (Павел Стехуле) §Реализация функции
trim_scale(), которая уменьшает масштаб значенияnumeric, убирая конечные нули (Павел Стехуле)Добавление коммутативных операторов к операторам, вычисляющим расстояние (Никита Глухов) §
Например, до этого поддерживалась только операция
point<->line, а теперь поддерживается иline<->point.Создание для всех функций, работающих с идентификаторами транзакций, аналогов, оперирующих типом
xid8(Томас Манро) §Старые функции, оперирующие типом
xid, сохранены для обратной совместимости.Реализация в функциях
get_bit()иset_bit()возможности обращаться к битам за пределами первых 256 Мбайт значенияbytea(Мувад Ли) §Возможность использования функций рекомендательных блокировок в некоторых выполняемых параллельно операциях (Том Лейн) §
Добавление возможности удалить зависимость объекта от расширения (Альваро Эррера) §
Для этого предусмотрен синтаксис
ALTER .. NO DEPENDS ON. Объектом в данном случае может быть функция, материализованное представление, индекс или триггер.
E.24.3.6. PL/pgSQL
E.24.3.7. Клиентские интерфейсы
Предоставление клиентам libpq возможности затребовать связывание каналов для шифрованных соединений (Джефф Девис) §
Добавленный в libpq параметр соединения
channel_bindingтребует от другой стороны TLS-соединения доказательства того, что она знает пароль пользователя. Это предотвращает атаки с посредником.Добавление в libpq параметров соединения, задающих минимальную и максимальную версию TLS, допустимую для шифрования подключений (Даниэль Густафссон) § § §
Новые параметры называются ssl_min_protocol_version и ssl_max_protocol_version, соответственно. Минимальной допустимой версией TLS теперь считается 1.2 (тем самым меняется поведение по сравнению с предыдущими выпусками).
Добавление возможности указания паролей, разблокирующих клиентские сертификаты (Крейг Рингер, Эндрю Дунстан) §
Для этого предназначен параметр подключения libpq sslpassword.
Поддержка в libpq клиентских сертификатов в кодировке DER (Крейг Рингер, Эндрю Дунстан) §
Исправление работы указания
EXEC SQL elifв ecpg (Том Лейн) §Ранее оно работало как
endifс последующимifdef, так что предыдущее попадание в положительную ветвь в том жеifне исключало попадание в ветвьelifили последующие ветви.
E.24.3.8. Клиентские приложения
E.24.3.8.1. psql
Добавление признака состояния транзакции (
%x) в стандартные приглашения psql (Вик Фиринг) §Возможность задать дополнительное приглашение psql, которое будет пустым, но его ширина будет совпадать с шириной основного (Томас Манро) §
Для этого в переменной
PROMPT2нужно указать%w.Возможность изменить в командах psql
\gи\gxпараметры вывода \pset на время выполнения данной команды (Том Лейн) §Это позволяет, например, записать
\g (expand=on), что будет равнозначно команде\gx.Добавление в psql команд для вывода информации о классах операторов и семействах операторов (Сергей Черкашин, Никита Глухов, Александр Коротков) §
А именно, добавлены команды
\dAc,\dAf,\dAoи\dAp.Отображение характеристики хранения отношения в команде psql
\dt+и связанных командах (Давид Феттер) §В режиме детализации теперь будет показываться, является ли отношение (таблица/индекс/представление) постоянным, временным или нежурналируемым.
Улучшение вывода команды psql
\dдля TOAST-таблиц (Джастин Призби) §Усовершенствование вывода в psql после команды
\e(Том Лейн)Теперь при выходе из редактора, если введённый запрос завершается не командой
\gили точкой с запятой, будет выводиться содержимое буфера запроса.Добавление в psql команды
\warn(Давид Феттер) §Эта команда выводит текст подобно
\echo, но не в stdout, а в stderr.Добавление ссылки на домашнюю страницу PostgreSQL в справку, выводимую с ключом
--help(Питер Эйзентраут) §
E.24.3.8.2. pgbench
Добавление в pgbench возможности сделать таблицу «accounts» секционированной (Фабьен Коэльо) §
Благодаря этому можно протестировать производительность механизма секционирования.
Добавление в pgbench команды
\aset, подобной\gset, но рассчитанной на несколько запросов (Фабьен Коэльо) §Реализация в pgbench возможности генерировать начальные данные на стороне сервера, а не на стороне клиента (Фабьен Коэльо) §
Добавление в pgbench вывода содержимого скрипта с аргументом
--show-script(Фабьен Коэльо) §
E.24.3.9. Серверные приложения
Формирование манифестов копий при выполнении базового копирования, а также проверка копий по этим манифестам (Роберт Хаас) §
Новое средство pg_verifybackup, предназначенное для проверки копий.
Выполнение в pg_basebackup расчёта общего размера копии по умолчанию (Фудзии Масао) §
Полученный результат позволяет показать процесс копирования в
pg_stat_progress_basebackup. Если это не требуется, этот расчёт можно отключить, воспользовавшись аргументом--no-estimate-size. Ранее этот расчёт производился только при добавлении аргумента--progress.Добавление в pg_rewind ключа для формирования конфигурации ведомого сервера (Пол Гуо, Джимми Йи, Ашвин Агравал) §
Новый ключ
--write-recovery-confсоответствует одноименному ключу pg_basebackup.Возможность использования в pg_rewind команды restore_command, заданной в целевом кластере, для получения необходимых сегментов WAL (Алексей Кондратов) §
Новое поведение включается ключом
-c/--restore-target-wal.Автоматический запуск в pg_rewind процедуры восстановления согласованности до начала синхронизации состояния (Пол Гуо, Джимми Йи, Ашвин Агравал) §
Отключить эту процедуру позволяет ключ
--no-ensure-shutdown.Добавление подробной информации о
PREPARE TRANSACTIONв вывод pg_waldump (Фудзии Масао) §Добавление в pg_waldump ключа
--quiet, отключающего вывод всех сообщений, кроме ошибок (Андрес Фройнд, Роберт Хаас) §Добавление в pg_dump ключа
--include-foreign-dataдля выгрузки данных со сторонних серверов (Луис М. Карриль) §Поддержка параллельного выполнения команд очистки в программе vacuumdb (Масахико Савада) §
Этот режим включается новым аргументом
--parallel.Поддержка выполнения операций reindexdb в несколько потоков (Жюльен Руо) §
Параллельный режим включается новым параметром
--jobs.Реализация в dropdb возможности принудительно удалить базу, отключив от неё пользователей (Павел Стехуле)
Для такого удаления предназначен ключ
-f.Ликвидация ключей
--adduserи--no-adduserкоманды createuser (Александр Лахин)Вместо них уже очень давно поддерживаются ключи
--superuserи--no-superuser.Использование каталога, в котором находится запущенная программа pg_upgrade, в качестве значения по умолчанию параметра
--new-bindir(Даниэль Густафссон) §
E.24.3.10. Документация
Добавление в документацию глоссария (Кори Хинкер, Юрген Пуртц, Роджер Гаркави, Альваро Эррера)
Переформатирование таблиц с информацией о функциях и операторах для улучшения визуального восприятия (Том Лейн) §
Переход к использованию DocBook 4.5 (Питер Эйзентраут) §
E.24.3.11. Исходный код
Обеспечение поддержки сборки в Visual Studio 2019 (Харибабу Комми) §
Добавление поддержки MSYS2 (Питер Эйзентраут) §
Добавление ассемблерного кода реализации compare_exchange и fetch_add для компиляторов на платформе Power PC (Ной Миш) §
Обновление словарей стеммера Snowball, используемых при полнотекстовом поиске (Панайотис Мавройоргос)
В результате добавился стеммер для греческого языка, а также обновились стеммеры для датского и французского языков.
Ликвидация поддержки Windows 2000 (Микаэль Пакье) §
Прекращение поддержки отличных от ELF форматов двоичных файлов в системах BSD (Питер Эйзентраут) §
Прекращение поддержки Python версии 2.5.X и более старых (Питер Эйзентраут) §
Прекращение поддержки OpenSSL версии 0.9.8 и 1.0.0 (Микаэль Пакье) §
Удаление параметров configure
--disable-float8-byvalи--disable-float4-byval(Питер Эйзентраут) § §Они были нужны для совместимости с некоторыми функциями на C, имеющими API версии 0, но такие функции уже не поддерживаются.
Передача строки запроса в функции-обработчики, вызываемые планировщиком (Паскаль Легран, Жюльен Руо) §
Возможность подключения обработчиков, вызываемых при выполнении
TRUNCATE(Юлиан Ходорковский) §Возможность подключения обработчиков, вызываемых при инициализации TLS (Эндрю Дунстан) §
Возможность сборки без предопределённого каталога Unix-сокетов (Питер Эйзентраут) §
Уменьшение вероятности конфликта при выборе ключей ресурсов SysV на платформах Unix (Том Лейн) §
Использование функций операционной системы для надёжной очистки памяти, содержащей конфиденциальную информацию (Питер Эйзентраут) §
Таким образом очищается область памяти, содержащая пароль.
Добавление скрипта
headerscheckдля проверки совместимости заголовочных файлов C (Том Лейн) §Реализация внутренних списков в виде массивов, а не в виде цепочки элементов (Том Лейн) §
Это способствует увеличению быстродействия запросов, обращающихся ко множеству объектов.
Изменение API функции
TS_execute()(Том Лейн, Павел Борисов) § §Обработчики
TS_executeтеперь должны оперировать троичной логикой (да/нет/возможно). Кроме того, теперь по умолчанию точно вычисляются запросы с отрицанием.
E.24.3.12. Дополнительные модули
Возможность описания доверенных расширений (Том Лейн) §
Такие расширения теперь могут устанавливаться в базу данных обычными пользователями, имеющими только право
CREATEна уровне базы данных. В результате этого изменения был также удалён системный каталогpg_pltemplate.Предоставление обычным пользователям возможности подключаться к сторонним серверам через postgres_fdw, не указывая пароль (Крейг Рингер) §
Для этого суперпользователь может задать в сопоставлении пользователей параметр
password_required, равный false. При этом необходимо позаботиться о том, чтобы обычные пользователи не могли использовать учётные данные суперпользователей для подключения к стороннему серверу.Поддержка в postgres_fdw аутентификации по сертификатам (Крейг Рингер) §
При этом разные пользователи могут использовать разные сертификаты.
Возможность ограничения доступа к команде
TRUNCATEсредствами sepgsql (Юлиан Ходорковский) §Добавление расширения bool_plperl, которое преобразует логические значения SQL в логические значения PL/Perl и наоборот (Иван Панченко) §
Реализация в pg_stat_statements отдельной обработки указания
FOR UPDATEв командахSELECT ... FOR UPDATE(Эндрю Гирт, Вик Фиринг) §Реализация в pg_stat_statements возможности отслеживать время планирования запросов (Жюльен Руо, Паскаль Легран, Томас Манро, Фудзии Масао) § §
Ранее отслеживалось только время выполнения.
Исправление синтаксиса lquery в ltree для реализации более логичного поведения отрицания (!) (Филип Рембялковский, Том Лейн, Никита Глухов) § §
Также в запросах без * теперь можно указать интервал, ограничивающий число вхождений ({}).
Добавление поддержки двоичного ввода-вывода для типов ltree, lquery и ltxtquery (Нино Флорис) §
Добавление в dict_int возможности игнорировать знак у целых чисел (Джефф Джейнс) §
Добавление в adminpack функции
pg_file_sync()для синхронизации файла с файловой системой (Фудзии Масао) §Добавление в pageinspect функций для вывода значений
t_infomask/t_infomask2в понятном человеку виде (Крейг Рингер, Савада Масахико, Микаэль Пакье) § §Добавление в вывод pageinspect столбцов с информацией об исключении дубликатов в индексах-B-деревьях (Питер Гейган) §
E.24.4. Благодарственный список
Перечисленные ниже (в алфавитном порядке) лица сделали вклад в этот выпуск, разрабатывая, совершенствуя и рецензируя код, принимая правки, проводя тестирование или сообщая о проблемах.
| Абхиджит Менон-Сен (Abhijit Menon-Sen) |
| Адам Ли (Adam Lee) |
| Адам Скотт (Adam Scott) |
| Аде Хэйуорд (Adé Heyward) |
| Адриен Найрат (Adrien Nayrat) |
| Айзек Морленд (Isaac Morland) |
| Аластер Маккинли (Alastair McKinley) |
| Алекс Мейси (Alex Macy) |
| Александр Акципетров (Alex Aktsipetrov) |
| Александр Коротков (Alexander Korotkov) |
| Александр Кузьменков (Alexander Kuzmenkov) |
| Александр Кукушкин (Alexander Kukushkin) |
| Александр Лахин (Alexander Lakhin) |
| Александр Парфёнов (Aleksandr Parfenov) |
| Александр Шульгин (Alex Shulgin) |
| Алексей Баштанов (Alexey Bashtanov) |
| Алексей Клюкин (Oleksii Kliukin) |
| Алексей Кондратов (Alexey Kondratov) |
| Альваро Эррера (Álvaro Herrera) |
| Амит Капила (Amit Kapila) |
| Амит Ланготе (Amit Langote) |
| Амит Хандекар (Amit Khandekar) |
| Амул Сул (Amul Sul) |
| Анастасия Лубенникова (Anastasia Lubennikova) |
| Андреас Джозеф Крог (Andreas Joseph Krogh) |
| Андреас Зельтенрейх (Andreas Seltenreich) |
| Андреас Карлссон (Andreas Karlsson) |
| Андреас Кунерт (Andreas Kunert) |
| Андрей Билле (Andrew Bille) |
| Андрей Бородин (Andrey Borodin) |
| Андрей Зубков (Andrei Zubkov) |
| Андрей Клычков (Andrey Klychkov) |
| Андрей Лепихов (Andrey Lepikhov) |
| Андрес Фройнд (Andres Freund) |
| Анна Акентьева (Anna Akenteva) |
| Анна Эндо (Anna Endo) |
| Антон Власов (Anton Vlasov) |
| Антони Новосьен (Anthony Nowocien) |
| Антонин Хоуска (Antonin Houska) |
| Антс Аасма (Ants Aasma) |
| Арне Роланд (Arne Roland) |
| Арнольд Мюллер (Arnold Müller) |
| Арсений Шер (Arseny Sher) |
| Артур Закиров (Artur Zakirov) |
| Артур Насименту (Arthur Nascimento) |
| Асим Правин (Asim Praveen) |
| Асиф Рехман (Asif Rehman) |
| Атсуши Торикоши (Atsushi Torikoshi) |
| Аугустинас Йокубаускас (Augustinas Jokubauskas) |
| Ахсан Хади (Ahsan Hadi) |
| Ашвин Агравал (Ashwin Agrawal) |
| Ашутош Бапат (Ashutosh Bapat) |
| Ашутош Шарма (Ashutosh Sharma) |
| Бейзил Бурк (Basil Bourque) |
| Бен Корнет (Ben Cornett) |
| Бенджи Гиллам (Benjie Gillam) |
| Бенуа Лобро (Benoît Lobréau) |
| Бернд Хелмле (Bernd Helmle) |
| Бина Эмерсон (Beena Emerson) |
| Бинго Бао (Binguo Bao) |
| Брайан Вильямс (Brian Williams) |
| Брандур Лич (Brandur Leach) |
| Брент Бейтс (Brent Bates) |
| Брэд Дейонг (Brad DeJong) |
| Брюс Момджян (Bruce Momjian) |
| Бхарат Рупиредди (Bharath Rupireddy) |
| Бхаргав Каминени (Bhargav Kamineni) |
| Вайет Алт (Wyatt Alt) |
| Вигнеш Си (Vignesh C) |
| Вик Фиринг (Vik Fearing) |
| Виктор Вагнер (Victor Wagner) |
| Виктор Егоров (Victor Yegorov) |
| Вилл Лайнвебер (Will Leinweber) |
| Вильям Кровелл (William Crowell) |
| Винай Банакар (Vinay Banakar) |
| Владимир Лесков (Vladimir Leskov) |
| Владимир Ситников (Vladimir Sitnikov) |
| Вячеслав Макаров (Vyacheslav Makarov) |
| Вячеслав Шаблистый (Vyacheslav Shablistyy) |
| Георгиос Коколатос (Georgios Kokolatos) |
| Гийом Леларж (Guillaume Lelarge) |
| Грег Нанкарроу (Greg Nancarrow) |
| Григорий Смолкин (Grigory Smolkin) |
| Гуаньчэн Ло (Guancheng Luo) |
| Давид Феттер (David Fetter) |
| Давиндер Сингх (Davinder Singh) |
| Дагфинн Ильмари Маннсакер (Dagfinn Ilmari Mannsåker) |
| Даниель Вестерман (Daniel Westermann) |
| Даниэль Верите (Daniel Vérité) |
| Даниэль Густафссон (Daniel Gustafsson) |
| Даниэль Фиори (Daniel Fiori) |
| Дейв Крамер (Dave Cramer) |
| Денис Стучалин (Denis Stuchalin) |
| Дент Джон (Dent John) |
| Джастин Кинг (Justin King) |
| Джастин Призби (Justin Pryzby) |
| Джеймс Грей (James Gray) |
| Джеймс Информ (James Inform) |
| Джеймс Коулман (James Coleman) |
| Джеймс Лукас (James Lucas) |
| Джеймс Хантер (James Hunter) |
| Джереми Смит (Jeremy Smith) |
| Джереми Шнайдер (Jeremy Schneider) |
| Джереми Эванс (Jeremy Evans) |
| Джерри Сиверс (Jerry Sievers) |
| Джеспер Педерсен (Jesper Pedersen) |
| Джесси Кинкед (Jesse Kinkead) |
| Джесси Чжан (Jesse Zhang) |
| Джефф Девис (Jeff Davis) |
| Джефф Джейнс (Jeff Janes) |
| Джи Чжан (Jie Zhang) |
| Дживан Ладхе (Jeevan Ladhe) |
| Дживан Чок (Jeevan Chalke) |
| Джим Нэсби (Jim Nasby) |
| Джимми Йи (Jimmy Yih) |
| Джо Конвей (Joe Conway) |
| Джон Нейлор (John Naylor) |
| Джон Сюй (John Hsu) |
| Джонатан С Кац (Jonathan S. Katz) |
| Дидье Готрон (Didier Gautheron) |
| Дилип Кумар (Dilip Kumar) |
| Дин Рашид (Dean Rasheed) |
| Дмитрий Белявский (Dmitry Belyavsky) |
| Дмитрий Долгов (Dmitry Dolgov) |
| Дмитрий Иванов (Dmitry Ivanov) |
| Дмитрий Тельпт (Dmitry Telpt) |
| Дмитрий Успенский (Dmitry Uspenskiy) |
| Доминик Чарнота (Dominik Czarnota) |
| Донмин Лю (Dongming Liu) |
| Дорофей Пролесковский (Darafei Praliaskouski) |
| Дэвид Гилман (David Gilman) |
| Дэвид Дж. Джонстон (David G. Johnston) |
| Дэвид Кристенсен (David Christensen) |
| Дэвид Роули (David Rowley) |
| Дэвид Стил (David Steele) |
| Дэвид Харпер (David Harper) |
| Дэвид Чжан (David Zhang) |
| Дэрил Вэйкотт (Daryl Waycott) |
| Евгений Коньков (Eugen Konkov) |
| Ёсикадзу Имаи (Yoshikazu Imai) |
| Жеан-Гийом де Рорте (Jehan-Guillaume de Rorthais) |
| Женхуа Цай (ZhenHua Cai) |
| Жиль Даролд (Gilles Darold) |
| Жобен Августин (Jobin Augustine) |
| Жорж Густаву Роша (Jorge Gustavo Rocha) |
| Жуй Хай Цзян (Rui Hai Jiang) |
| Жюльен Руо (Julien Rouhaud) |
| И Хуан (Yi Huang) |
| Ибрар Ахмед (Ibrar Ahmed) |
| Иван Картышов (Ivan Kartyshov) |
| Иван Панченко (Ivan Panchenko) |
| Иван Серджо Боргоново (Ivan Sergio Borgonovo) |
| Игон Ху (Yigong Hu) |
| Ильдар Мусин (Ildar Musin) |
| Инсон Мун (Insung Moon) |
| Иренеуш Плюта (Ireneusz Pluta) |
| Итан Уолдо (Ethan Waldo) |
| Иэн Барвик (Ian Barwick) |
| Йоанн Ла Канчеллера (Yoann La Cancellera) |
| Йозеф Нахмиас (Joseph Nahmias) |
| Йозеф Шиманек (Josef Šimánek) |
| Йон Йенсен (Jon Jensen) |
| Кайл Кингсбери (Kyle Kingsbury) |
| Камерон Эзелл (Cameron Ezell) |
| Карл О. Пинц (Karl O. Pinc) |
| Квентин Рамо (Quentin Rameau) |
| Келли Минь (Kelly Min) |
| Кен Танцер (Ken Tanzer) |
| Кирилл Бычик (Kirill Bychik) |
| Кирк Джемисон (Kirk Jamison) |
| Кит Фиске (Keith Fiske) |
| Константин Книжник (Konstantin Knizhnik) |
| Кори Хинкер (Corey Huinker) |
| Крейг Рингер (Craig Ringer) |
| Крис Бенди (Chris Bandy) |
| Крис Трэверс (Chris Travers) |
| Кристоф Берг (Christoph Berg) |
| Кристоф Куртуа (Christophe Courtois) |
| Кунтал Гхош (Kuntal Ghosh) |
| Кэйсукэ Курода (Keisuke Kuroda) |
| Кэри Хуан (Cary Huang) |
| Кётаро Хоригути (Kyotaro Horiguchi) |
| Ларс Канис (Lars Kanis) |
| Лауренц Альбе (Laurenz Albe) |
| Лейф Гуннар Эрландсен (Leif Gunnar Erlandsen) |
| Ли Япинь (Li Japin) |
| Луис М. Карриль (Luis M. Carril) |
| Лукас Виечелли (Lucas Viecelli) |
| Лукаш Соботка (Lukáš Sobotka) |
| Людмила Мантрова (Liudmila Mantrova) |
| Магнус Хагандер (Magnus Hagander) |
| Майк Пальмиотто (Mike Palmiotto) |
| Майкл Ло (Michael Luo) |
| Максанс Алуш (Maxence Ahlouche) |
| Мануэль Риггер (Manuel Rigger) |
| Марина Полякова (Marina Polyakova) |
| Марк Вон (Mark Wong) |
| Марк Дилгер (Mark Dilger) |
| Марк Манро (Marc Munro) |
| Марко Тииккая (Marko Tiikkaja) |
| Маркус Винанд (Markus Winand) |
| Маркуш Давид (Marcos David) |
| Мартейн Ван Остерхаут (Martijn van Oosterhout) |
| Марти Раудсепп (Marti Raudsepp) |
| Масао Фудзии (Masao Fujii) |
| Масахико Савада (Masahiko Sawada) |
| Масахиро Икеда (Masahiro Ikeda) |
| Матео Беккати (Matteo Beccati) |
| Матеуш Гузик (Mateusz Guzik) |
| Махадеван Рамачандран (Mahadevan Ramachandran) |
| Махендра Сингх Талор (Mahendra Singh Thalor) |
| Мачик Сакрейда (Maciek Sakrejda) |
| Мелани Плейгман (Melanie Plageman) |
| Микаэль Пакье (Michael Paquier) |
| Митхун Сай (Mithun Cy) |
| Михаил Николаев (Michail Nikolaev) |
| Михаэль Банк (Michael Banck) |
| Михаэль Мескес (Michael Meskes) |
| Мувад Ли (Movead Li) |
| Мэтт Джибсон (Matt Jibson) |
| Назлы Уур Кёйлюоглу (Nazli Ugur Koyluoglu) |
| Натан Боссарт (Nathan Bossart) |
| Неха Шарма (Neha Sharma) |
| Никита Глухов (Nikita Glukhov) |
| Никола Конту (Nicola Contu) |
| Николай Шаплов (Nikolay Shaplov) |
| Николас Альварес (Nicolás Alvarez) |
| Никхил Сонтакке (Nikhil Sontakke) |
| Нино Флорис (Nino Floris) |
| Ной Миш (Noah Misch) |
| Нориёси Синода (Noriyoshi Shinoda) |
| Олег Бартунов (Oleg Bartunov) |
| Олег Самойлов (Oleg Samoilov) |
| Ондрей Йирман (Ondrej Jirman) |
| Остин Дренски (Austin Drenski) |
| Паван Деоласи (Pavan Deolasee) |
| Павел Борисов (Pavel Borisov) |
| Павел Лузанов (Pavel Luzanov) |
| Павел Сиваш (Paul Sivash) |
| Павел Стехуле (Pavel Stehule) |
| Павел Судеревский (Pavel Suderevsky) |
| Панайотис Мавройоргос (Panagiotis Mavrogiorgos) |
| Паскаль Легран (Pascal Legrand) |
| Патрик Макхарди (Patrick McHardy) |
| Петер Биллен (Peter Billen) |
| Петр Желинек (Petr Jelínek) |
| Питер Гейган (Peter Geoghegan) |
| Питер Смит (Peter Smith) |
| Питер Эйзентраут (Peter Eisentraut) |
| Пол Гуо (Paul Guo) |
| Пол Рамсей (Paul Ramsey) |
| Пол Спенсер (Paul Spencer) |
| Пол Юнгвирт (Paul Jungwirth) |
| Прабхат Саху (Prabhat Sahu) |
| Пьер Дюкроке (Pierre Ducroquet) |
| Пьер Жиро (Pierre Giraud) |
| Пэйфэн Цю (Peifeng Qiu) |
| Пэнчжоу Тан (Pengzhou Tang) |
| Пётр Влодарчик (Piotr Wlodarczyk) |
| Пётр Габриэль Косински (Piotr Gabriel Kosinski) |
| Пётр Фёдоров (Petr Fedorov) |
| Радж Мохите (Raj Mohite) |
| Раджкумар Рагхуванши (Rajkumar Raghuwanshi) |
| Райан Ламберт (Ryan Lambert) |
| Раманараяна Мусунуру (Ramanarayana Musunuru) |
| Ранье Вилела (Ranier Vilela) |
| Рареш Салкудян (Rares Salcudean) |
| Рауль Марин Родригес (Raúl Marín Rodríguez) |
| Рафаэль Кастро (Rafael Castro) |
| Рафия Сабих (Rafia Sabih) |
| Реймонд Мартин (Raymond Martin) |
| Рейо Сухонен (Reijo Suhonen) |
| Ричард Гуо (Richard Guo) |
| Роберт Калерт (Robert Kahlert) |
| Роберт Трит (Robert Treat) |
| Роберт Форд (Robert Ford) |
| Роберт Хаас (Robert Haas) |
| Робин Абби (Robin Abbi) |
| Робинс Таракан (Robins Tharakan) |
| Роджер Гаркави (Roger Harkavy) |
| Роман Пешкуров (Roman Peshkurov) |
| Руи ДеСуоза (Rui DeSousa) |
| Рушаб Латиа (Rushabh Lathia) |
| Рёхэй Такахаси (Ryohei Takahashi) |
| Саймон Риггс (Simon Riggs) |
| Сергей Агалаков (Sergei Agalakov) |
| Сергей Корнилов (Sergei Kornilov) |
| Сергей Черкашин (Sergey Cherkashin) |
| Сероп Саркуни (Sehrope Sarkuni) |
| Скотт Райб (Scott Ribe) |
| Славомир Ходницки (Slawomir Chodnicki) |
| Соумйадип Чакраборти (Soumyadeep Chakraborty) |
| Стефан Лорек (Stéphane Lorek) |
| Стив Роджерсон (Steve Rogerson) |
| Стивен Винфилд (Steven Winfield) |
| Стивен Фрост (Stephen Frost) |
| Сурадж Хараге (Suraj Kharage) |
| Сурафел Темесген (Surafel Temesgen) |
| Таканори Асаба (Takanori Asaba) |
| Такао Фудзии (Takao Fujii) |
| Такаюки Цунакава (Takayuki Tsunakawa) |
| Такума Хосиай (Takuma Hoshiai) |
| Там Нгуен (Tham Nguyen) |
| Тацуо Исии (Tatsuo Ishii) |
| Тацуро Ямада (Tatsuro Yamada) |
| Тацухито Касахара (Tatsuhito Kasahara) |
| Тейлор Веселы (Taylor Vesely) |
| Тибо Мадлен (Thibaut Madelaine) |
| Тим Кларк (Tim Clarke) |
| Тим Мёльман (Tim Möhlmann) |
| Том Браун (Thom Brown) |
| Том Готтфрид (Tom Gottfried) |
| Том Лейн (Tom Lane) |
| Том Эллис (Tom Ellis) |
| Томас Келлерер (Thomas Kellerer) |
| Томас Манро (Thomas Munro) |
| Томаш Вондра (Tomas Vondra) |
| Туомас Лейкола (Tuomas Leikola) |
| Тушар Ахуджа (Tushar Ahuja) |
| Тьягу Анастасиу (Tiago Anastacio) |
| Фабрицио де Ройес Мелло (Fabrízio de Royes Mello) |
| Фабьен Коэльо (Fabien Coelho) |
| Феликс Лехнер (Felix Lechner) |
| Фил Байер (Phil Bayer) |
| Филип Рембялковский (Filip Rembialkowski) |
| Филип Семанчук (Philip Semanchuk) |
| Филип Януш (Filip Janus) |
| Филипп Бодуэн (Philippe Beaudoin) |
| Франк Ганьепен (Frank Gagnepain) |
| Фёдор Сигаев (Teodor Sigaev) |
| Хади Мошаеди (Hadi Moshayedi) |
| Хайин Тан (Haiying Tang) |
| Хайме Казанова (Jaime Casanova) |
| Хамид Ахтар (Hamid Akhtar) |
| Ханс Бушман (Hans Buschmann) |
| Хао Ву (Hao Wu) |
| Харибабу Комми (Haribabu Kommi) |
| Харука Такацука (Haruka Takatsuka) |
| Хейкки Линнакангас (Heikki Linnakangas) |
| Химаншу Упадхьяя (Himanshu Upadhyaya) |
| Хиронобу Судзуки (Hironobu Suzuki) |
| Хит Лорд (Heath Lord) |
| Хуан Хосе Сантамария Флеча (Juan José Santamaría Flecha) |
| Хью Ван (Hugh Wang) |
| Хью Макмастер (Hugh McMaster) |
| Хью Раналли (Hugh Ranalli) |
| Цзянь Чжан (Jian Zhang) |
| Цуйпин Линь (Cuiping Lin) |
| Цюань Цзунлян (Quan Zongliang) |
| Чарльз Оффенбахер (Charles Offenbacher) |
| Ченьян Лу (Chenyang Lu) |
| Чепмен Флэк (Chapman Flack) |
| Чэнь Хуацзюнь (Chen Huajun) |
| Шеньхао Ван (Shenhao Wang) |
| Шон Ван (Shawn Wang) |
| Шон Дебнатх (Shawn Debnath) |
| Шон Фаррел (Sean Farrell) |
| Шэй Роджански (Shay Rojansky) |
| Эд Морли (Ed Morley) |
| Эдмунд Хорнер (Edmund Horner) |
| Эйлер Тавейра (Euler Taveira) |
| Эмре Хасегели (Emre Hasegeli) |
| Эндрю Гирт (Andrew Gierth) |
| Эндрю Дунстан (Andrew Dunstan) |
| Эрвин Брандштеттер (Erwin Brandstetter) |
| Эрик Гиллум (Eric Gillum) |
| Эрик Рижкерс (Erik Rijkers) |
| Эцуро Фудзита (Etsuro Fujita) |
| Ю Кимура (Yu Kimura) |
| Юго Нагата (Yugo Nagata) |
| Юзуко Хосоя (Yuzuko Hosoya) |
| Юлиан Бэкес (Julian Backes) |
| Юлиан Ходорковский (Yuli Khodorkovskiy) |
| Юрген Пуртц (Jürgen Purtz) |
| Юсукэ Эгашира (Yusuke Egashira) |
| Юя Ватари (Yuya Watari) |
| Ян Мусслер (Jan Mussler) |
| Ян Сяо (Yang Xiao) |
| Ярослав Сивы (Jaroslav Sivy) |
| Ярослав Щёкин (Yaroslav Schekin) |
E.24. Release 13
Release date: 2020-09-24
E.24.1. Overview
PostgreSQL 13 contains many new features and enhancements, including:
Space savings and performance gains from de-duplication of B-tree index entries
Improved performance for queries that use aggregates or partitioned tables
Better query planning when using extended statistics
Parallelized vacuuming of indexes
Incremental sorting
The above items and other new features of PostgreSQL 13 are explained in more detail in the sections below.
E.24.2. Migration to Version 13
A dump/restore using pg_dumpall or use of pg_upgrade or logical replication is required for those wishing to migrate data from any previous release. See Section 18.6 for general information on migrating to new major releases.
Version 13 contains a number of changes that may affect compatibility with previous releases. Observe the following incompatibilities:
Change
SIMILAR TO ... ESCAPE NULLto returnNULL(Tom Lane) §This new behavior matches the SQL specification. Previously a null
ESCAPEvalue was taken to mean using the default escape string (a backslash character). This also applies tosubstring(. The previous behavior has been retained in old views by keeping the original function unchanged.textFROMpatternESCAPEtext)Make
json[b]_to_tsvector()fully check the spelling of itsstringoption (Dominik Czarnota) §Change the way non-default effective_io_concurrency values affect concurrency (Thomas Munro) §
Previously, this value was adjusted before setting the number of concurrent requests. The value is now used directly. Conversion of old values to new ones can be done using:
SELECT round(sum(
OLDVALUE/ n::float)) AS newvalue FROM generate_series(1,OLDVALUE) s(n);Prevent display of auxiliary processes in pg_stat_ssl and pg_stat_gssapi system views (Euler Taveira) §
Queries that join these views to pg_stat_activity and wish to see auxiliary processes will need to use left joins.
Rename various wait events to improve consistency (Fujii Masao, Tom Lane) § § § § §
Fix
ALTER FOREIGN TABLE ... RENAME COLUMNto return a more appropriate command tag (Fujii Masao) §Previously it returned
ALTER TABLE; now it returnsALTER FOREIGN TABLE.Fix
ALTER MATERIALIZED VIEW ... RENAME COLUMNto return a more appropriate command tag (Fujii Masao) §Previously it returned
ALTER TABLE; now it returnsALTER MATERIALIZED VIEW.Rename configuration parameter
wal_keep_segmentsto wal_keep_size (Fujii Masao) §This determines how much WAL to retain for standby servers. It is specified in megabytes, rather than number of files as with the old parameter. If you previously used
wal_keep_segments, the following formula will give you an approximately equivalent setting:wal_keep_size = wal_keep_segments * wal_segment_size (typically 16MB)
Remove support for defining operator classes using pre-PostgreSQL 8.0 syntax (Daniel Gustafsson) §
Remove support for defining foreign key constraints using pre-PostgreSQL 7.3 syntax (Daniel Gustafsson) §
Remove support for "opaque" pseudo-types used by pre-PostgreSQL 7.3 servers (Daniel Gustafsson) §
Remove support for upgrading unpackaged (pre-9.1) extensions (Tom Lane) §
The
FROMoption ofCREATE EXTENSIONis no longer supported. Any installations still using unpackaged extensions should upgrade them to a packaged version before updating to PostgreSQL 13.Remove support for
posixrulesfiles in the timezone database (Tom Lane) §IANA's timezone group has deprecated this feature, meaning that it will gradually disappear from systems' timezone databases over the next few years. Rather than have a behavioral change appear unexpectedly with a timezone data update, we have removed PostgreSQL's support for this feature as of version 13. This affects only the behavior of POSIX-style time zone specifications that lack an explicit daylight savings transition rule; formerly the transition rule could be determined by installing a custom
posixrulesfile, but now it is hard-wired. The recommended fix for any affected installations is to start using a geographical time zone name.In ltree, when an
lquerypattern contains adjacent asterisks with braces, e.g.,*{2}.*{3}, properly interpret that as*{5}(Nikita Glukhov) §Fix pageinspect's
bt_metap()to return more appropriate data types that are less likely to overflow (Peter Geoghegan) §
E.24.3. Changes
Below you will find a detailed account of the changes between PostgreSQL 13 and the previous major release.
E.24.3.1. Server
E.24.3.1.1. Partitioning
Allow pruning of partitions to happen in more cases (Yuzuko Hosoya, Amit Langote, Álvaro Herrera) § §
Allow partitionwise joins to happen in more cases (Ashutosh Bapat, Etsuro Fujita, Amit Langote, Tom Lane) § §
For example, partitionwise joins can now happen between partitioned tables even when their partition bounds do not match exactly.
Support row-level
BEFOREtriggers on partitioned tables (Álvaro Herrera) §However, such a trigger is not allowed to change which partition is the destination.
Allow partitioned tables to be logically replicated via publications (Amit Langote) § §
Previously, partitions had to be replicated individually. Now a partitioned table can be published explicitly, causing all its partitions to be published automatically. Addition/removal of a partition causes it to be likewise added to or removed from the publication. The
CREATE PUBLICATIONoptionpublish_via_partition_rootcontrols whether changes to partitions are published as their own changes or their parent's.Allow logical replication into partitioned tables on subscribers (Amit Langote) §
Previously, subscribers could only receive rows into non-partitioned tables.
Allow whole-row variables (that is,
table.*) to be used in partitioning expressions (Amit Langote) §
E.24.3.1.2. Indexes
More efficiently store duplicates in B-tree indexes (Anastasia Lubennikova, Peter Geoghegan) §
This allows efficient B-tree indexing of low-cardinality columns by storing duplicate keys only once. Users upgrading with pg_upgrade will need to use
REINDEXto make an existing index use this feature.Allow GiST and SP-GiST indexes on
boxcolumns to supportORDER BYqueries (Nikita Glukhov) § §box<->pointAllow GIN indexes to more efficiently handle
!(NOT) clauses intsquerysearches (Nikita Glukhov, Alexander Korotkov, Tom Lane, Julien Rouhaud) §Allow index operator classes to take parameters (Nikita Glukhov) §
Allow
CREATE INDEXto specify the GiST signature length and maximum number of integer ranges (Nikita Glukhov) §Indexes created on four and eight-byte integer array, tsvector, pg_trgm, ltree, and hstore columns can now control these GiST index parameters, rather than using the defaults.
Prevent indexes that use non-default collations from being added as a table's unique or primary key constraint (Tom Lane) §
The index's collation must match that of the underlying column, but
ALTER TABLEpreviously failed to check this.
E.24.3.1.3. Optimizer
Improve the optimizer's selectivity estimation for containment/match operators (Tom Lane) §
Allow setting the statistics target for extended statistics (Tomas Vondra) §
This is controlled with the new command option
ALTER STATISTICS ... SET STATISTICS. Previously this was computed based on more general statistics target settings.Allow use of multiple extended statistics objects in a single query (Tomas Vondra) § §
Allow use of extended statistics objects for OR clauses and IN/
ANYconstant lists (Pierre Ducroquet, Tomas Vondra) § § §Allow functions in
FROMclauses to be pulled up (inlined) if they evaluate to constants (Alexander Kuzmenkov, Aleksandr Parfenov) § §
E.24.3.1.4. General Performance
Implement incremental sorting (James Coleman, Alexander Korotkov, Tomas Vondra) § §
If an intermediate query result is known to be sorted by one or more leading keys of a required sort ordering, the additional sorting can be done considering only the remaining keys, if the rows are sorted in batches that have equal leading keys.
If necessary, this can be controlled using enable_incremental_sort.
Improve the performance of sorting inet values (Brandur Leach) §
Allow hash aggregation to use disk storage for large aggregation result sets (Jeff Davis) § § §
Previously, hash aggregation was avoided if it was expected to use more than work_mem memory. Now, a hash aggregation plan can be chosen despite that. The hash table will be spilled to disk if it exceeds
work_memtimes hash_mem_multiplier.This behavior is normally preferable to the old behavior, in which once hash aggregation had been chosen, the hash table would be kept in memory no matter how large it got — which could be very large if the planner had misestimated. If necessary, behavior similar to that can be obtained by increasing
hash_mem_multiplier.Allow inserts, not only updates and deletes, to trigger vacuuming activity in autovacuum (Laurenz Albe, Darafei Praliaskouski) §
Previously, insert-only activity would trigger auto-analyze but not auto-vacuum, on the grounds that there could not be any dead tuples to remove. However, a vacuum scan has other useful side-effects such as setting page-all-visible bits, which improves the efficiency of index-only scans. Also, allowing an insert-only table to receive periodic vacuuming helps to spread out the work of “freezing” old tuples, so that there is not suddenly a large amount of freezing work to do when the entire table reaches the anti-wraparound threshold all at once.
If necessary, this behavior can be adjusted with the new parameters autovacuum_vacuum_insert_threshold and autovacuum_vacuum_insert_scale_factor, or the equivalent table storage options.
Add maintenance_io_concurrency parameter to control I/O concurrency for maintenance operations (Thomas Munro) §
Allow WAL writes to be skipped during a transaction that creates or rewrites a relation, if wal_level is
minimal(Kyotaro Horiguchi) §Relations larger than wal_skip_threshold will have their files fsync'ed rather than generating WAL. Previously this was done only for
COPYoperations, but the implementation had a bug that could cause data loss during crash recovery.Improve performance when replaying
DROP DATABASEcommands when many tablespaces are in use (Fujii Masao) §Improve performance for truncation of very large relations (Kirk Jamison) §
Improve retrieval of the leading bytes of TOAST'ed values (Binguo Bao, Andrey Borodin) §
Previously, compressed out-of-line TOAST values were fully fetched even when it's known that only some leading bytes are needed. Now, only enough data to produce the result is fetched.
Improve performance of
LISTEN/NOTIFY(Martijn van Oosterhout, Tom Lane) § § §Speed up conversions of integers to text (David Fetter) §
Reduce memory usage for query strings and extension scripts that contain many SQL statements (Amit Langote) §
E.24.3.1.5. Monitoring
Allow
EXPLAIN, auto_explain, autovacuum, and pg_stat_statements to track WAL usage statistics (Kirill Bychik, Julien Rouhaud) § § §Allow a sample of SQL statements, rather than all statements, to be logged (Adrien Nayrat) §
A log_statement_sample_rate fraction of those statements taking more than log_min_duration_sample duration will be logged.
Add the backend type to csvlog and optionally log_line_prefix log output (Peter Eisentraut) §
Improve control of prepared statement parameter logging (Alexey Bashtanov, Álvaro Herrera) § §
The GUC setting log_parameter_max_length controls the maximum length of parameter values output during logging of non-error statements, while log_parameter_max_length_on_error does the same for logging of statements with errors. Previously, prepared statement parameters were never logged during errors.
Allow function call backtraces to be logged after errors (Peter Eisentraut, Álvaro Herrera) § §
The new parameter backtrace_functions specifies which C functions should generate backtraces on error.
Make vacuum buffer counters 64-bits wide to avoid overflow (Álvaro Herrera) §
E.24.3.1.6. System Views
Add
leader_pidto pg_stat_activity to report a parallel worker's leader process (Julien Rouhaud) §Add system view
pg_stat_progress_basebackupto report the progress of streaming base backups (Fujii Masao) §Add system view
pg_stat_progress_analyzeto report ANALYZE progress (Álvaro Herrera, Tatsuro Yamada, Vinayak Pokale) §Add system view
pg_shmem_allocationsto display shared memory usage (Andres Freund, Robert Haas) §Add system view
pg_stat_slruto monitor internal SLRU caches (Tomas Vondra) §Allow track_activity_query_size to be set as high as 1MB (Vyacheslav Makarov) §
The previous maximum was 100kB.
E.24.3.1.7. Wait Events
Report a wait event while creating a DSM segment with
posix_fallocate()(Thomas Munro) §Add wait event VacuumDelay to report on cost-based vacuum delay (Justin Pryzby) §
Add wait events for WAL archive and recovery pause (Fujii Masao) §
The new events are BackupWaitWalArchive and RecoveryPause.
Add wait events RecoveryConflictSnapshot and RecoveryConflictTablespace to monitor recovery conflicts (Masahiko Sawada) §
Improve performance of wait events on BSD-based systems (Thomas Munro) §
E.24.3.1.8. Authentication
Allow only superusers to view the ssl_passphrase_command setting (Insung Moon) §
This was changed as a security precaution.
Change the server's default minimum TLS version for encrypted connections from 1.0 to 1.2 (Peter Eisentraut) §
This choice can be controlled by ssl_min_protocol_version.
E.24.3.1.9. Server Configuration
Tighten rules on which utility commands are allowed in read-only transaction mode (Robert Haas) §
This change also increases the number of utility commands that can run in parallel queries.
Allow allow_system_table_mods to be changed after server start (Peter Eisentraut) §
Disallow non-superusers from modifying system tables when allow_system_table_mods is set (Peter Eisentraut) §
Previously, if allow_system_table_mods was set at server start, non-superusers could issue
INSERT/UPDATE/DELETEcommands on system tables.Enable support for Unix-domain sockets on Windows (Peter Eisentraut) §
E.24.3.2. Streaming Replication and Recovery
Allow streaming replication configuration settings to be changed by reload (Sergei Kornilov) §
Previously, a server restart was required to change primary_conninfo and primary_slot_name.
Allow WAL receivers to use a temporary replication slot when a permanent one is not specified (Peter Eisentraut, Sergei Kornilov) § §
This behavior can be enabled using wal_receiver_create_temp_slot.
Allow WAL storage for replication slots to be limited by max_slot_wal_keep_size (Kyotaro Horiguchi) §
Replication slots that would require exceeding this value are marked invalid.
Allow standby promotion to cancel any requested pause (Fujii Masao) §
Previously, promotion could not happen while the standby was in paused state.
Generate an error if recovery does not reach the specified recovery target (Leif Gunnar Erlandsen, Peter Eisentraut) §
Previously, a standby would promote itself upon reaching the end of WAL, even if the target was not reached.
Allow control over how much memory is used by logical decoding before it is spilled to disk (Tomas Vondra, Dilip Kumar, Amit Kapila) §
This is controlled by logical_decoding_work_mem.
Allow recovery to continue even if invalid pages are referenced by WAL (Fujii Masao) §
This is enabled using ignore_invalid_pages.
E.24.3.3. Utility Commands
Allow
VACUUMto process a table's indexes in parallel (Masahiko Sawada, Amit Kapila) §The new
PARALLELoption controls this.Allow
FETCH FIRSTto useWITH TIESto return any additional rows that match the last result row (Surafel Temesgen) §Report planning-time buffer usage in
EXPLAIN'sBUFFERoutput (Julien Rouhaud) §Make
CREATE TABLE LIKEpropagate aCHECKconstraint'sNO INHERITproperty to the created table (Ildar Musin, Chris Travers) §When using
LOCK TABLEon a partitioned table, do not check permissions on the child tables (Amit Langote) §Allow
OVERRIDING USER VALUEon inserts into identity columns (Dean Rasheed) §Add
ALTER TABLE ... DROP EXPRESSIONto allow removing theGENERATEDproperty from a column (Peter Eisentraut) §Fix bugs in multi-step
ALTER TABLEcommands (Tom Lane) §IF NOT EXISTSclauses now work as expected, in that derived actions (such as index creation) do not execute if the column already exists. Also, certain cases of combining related actions into oneALTER TABLEnow work when they did not before.Add
ALTER VIEWsyntax to rename view columns (Fujii Masao) §Renaming view columns was already possible, but one had to write
ALTER TABLE RENAME COLUMN, which is confusing.Add
ALTER TYPEoptions to modify a base type's TOAST properties and support functions (Tomas Vondra, Tom Lane) §Add
CREATE DATABASELOCALEoption (Peter Eisentraut) §This combines the existing options
LC_COLLATEandLC_CTYPEinto a single option.Allow
DROP DATABASEto disconnect sessions using the target database, allowing the drop to succeed (Pavel Stehule, Amit Kapila) §This is enabled by the
FORCEoption.Add structure member
tg_updatedcolsto allow C-language update triggers to know which column(s) were updated (Peter Eisentraut) §
E.24.3.4. Data Types
Add polymorphic data types for use by functions requiring compatible arguments (Pavel Stehule) §
The new data types are
anycompatible,anycompatiblearray,anycompatiblenonarray, andanycompatiblerange.Add SQL data type
xid8to expose FullTransactionId (Thomas Munro) §The existing
xiddata type is only four bytes so it does not provide the transaction epoch.Add data type
regcollationand associated functions, to represent OIDs of collation objects (Julien Rouhaud) §Use the glibc version in some cases as a collation version identifier (Thomas Munro) §
If the glibc version changes, a warning will be issued about possible corruption of collation-dependent indexes.
Add support for collation versions on Windows (Thomas Munro) §
Allow
ROWexpressions to have their members extracted with suffix notation (Tom Lane) §For example,
(ROW(4, 5.0)).f1now returns 4.
E.24.3.5. Functions
Add alternate version of
jsonb_set()with improvedNULLhandling (Andrew Dunstan) §The new function,
jsonb_set_lax(), handles aNULLnew value by either setting the specified key to a JSON null, deleting the key, raising an exception, or returning thejsonbvalue unmodified, as requested.Add jsonpath .
datetime()method (Nikita Glukhov, Teodor Sigaev, Oleg Bartunov, Alexander Korotkov) §This function allows JSON values to be converted to timestamps, which can then be processed in
jsonpathexpressions. This change also addsjsonpathfunctions that support time-zone-aware output.Add SQL functions
NORMALIZE() to normalize Unicode strings, andIS NORMALIZEDto check for normalization (Peter Eisentraut) §Add
min()andmax()aggregates forpg_lsn(Fabrízio de Royes Mello) §These are particularly useful in monitoring queries.
Allow Unicode escapes, e.g.,
E'\uornnnn'U&'\, to specify any character available in the database encoding, even when the database encoding is not UTF-8 (Tom Lane) §nnnn'Allow
to_date()andto_timestamp()to recognize non-English month/day names (Juan José Santamaría Flecha, Tom Lane) §The names recognized are the same as those output by
to_char()with the same format patterns.Add datetime format patterns
FF1–FF6to specify input or output of 1 to 6 fractional-second digits (Alexander Korotkov, Nikita Glukhov, Teodor Sigaev, Oleg Bartunov) §These patterns can be used by
to_char(),to_timestamp(), and jsonpath's .datetime().Add
SSSSSdatetime format pattern as an SQL-standard alias forSSSS(Nikita Glukhov, Alexander Korotkov) §Add function
gen_random_uuid()to generate version-4 UUIDs (Peter Eisentraut) §Previously UUID generation functions were only available in the external modules uuid-ossp and pgcrypto.
Add greatest-common-denominator (
gcd) and least-common-multiple (lcm) functions (Vik Fearing) §Improve the performance and accuracy of the
numerictype's square root (sqrt) and natural log (ln) functions (Dean Rasheed) § §Add function
min_scale()that returns the number of digits to the right of the decimal point that are required to represent anumericvalue with full accuracy (Pavel Stehule) §Add function
trim_scale()to reduce the scale of anumericvalue by removing trailing zeros (Pavel Stehule) §Add commutators of distance operators (Nikita Glukhov) §
For example, previously only
point<->linewas supported, nowline<->pointworks too.Create
xid8versions of all transaction ID functions (Thomas Munro) §The old
xid-based functions still exist, for backward compatibility.Allow
get_bit()andset_bit()to set bits beyond the first 256MB of abyteavalue (Movead Li) §Allow advisory-lock functions to be used in some parallel operations (Tom Lane) §
Add the ability to remove an object's dependency on an extension (Álvaro Herrera) §
The object can be a function, materialized view, index, or trigger. The syntax is
ALTER .. NO DEPENDS ON.
E.24.3.6. PL/pgSQL
E.24.3.7. Client Interfaces
Allow libpq clients to require channel binding for encrypted connections (Jeff Davis) §
Using the libpq connection parameter
channel_bindingforces the other end of the TLS connection to prove it knows the user's password. This prevents man-in-the-middle attacks.Add libpq connection parameters to control the minimum and maximum TLS version allowed for an encrypted connection (Daniel Gustafsson) § § §
The settings are ssl_min_protocol_version and ssl_max_protocol_version. By default, the minimum TLS version is 1.2 (this represents a behavioral change from previous releases).
Allow use of passwords to unlock client certificates (Craig Ringer, Andrew Dunstan) §
This is enabled by libpq's sslpassword connection parameter.
Allow libpq to use DER-encoded client certificates (Craig Ringer, Andrew Dunstan) §
Fix ecpg's
EXEC SQL elifdirective to work correctly (Tom Lane) §Previously it behaved the same as
endiffollowed byifdef, so that a successful previous branch of the sameifconstruct did not prevent expansion of theelifbranch or following branches.
E.24.3.8. Client Applications
E.24.3.8.1. psql
Add transaction status (
%x) to psql's default prompts (Vik Fearing) §Allow the secondary psql prompt to be blank but the same width as the primary prompt (Thomas Munro) §
This is accomplished by setting
PROMPT2to%w.Allow psql's
\gand\gxcommands to change \pset output options for the duration of that single command (Tom Lane) §This feature allows syntax like
\g (expand=on), which is equivalent to\gx.Add psql commands to display operator classes and operator families (Sergey Cherkashin, Nikita Glukhov, Alexander Korotkov) §
The new commands are
\dAc,\dAf,\dAo, and\dAp.Show table persistence in psql's
\dt+and related commands (David Fetter) §In verbose mode, the table/index/view shows if the object is permanent, temporary, or unlogged.
Improve output of psql's
\dfor TOAST tables (Justin Pryzby) §Fix redisplay after psql's
\ecommand (Tom Lane) §When exiting the editor, if the query doesn't end with a semicolon or
\g, the query buffer contents will now be displayed.Add
\warncommand to psql (David Fetter) §This is like
\echoexcept that the text is sent to stderr instead of stdout.Add the PostgreSQL home page to command-line
--helpoutput (Peter Eisentraut) §
E.24.3.8.2. pgbench
Allow pgbench to partition its “accounts” table (Fabien Coelho) §
This allows performance testing of partitioning.
Add pgbench command
\aset, which behaves like\gset, but for multiple queries (Fabien Coelho) §Allow pgbench to generate its initial data server-side, rather than client-side (Fabien Coelho) §
Allow pgbench to show script contents using option
--show-script(Fabien Coelho) §
E.24.3.9. Server Applications
Generate backup manifests for base backups, and verify them (Robert Haas) § §
A new tool pg_verifybackup can verify backups.
Have pg_basebackup estimate the total backup size by default (Fujii Masao) §
This computation allows
pg_stat_progress_basebackupto show progress. If that is not needed, it can be disabled by using the--no-estimate-sizeoption. Previously, this computation happened only if the--progressoption was used.Add an option to pg_rewind to configure standbys (Paul Guo, Jimmy Yih, Ashwin Agrawal) §
This matches pg_basebackup's
--write-recovery-confoption.Allow pg_rewind to use the target cluster's restore_command to retrieve needed WAL (Alexey Kondratov) §
This is enabled using the
-c/--restore-target-waloption.Have pg_rewind automatically run crash recovery before rewinding (Paul Guo, Jimmy Yih, Ashwin Agrawal) §
This can be disabled by using
--no-ensure-shutdown.Increase the
PREPARE TRANSACTION-related information reported by pg_waldump (Fujii Masao) §Add pg_waldump option
--quietto suppress non-error output (Andres Freund, Robert Haas) §Add pg_dump option
--include-foreign-datato dump data from foreign servers (Luis Carril) §Allow vacuum commands run by vacuumdb to operate in parallel mode (Masahiko Sawada) §
This is enabled with the new
--paralleloption.Allow reindexdb to operate in parallel (Julien Rouhaud) §
Parallel mode is enabled with the new
--jobsoption.Allow dropdb to disconnect sessions using the target database, allowing the drop to succeed (Pavel Stehule) §
This is enabled with the
-foption.Remove
--adduserand--no-adduserfrom createuser (Alexander Lakhin) §The long-supported preferred options for this are called
--superuserand--no-superuser.Use the directory of the pg_upgrade program as the default
--new-bindirsetting when running pg_upgrade (Daniel Gustafsson) §
E.24.3.10. Documentation
Add a glossary to the documentation (Corey Huinker, Jürgen Purtz, Roger Harkavy, Álvaro Herrera) §
Reformat tables containing function and operator information for better clarity (Tom Lane) §
Upgrade to use DocBook 4.5 (Peter Eisentraut) §
E.24.3.11. Source Code
Add support for building on Visual Studio 2019 (Haribabu Kommi) §
Add build support for MSYS2 (Peter Eisentraut) §
Add compare_exchange and fetch_add assembly language code for Power PC compilers (Noah Misch) §
Update Snowball stemmer dictionaries used by full text search (Panagiotis Mavrogiorgos) §
This adds Greek stemming and improves Danish and French stemming.
Remove support for Windows 2000 (Michael Paquier) §
Remove support for non-ELF BSD systems (Peter Eisentraut) §
Remove support for Python versions 2.5.X and earlier (Peter Eisentraut) §
Remove support for OpenSSL 0.9.8 and 1.0.0 (Michael Paquier) §
Remove configure options
--disable-float8-byvaland--disable-float4-byval(Peter Eisentraut) § §These were needed for compatibility with some version-zero C functions, but those are no longer supported.
Pass the query string to planner hook functions (Pascal Legrand, Julien Rouhaud) §
Add TLS init hook (Andrew Dunstan) §
Allow building with no predefined Unix-domain socket directory (Peter Eisentraut) §
Reduce the probability of SysV resource key collision on Unix platforms (Tom Lane) §
Use operating system functions to reliably erase memory that contains sensitive information (Peter Eisentraut) §
For example, this is used for clearing passwords stored in memory.
Add
headerscheckscript to test C header-file compatibility (Tom Lane) §Implement internal lists as arrays, rather than a chain of cells (Tom Lane) §
This improves performance for queries that access many objects.
Change the API for
TS_execute()(Tom Lane, Pavel Borisov) § §TS_executecallbacks must now provide ternary (yes/no/maybe) logic. Calculating NOT queries accurately is now the default.
E.24.3.12. Additional Modules
Allow extensions to be specified as trusted (Tom Lane) §
Such extensions can be installed in a database by users with database-level
CREATEprivileges, even if they are not superusers. This change also removes thepg_pltemplatesystem catalog.Allow non-superusers to connect to postgres_fdw foreign servers without using a password (Craig Ringer) §
Specifically, allow a superuser to set
password_requiredto false for a user mapping. Care must still be taken to prevent non-superusers from using superuser credentials to connect to the foreign server.Allow postgres_fdw to use certificate authentication (Craig Ringer) §
Different users can use different certificates.
Allow sepgsql to control access to the
TRUNCATEcommand (Yuli Khodorkovskiy) §Add extension bool_plperl which transforms SQL booleans to/from PL/Perl booleans (Ivan Panchenko) §
Have pg_stat_statements treat
SELECT ... FOR UPDATEcommands as distinct from those withoutFOR UPDATE(Andrew Gierth, Vik Fearing) §Allow pg_stat_statements to optionally track the planning time of statements (Julien Rouhaud, Pascal Legrand, Thomas Munro, Fujii Masao) § §
Previously only execution time was tracked.
Overhaul ltree's lquery syntax to treat
NOT(!) more logically (Filip Rembialkowski, Tom Lane, Nikita Glukhov) § §Also allow non-* queries to use a numeric range ({}) of matches.
Add support for binary I/O of ltree, lquery, and ltxtquery types (Nino Floris) §
Add an option to dict_int to ignore the sign of integers (Jeff Janes) §
Add adminpack function
pg_file_sync()to allow fsync'ing a file (Fujii Masao) §Add pageinspect functions to output
t_infomask/t_infomask2values in human-readable format (Craig Ringer, Sawada Masahiko, Michael Paquier) § §Add B-tree index de-duplication processing columns to pageinspect output (Peter Geoghegan) §
E.24.4. Acknowledgments
The following individuals (in alphabetical order) have contributed to this release as patch authors, committers, reviewers, testers, or reporters of issues.
| Abhijit Menon-Sen |
| Adam Lee |
| Adam Scott |
| Adé Heyward |
| Adrien Nayrat |
| Ahsan Hadi |
| Alastair McKinley |
| Aleksandr Parfenov |
| Alex Aktsipetrov |
| Alex Macy |
| Alex Shulgin |
| Alexander Korotkov |
| Alexander Kukushkin |
| Alexander Kuzmenkov |
| Alexander Lakhin |
| Alexey Bashtanov |
| Alexey Kondratov |
| Álvaro Herrera |
| Amit Kapila |
| Amit Khandekar |
| Amit Langote |
| Amul Sul |
| Anastasia Lubennikova |
| Andreas Joseph Krogh |
| Andreas Karlsson |
| Andreas Kunert |
| Andreas Seltenreich |
| Andrei Zubkov |
| Andres Freund |
| Andrew Bille |
| Andrew Dunstan |
| Andrew Gierth |
| Andrey Borodin |
| Andrey Klychkov |
| Andrey Lepikhov |
| Anna Akenteva |
| Anna Endo |
| Anthony Nowocien |
| Anton Vlasov |
| Antonin Houska |
| Ants Aasma |
| Arne Roland |
| Arnold Müller |
| Arseny Sher |
| Arthur Nascimento |
| Arthur Zakirov |
| Ashutosh Bapat |
| Ashutosh Sharma |
| Ashwin Agrawal |
| Asif Rehman |
| Asim Praveen |
| Atsushi Torikoshi |
| Augustinas Jokubauskas |
| Austin Drenski |
| Basil Bourque |
| Beena Emerson |
| Ben Cornett |
| Benjie Gillam |
| Benoît Lobréau |
| Bernd Helmle |
| Bharath Rupireddy |
| Bhargav Kamineni |
| Binguo Bao |
| Brad DeJong |
| Brandur Leach |
| Brent Bates |
| Brian Williams |
| Bruce Momjian |
| Cameron Ezell |
| Cary Huang |
| Chapman Flack |
| Charles Offenbacher |
| Chen Huajun |
| Chenyang Lu |
| Chris Bandy |
| Chris Travers |
| Christoph Berg |
| Christophe Courtois |
| Corey Huinker |
| Craig Ringer |
| Cuiping Lin |
| Dagfinn Ilmari Mannsåker |
| Daniel Fiori |
| Daniel Gustafsson |
| Daniel Vérité |
| Daniel Westermann |
| Darafei Praliaskouski |
| Daryl Waycott |
| Dave Cramer |
| David Christensen |
| David Fetter |
| David G. Johnston |
| David Gilman |
| David Harper |
| David Rowley |
| David Steele |
| David Zhang |
| Davinder Singh |
| Dean Rasheed |
| Denis Stuchalin |
| Dent John |
| Didier Gautheron |
| Dilip Kumar |
| Dmitry Belyavsky |
| Dmitry Dolgov |
| Dmitry Ivanov |
| Dmitry Telpt |
| Dmitry Uspenskiy |
| Dominik Czarnota |
| Dongming Liu |
| Ed Morley |
| Edmund Horner |
| Emre Hasegeli |
| Eric Gillum |
| Erik Rijkers |
| Erwin Brandstetter |
| Ethan Waldo |
| Etsuro Fujita |
| Eugen Konkov |
| Euler Taveira |
| Fabien Coelho |
| Fabrízio de Royes Mello |
| Felix Lechner |
| Filip Janus |
| Filip Rembialkowski |
| Frank Gagnepain |
| Georgios Kokolatos |
| Gilles Darold |
| Greg Nancarrow |
| Grigory Smolkin |
| Guancheng Luo |
| Guillaume Lelarge |
| Hadi Moshayedi |
| Haiying Tang |
| Hamid Akhtar |
| Hans Buschmann |
| Hao Wu |
| Haribabu Kommi |
| Haruka Takatsuka |
| Heath Lord |
| Heikki Linnakangas |
| Himanshu Upadhyaya |
| Hironobu Suzuki |
| Hugh McMaster |
| Hugh Ranalli |
| Hugh Wang |
| Ian Barwick |
| Ibrar Ahmed |
| Ildar Musin |
| Insung Moon |
| Ireneusz Pluta |
| Isaac Morland |
| Ivan Kartyshov |
| Ivan Panchenko |
| Ivan Sergio Borgonovo |
| Jaime Casanova |
| James Coleman |
| James Gray |
| James Hunter |
| James Inform |
| James Lucas |
| Jan Mussler |
| Jaroslav Sivy |
| Jeevan Chalke |
| Jeevan Ladhe |
| Jeff Davis |
| Jeff Janes |
| Jehan-Guillaume de Rorthais |
| Jeremy Evans |
| Jeremy Schneider |
| Jeremy Smith |
| Jerry Sievers |
| Jesper Pedersen |
| Jesse Kinkead |
| Jesse Zhang |
| Jian Zhang |
| Jie Zhang |
| Jim Nasby |
| Jimmy Yih |
| Jobin Augustine |
| Joe Conway |
| John Hsu |
| John Naylor |
| Jon Jensen |
| Jonathan Katz |
| Jorge Gustavo Rocha |
| Josef Šimánek |
| Joseph Nahmias |
| Juan José Santamaría Flecha |
| Julian Backes |
| Julien Rouhaud |
| Jürgen Purtz |
| Justin King |
| Justin Pryzby |
| Karl O. Pinc |
| Keisuke Kuroda |
| Keith Fiske |
| Kelly Min |
| Ken Tanzer |
| Kirill Bychik |
| Kirk Jamison |
| Konstantin Knizhnik |
| Kuntal Ghosh |
| Kyle Kingsbury |
| Kyotaro Horiguchi |
| Lars Kanis |
| Laurenz Albe |
| Leif Gunnar Erlandsen |
| Li Japin |
| Liudmila Mantrova |
| Lucas Viecelli |
| Luis M. Carril |
| Lukáš Sobotka |
| Maciek Sakrejda |
| Magnus Hagander |
| Mahadevan Ramachandran |
| Mahendra Singh Thalor |
| Manuel Rigger |
| Marc Munro |
| Marcos David |
| Marina Polyakova |
| Mark Dilger |
| Mark Wong |
| Marko Tiikkaja |
| Markus Winand |
| Marti Raudsepp |
| Martijn van Oosterhout |
| Masahiko Sawada |
| Masahiro Ikeda |
| Masao Fujii |
| Mateusz Guzik |
| Matt Jibson |
| Matteo Beccati |
| Maxence Ahlouche |
| Melanie Plageman |
| Michael Banck |
| Michael Luo |
| Michael Meskes |
| Michael Paquier |
| Michail Nikolaev |
| Mike Palmiotto |
| Mithun Cy |
| Movead Li |
| Nathan Bossart |
| Nazli Ugur Koyluoglu |
| Neha Sharma |
| Nicola Contu |
| Nicolás Alvarez |
| Nikhil Sontakke |
| Nikita Glukhov |
| Nikolay Shaplov |
| Nino Floris |
| Noah Misch |
| Noriyoshi Shinoda |
| Oleg Bartunov |
| Oleg Samoilov |
| Oleksii Kliukin |
| Ondrej Jirman |
| Panagiotis Mavrogiorgos |
| Pascal Legrand |
| Patrick McHardy |
| Paul Guo |
| Paul Jungwirth |
| Paul Ramsey |
| Paul Sivash |
| Paul Spencer |
| Pavan Deolasee |
| Pavel Borisov |
| Pavel Luzanov |
| Pavel Stehule |
| Pavel Suderevsky |
| Peifeng Qiu |
| Pengzhou Tang |
| Peter Billen |
| Peter Eisentraut |
| Peter Geoghegan |
| Peter Smith |
| Petr Fedorov |
| Petr Jelínek |
| Phil Bayer |
| Philip Semanchuk |
| Philippe Beaudoin |
| Pierre Ducroquet |
| Pierre Giraud |
| Piotr Gabriel Kosinski |
| Piotr Wlodarczyk |
| Prabhat Sahu |
| Quan Zongliang |
| Quentin Rameau |
| Rafael Castro |
| Rafia Sabih |
| Raj Mohite |
| Rajkumar Raghuwanshi |
| Ramanarayana M |
| Ranier Vilela |
| Rares Salcudean |
| Raúl Marín Rodríguez |
| Raymond Martin |
| Reijo Suhonen |
| Richard Guo |
| Robert Ford |
| Robert Haas |
| Robert Kahlert |
| Robert Treat |
| Robin Abbi |
| Robins Tharakan |
| Roger Harkavy |
| Roman Peshkurov |
| Rui DeSousa |
| Rui Hai Jiang |
| Rushabh Lathia |
| Ryan Lambert |
| Ryohei Takahashi |
| Scott Ribe |
| Sean Farrell |
| Sehrope Sarkuni |
| Sergei Agalakov |
| Sergei Kornilov |
| Sergey Cherkashin |
| Shawn Debnath |
| Shawn Wang |
| Shay Rojansky |
| Shenhao Wang |
| Simon Riggs |
| Slawomir Chodnicki |
| Soumyadeep Chakraborty |
| Stéphane Lorek |
| Stephen Frost |
| Steve Rogerson |
| Steven Winfield |
| Surafel Temesgen |
| Suraj Kharage |
| Takanori Asaba |
| Takao Fujii |
| Takayuki Tsunakawa |
| Takuma Hoshiai |
| Tatsuhito Kasahara |
| Tatsuo Ishii |
| Tatsuro Yamada |
| Taylor Vesely |
| Teodor Sigaev |
| Tham Nguyen |
| Thibaut Madelaine |
| Thom Brown |
| Thomas Kellerer |
| Thomas Munro |
| Tiago Anastacio |
| Tim Clarke |
| Tim Möhlmann |
| Tom Ellis |
| Tom Gottfried |
| Tom Lane |
| Tomas Vondra |
| Tuomas Leikola |
| Tushar Ahuja |
| Victor Wagner |
| Victor Yegorov |
| Vignesh C |
| Vik Fearing |
| Vinay Banakar |
| Vladimir Leskov |
| Vladimir Sitnikov |
| Vyacheslav Makarov |
| Vyacheslav Shablistyy |
| Will Leinweber |
| William Crowell |
| Wyatt Alt |
| Yang Xiao |
| Yaroslav Schekin |
| Yi Huang |
| Yigong Hu |
| Yoann La Cancellera |
| Yoshikazu Imai |
| Yu Kimura |
| Yugo Nagata |
| Yuli Khodorkovskiy |
| Yusuke Egashira |
| Yuya Watari |
| Yuzuko Hosoya |
| ZhenHua Cai |