E.45. Выпуск 9.5
Дата выпуска: 2016-01-07
E.45.1. Обзор
В число ключевых усовершенствований PostgreSQL 9.5 входят:
Возможность превращать команды
INSERT
, вызывающие конфликты ограничений, в командыUPDATE
, либо игнорировать ихДобавление в
GROUP BY
аналитической функциональности:GROUPING SETS
,CUBE
иROLLUP
Добавление механизма защиты на уровне строк
Создание механизмов для отслеживания прогресса репликации, включая средства идентификации источника отдельных изменений при логической репликации
Добавление блочно-зональных индексов (BRIN)
Существенное увеличение скорости сортировки
Существенное увеличение производительности на многопроцессорных машинах
Предыдущие пункты более подробно описаны в следующих разделах.
E.45.2. Миграция на версию 9.5
Тем, кто хочет мигрировать данные из любой предыдущей версии, необходимо выполнить выгрузку/загрузку данных с помощью pg_dumpall или воспользоваться pg_upgrade.
В версии 9.5 реализован ряд изменений, которые могут повлиять на совместимость с предыдущими выпусками. Рассмотрите следующие несовместимые аспекты:
Изменение приоритета операторов в соответствии со стандартом SQL (Том Лейн)
Приоритет операторов
<=
,>=
и<>
был понижен до приоритета операторов<
,>
и=
. Приоритет проверокIS
(например,x
IS NULL
) был понижен и стал непосредственно ниже приоритета этих шести операторов сравнения. Также операторы из нескольких слов, начинающиеся сNOT
, теперь имеют приоритет своего базового оператора (например,NOT BETWEEN
теперь имеет тот же приоритет, что иBETWEEN
), тогда как раньше их приоритет был несогласованным; они воспринимались какNOT
по отношению к левому операнду, но при этом как базовый оператор по отношению к правому. Новый параметр конфигурации operator_precedence_warning даёт возможность получать предупреждения о запросах, в которых эти изменения приоритета приводят к другому результату разбора запроса.Смена в pg_ctl выбираемого по умолчанию режима отключения с
smart
наfast
(Брюс Момджян)Это означает, что теперь по умолчанию сервер будет принудительно прерывать существующие сеансы, а не просто ждать их завершения.
Использование приведения присваивания для преобразований типов данных в присваиваниях PL/pgSQL, вместо перевода в текстовый вид и обратно (Том Лейн)
Вследствие этого изменения при преобразовании булевых значений в строковые получаются значения
true
иfalse
, а неt
иf
. Другие преобразования типов могут быть успешны в большем числе случаев, чем раньше; например, при присвоении числового значения3.9
целочисленной переменной, ей будет присвоено 4, а не произойдёт ошибка, как раньше. Если для некоторых исходного и целевого типов приведение присваивания не определено, PL/pgSQL вернётся к старому поведению с преобразованием через вывод/ввод.Возможность использования экранирования обратной косой чертой символов в параметрах командной строки сервера (Андрес Фройнд)
Ранее, пробелы в строке параметров всегда служили разделителями параметров, так что не было никакой возможности включить пробел в значение параметра. Чтобы указать обратную косую черту в значении параметра, теперь нужно написать
\\
.Изменение значения по умолчанию параметра GSSAPI
include_realm
на 1, чтобы по умолчанию имя области клиента не удалялось из имени принципала GSS или SSPI (Стивен Фрост)Замена параметра конфигурации
checkpoint_segments
параметрами min_wal_size и max_wal_size (Хейкки Линнакангас)Если вы ранее настраивали
checkpoint_segments
, следующая формула даст вам приблизительно эквивалентное значение:max_wal_size = (3 * checkpoint_segments) * 16MB
Заметьте, что значение по умолчанию параметра
max_wal_size
стало гораздо больше, чем раньше имел параметрcheckpoint_segments
, так что возможно, что корректировать этот параметр больше не потребуется.Регулирование снятия процессов при нехватке памяти в Linux через новые переменные окружения
PG_OOM_ADJUST_FILE
иPG_OOM_ADJUST_VALUE
, вместо параметров времени компиляцииLINUX_OOM_SCORE_ADJ
иLINUX_OOM_ADJ
(Гуржит Сингх)Списание параметра конфигурации сервера
ssl_renegotiation_limit
, который стал устаревшим в предыдущих выпусках (Андрес Фройнд)Хотя возможность повторного согласования SSL — хорошая вещь в теории, с ней связано достаточно ошибок, чтобы считать её скорее отрицательной на практике, и поэтому она будет исключена в будущих версиях соответствующих стандартов. Учитывая это, мы убрали поддержку этой возможности из PostgreSQL. Параметр
ssl_renegotiation_limit
сохранился, но ему нельзя присвоить ничего, кроме нуля (то есть он всегда отключён). Также он больше не описывается в документации.Удаление параметра конфигурации сервера
autocommit
, который уже был устаревшим и не работал (Том Лейн)Удаление из каталога
pg_authid
поляrolcatupdate
, так как оно было бесполезным (Адам Брайтвелл)В системном представлении
pg_stat_replication
в полеsent
теперь NULL, а не 0, представляет недействительное значение (Магнус Хагандер)Операторы извлечения элементов массивов
json
иjsonb
теперь могут принимать отрицательные позиции, которые отсчитываются от конца массивов JSON (Питер Гейган, Эндрю Дунстан)Ранее эти операторы возвращали
NULL
для отрицательных позиций.
E.45.3. Изменения
Ниже вы найдёте подробный список изменений, произошедших между предыдущим основным выпуском и выпуском PostgreSQL 9.5.
E.45.3.1. Сервер
E.45.3.1.1. Индексы
Добавление блочно-зональных индексов (BRIN) (Альваро Эррера)
Индексы BRIN хранят только сводные данные (например, минимальные и максимальные значения) по зонам блоков в куче. Поэтому они очень компактны и легко обновляются; при этом, если данные кластеризованы натуральным образом, такие индексы позволяют очень существенно ускорить операции поиска.
Реализация возможности выполнять в запросах точную фильтрацию по дистанции для объектов (многоугольников, кругов), индексируемых по описанным прямоугольникам с использованием GiST (Александр Коротков, Хейкки Линнакангас)
Ранее, для использования такого индекса требовалось применять подзапрос, выбирающий большое количество строк, упорядоченных по дистанции до окружающего прямоугольника, а затем дополнительно отфильтровывать результат, рассчитывая расстояние точнее.
Возможность использования индексов GiST в сканировании только по индексу (Анастасия Лубенникова, Хейкки Линнакангас, Андреас Карлссон)
Добавление параметра конфигурации gin_pending_list_limit, управляющего размером очередей GIN (Фудзии Масао)
Это значение можно также задать на уровне индекса как параметр хранения индекса. Ранее размер очереди зависел от параметра work_mem, что было неудобно, так как подходящие значения
work_mem
обычно оказывались слишком большими для данной цели.Выдача при создании хеш-индексов предупреждения о том, что они не защищены от сбоев (Брюс Момджян)
E.45.3.1.2. Общая производительность
Ускорение сортировки полей
varchar
,text
иnumeric
за счёт использования «сокращённых» ключей (Питер Гейган, Эндрю Гирт, Роберт Хаас)Расширение инфраструктуры, позволяющее производить сортировку, вызывая встроенные, не вызываемые из SQL функции сравнения, для выполнения команд
CREATE INDEX
,REINDEX
иCLUSTER
(Питер Гейган)Улучшение производительности соединений по хешу (Томаш Вондра, Роберт Хаас)
Улучшение параллелизма операции замены разделяемого буфера (Роберт Хаас, Амит Капила, Андрес Фройнд)
Уменьшение количества блокировок и закреплений страниц при сканировании индексов (Кевин Гриттнер)
Прежде всего это полезно тем, что позволяет реже блокировать процедуру очистки индексов.
Оптимизация использования памяти при отслеживании закреплений буферов в серверных процессах (Андрес Фройнд)
Улучшение масштабируемости блокировок (Андрес Фройнд)
В особенности это снимает проблемы масштабируемости в системах с несколькими раздельными процессорами.
Оптимизатор теперь может удалить ненужные ссылки на соединяемые слева подзапросы (Дэвид Роули)
Возможность вынесения ограничений запроса в подзапросы с оконными функциями, где это уместно (Дэвид Роули)
Возможность вынесения вызова негерметичной функции за представление с барьером безопасности, если функция не получает никакие выходные столбцы представления (Дин Рашид)
Доработка планировщика, чтобы он использовал статистику, полученную из индекса по выражению с булевской функцией, когда соответствующий вызов функции присутствует в
WHERE
(Том Лейн)ANALYZE
теперь вычисляет основную статистику (процент значений NULL и среднюю ширину столбцов) даже для столбцов, тип данных которых лишён функции равенства (Олександр Шульгин)Ускорение расчёта CRC (циклического избыточного кода) и переход к CRC-32C (Абхиджит Менон-Сен, Хейкки Линнакангас)
Улучшение производительности сканирования индексов по битовой карте (Фёдор Сигаев, Том Лейн)
Ускорение команды
CREATE INDEX
за счёт исключения лишнего копирования в памяти (Роберт Хаас)Увеличение числа разделов отображений буферов (Амит Капила, Андрес Фройнд, Роберт Хаас)
Это увеличивает производительность при многопоточной нагрузке.
E.45.3.1.3. Наблюдение
Добавление параметра хранения
log_autovacuum_min_duration
для управления протоколированием автоочистки на уровне таблиц (Микаэль Пакье)Добавление нового параметра конфигурации cluster_name (Томас Мунро)
Эта строка, обычно задаваемая в
postgresql.conf
, позволяет клиентам идентифицировать кластер. Это имя также выводится в заголовке всех серверных процессов, что упрощает выделение всех процессов, принадлежащих одному кластеру.Недопущение изменения log_disconnections простыми пользователями при установлении соединения (Фудзии Масао)
E.45.3.1.4. SSL
Проверка «Альтернативных имён субъекта» (Subject Alternative Names) (при наличии) в SSL-сертификатах серверов (Алексей Клюкин)
Когда такое поле присутствует, оно проверяется вместо поля «Общее имя» (Common Name) в сертификате.
Добавление системного представления
pg_stat_ssl
, выдающего информацию о SSL-подключениях (Магнус Хагандер)Добавление в libpq функций, возвращающих информацию об SSL независящим от реализации способом (Хейкки Линнакангас)
Хотя
PQgetssl()
по-прежнему можно применять для обращений к функциям OpenSSL, теперь это считается устаревшим вариантом, так как будущие версии libpq могут поддерживать и другие реализации SSL. По возможности используйте новые функцииPQsslAttribute()
,PQsslAttributeNames()
иPQsslInUse()
, чтобы получать информацию об SSL независящим от реализации SSL способом.В libpq должны сохраняться установленные многопоточные обработчики вызовов OpenSSL (Ян Урбански)
Ранее они перезаписывались.
E.45.3.1.5. Параметры сервера
Замена параметра конфигурации
checkpoint_segments
параметрами min_wal_size и max_wal_size (Хейкки Линнакангас)Это изменение позволяет разместить большое количество файлов WAL, но при этом не сохранять их, когда они будут уже не нужны. Как следствие, значение
max_wal_size
по умолчанию увеличено до1GB
, что намного больше старой величины по умолчанию, устанавливаемой параметромcheckpoint_segments
. Также заметьте, что резервные серверы теперь производят точки перезапуска, стараясь ограничить использование пространства WAL значениемmax_wal_size
; ранее они не учитывали параметрcheckpoint_segments
.Регулирование снятия процессов при нехватке памяти в Linux через новые переменные окружения
PG_OOM_ADJUST_FILE
иPG_OOM_ADJUST_VALUE
(Гуржит Сингх)Предыдущая инфраструктура управления механизмом OOM зависела от параметров времени компиляции
LINUX_OOM_SCORE_ADJ
иLINUX_OOM_ADJ
, которые теперь не поддерживаются. Новое поведение распространяется на все сборки.Осуществление записи времени фиксации транзакции, когда включён параметр track_commit_timestamp (Альваро Эррера, Петр Желинек)
Прочитать записанное время можно, воспользовавшись функциями
pg_xact_commit_timestamp()
иpg_last_committed_xact()
.Возможность устанавливать local_preload_libraries в команде
ALTER ROLE SET
(Питер Эйзентраут, Кётаро Хоригути)Рабочие процессы автоочистки теперь реагируют на изменения параметров конфигурации в процессе работы (Микаэль Пакье)
Параметр конфигурации debug_assertions стал доступен только для чтения (Андрес Фройнд)
Это значит, что утверждения теперь нельзя выключить, если они были включены на этапе компиляции, что позволяет дополнительно оптимизировать код. При этом изменении также был удалён ключ postgres
-A
.Возможность установления параметра effective_io_concurrency в системах, где он не играет роли (Питер Эйзентраут)
Добавление системного представления
pg_file_settings
, показывающего содержимое файлов конфигурации сервера (Савада Масахико)Добавление поля
pending_restart
в системное представлениеpg_settings
, показывающего, что изменение было внесено, но не вступит в силу до перезапуска базы данных (Питер Эйзентраут)Возможность сбросить значения
ALTER SYSTEM
командойALTER SYSTEM RESET
(Вик Фиринг)Эта команда удаляет заданный параметр из
postgresql.auto.conf
.
E.45.3.2. Репликация и восстановление
Создание механизмов для отслеживания прогресса репликации, включая средства идентификации источника отдельных изменений при логической репликации (Андрес Фройнд)
Эти механизмы полезны при создании решений репликации.
Переработка операции усечения мультитранзакций, чтобы она корректно фиксировалась в журнале (Андрес Фройнд)
В результате этот механизм становится проще и надёжнее.
Добавление в
recovery.conf
параметраrecovery_target_action
, управляющего действиями после восстановления (Петр Желинек)Этот параметр пришёл на замену
pause_at_recovery_target
.Добавление для archive_mode нового значения
always
, позволяющего архивировать получаемые файлы WAL (Фудзии Масао)Добавление параметра конфигурации wal_retrieve_retry_interval для управления повторными попытками чтения WAL после сбоя (Алексей Васильев, Микаэль Пакье)
Это особенно полезно для тёплого резерва.
Возможность сжатия образов полных страниц в WAL (Рахила Сьед, Микаэль Пакье)
Это позволяет сократить объём WAL, за счёт дополнительной нагрузки на процессор при записи и воспроизведении WAL. Эта возможность управляется новым параметром конфигурации wal_compression (по умолчанию он отключён).
Архивация файлов WAL с расширением
.partial
при повышении резервного сервера (Хейкки Линнакангас)Добавление параметра конфигурации log_replication_commands для протоколирования команд репликации (Фудзии Масао)
По умолчанию команды репликации, в частности
IDENTIFY_SYSTEM
, не записываются в протокол, даже когда log_statement имеет значениеall
.Добавление в
pg_replication_slots
отображения процессов, занимающих слоты репликации (Крейг Рингер)Эта информация выводится в новом столбце
active_pid
.Возможность использовать в задаваемом в
recovery.conf
параметреprimary_conninfo
идентификаторы соединений в формате URI, например,postgres://
(Александр Шульгин)
E.45.3.3. Запросы
Возможность превращать команды
INSERT
, вызывающие конфликты ограничений, в командыUPDATE
, либо игнорировать их (Питер Гейган, Хейкки Линнакангас, Андрес Фройнд)Для этого введён синтаксис
INSERT ... ON CONFLICT DO NOTHING/UPDATE
. Таким образом в Postgres реализована популярная командаUPSERT
.Добавление в
GROUP BY
аналитической функциональности:GROUPING SETS
,CUBE
иROLLUP
(Эндрю Гирт, Атри Шарма)Возможность присвоения результатов одного вложенного SELECT нескольким целевым столбцам в
UPDATE
(Том Лейн)Для этого применяется синтаксис
UPDATE tab SET (col1, col2, ...) = (SELECT ...)
.Добавление в
SELECT
указанияSKIP LOCKED
для пропуска заблокированных строк (Томас Мунро)При этом не выдаётся ошибка, как в случае с
NOWAIT
.Добавление в
SELECT
указанияTABLESAMPLE
, что позволяет получать подмножество строк таблицы (Петр Желинек)Благодаря этому теперь поддерживаются описанные в стандарте SQL методы извлечения выборки. Кроме того, представлены средства для создания пользовательских методов извлечения выборки.
Предложение возможных исправлений при опечатках в именах столбцов (Питер Гейган, Роберт Хаас)
E.45.3.4. Служебные команды
Добавление более подробной информации о порядке сортировки в вывод
EXPLAIN
(Мариус Тиммер, Лукас Крефт, Арне Шеффер)Эта информация включает свойства
COLLATE
,DESC
,USING
иNULLS FIRST
/LAST
.Добавление в вывод
VACUUM
количества страниц, пропущенных из-за закреплений (Джим Нэсби)Команда
TRUNCATE
теперь корректно обновляет счётчики кортежей вpg_stat
(Александр Шульгин)
E.45.3.4.1. REINDEX
Добавление в
REINDEX
возможности переиндексировать всю схему с новым указаниемSCHEMA
(Савада Масахико)Добавление в
REINDEX
указанияVERBOSE
(Савада Масахико)Исключение из вывода
REINDEX DATABASE
иSCHEMA
имён столбцов в случае отсутствия указанияVERBOSE
(Саймон Риггс)Удаление устаревшего указания
FORCE
командыREINDEX
(Фудзии Масао)
E.45.3.5. Манипуляции с объектами
Добавление механизма защиты на уровне строк (Крейг Рингер, КайГай Кохэй, Адам Брайтвелл, Дин Рашид, Стивен Фрост)
Этот механизм позволяет на уровне строк определять, какие строки пользователи смогут добавлять, изменять и даже видеть в таблице. Для управления им введены новые команды
CREATE
/ALTER
/DROP POLICY
иALTER TABLE ... ENABLE/DISABLE ROW SECURITY
.Возможность изменения режима журналирования таблицы в WAL с применением команды
ALTER TABLE ... SET LOGGED / UNLOGGED
(Фабрицио де Ройес Мелло)Добавление предложения
IF NOT EXISTS
вCREATE TABLE AS
,CREATE INDEX
,CREATE SEQUENCE
иCREATE MATERIALIZED VIEW
(Фабрицио де Ройес Мелло)Добавление поддержки
IF EXISTS
вALTER TABLE ... RENAME CONSTRAINT
(Брюс Момджян)Возможность передать некоторым командам DDL вместо имени конкретного пользователя идентификаторы
CURRENT_USER
иSESSION_USER
, обозначающие текущего пользователя и пользователя сеанса (Кётаро Хоригути, Альваро Эррера)Это поддерживают команды ALTER USER, ALTER GROUP, ALTER ROLE, GRANT и
ALTER
.объект
OWNER TOПоддержка комментариев в ограничениях домена (Альваро Эррера)
Снижение уровней блокировки для некоторых команд, управляющих триггерами и сторонними ключами (Саймон Риггс, Андреас Карлссон)
Разрешение использовать
LOCK TABLE ... ROW EXCLUSIVE MODE
тем, кто имеет правоINSERT
в целевой таблице (Стивен Фрост)Ранее для этой команды требовалось право
UPDATE
,DELETE
илиTRUNCATE
.Применение ограничений
CHECK
для таблицы и домена в алфавитном порядке имён (Том Лейн)Ранее порядок был недетерминированным.
Добавление в
CREATE
/ALTER DATABASE
возможности управлять свойствамиdatistemplate
иdatallowconn
(Вик Фиринг)Это позволяет задавать/изменять эти параметры, не модифицируя вручную системный каталог
pg_database
.
E.45.3.5.1. Сторонние таблицы
Добавление поддержки IMPORT FOREIGN SCHEMA (Ронан Данклау, Микаэль Пакье, Том Лейн)
Эта команда позволяет автоматически создать локальные сторонние таблицы с той же структурой, что имеют таблицы на удалённом сервере.
Возможность определения ограничений
CHECK
для сторонних таблиц (Шигеру Ханада, Эцуро Фудзита)Такие ограничения считаются контролируемыми на удалённом сервере, а не локально. Однако для оптимизации запросов предполагается, что они удовлетворяются, как например при исключении по ограничению.
Возможность включать сторонние таблицы в иерархии наследования (Шигеру Ханада, Эцуро Фудзита)
Чтобы это работало естественным образом, в сторонних таблицах теперь допускаются ограничения-проверки, помечаемые как недействительные, и могут задаваться характеристики хранения и
OID
, хотя по сути это никак не влияет на стороннюю таблицу.Обёртки сторонних данных и методы нестандартного сканирования обрели возможность выносить соединения наружу (КайГай Кохэй)
E.45.3.5.2. Событийные триггеры
Для устанавливаемого событийного триггера
ddl_command_end
собираются сведения об активности DDL, которые могут быть ему полезны (Альваро Эррера)Эти сведения можно получить через возвращающую множество функцию
pg_event_trigger_ddl_commands()
или через структуры данных C, если результат этой функции недостаточно детализирован.Возможность реагирования в событийных триггерах на перезапись таблицы, вызываемую операцией
ALTER TABLE
(Димитри Фонтейн)Добавление поддержки событийных триггеров для команд
COMMENT
,SECURITY LABEL
иGRANT
/REVOKE
уровня базы данных (Альваро Эррера)Добавление столбцов в вывод
pg_event_trigger_dropped_objects
(Альваро Эррера)Это позволяет упростить обработку операций удаления.
E.45.3.6. Типы данных
Возможность записать в тип
xml
пустое или состоящее только из пробельных символов значение (Питер Эйзентраут)Это требуется стандартом SQL/XML.
Возможность ввода в
macaddr
значений в форматеxxxx-xxxx-xxxx
(Хервин Вестстрате)Запрещение несоответствующего стандарту SQL синтаксиса
interval
с указанием одновременно полей и точности (Брюс Момджян)Пр стандарту такие значения этого типа должны записываться, например, как
INTERVAL MINUTE TO SECOND(2)
. В PostgreSQL ранее допускалась записьINTERVAL(2) MINUTE TO SECOND
, но теперь принимается только стандартный способ.Добавление оценки избирательности для операторов
inet
/cidr
и улучшение оценки для функций текстового поиска (Эмре Хасегели, Том Лейн)Добавление типов данных
regrole
иregnamespace
для упрощения ввода и улучшенного выводаOID
ролей и пространств имён (Кётаро Хоригути)
E.45.3.6.1. JSON
Добавление для типа
jsonb
функцийjsonb_set()
иjsonb_pretty()
(Дмитрий Долгов, Эндрю Дунстан, Петр Желинек)Добавление функций, формирующих
jsonb
:to_jsonb()
,jsonb_object()
,jsonb_build_object()
,jsonb_build_array()
,jsonb_agg()
иjsonb_object_agg()
(Эндрю Дунстан)Аналогичные функции уже имелись для типа
json
.Снижение требований для преобразований в/из
json
иjsonb
(Том Лейн)Возможность вычитать из документов
jsonb
значения типовinteger
,text
и массивыtext
(Дмитрий Долгов, Эндрю Дунстан)Добавление для типа
jsonb
оператора||
(Дмитрий Долгов, Эндрю Дунстан)Добавление функций
json_strip_nulls()
иjsonb_strip_nulls()
для удаления значений null из документов JSON (Эндрю Дунстан)
E.45.3.7. Функции
Добавление
generate_series()
для значенийnumeric
(Плато Малугин)Возможность передавать массив на вход
array_agg()
иARRAY()
(Али Акбар, Том Лейн)Добавление функций
array_position()
иarray_positions()
, возвращающих позиции значений в массиве (Павел Стехуле)Добавление оператора дистанции от точки до многоугольника (
point
-polygon
) <-> (Александр Коротков)Возможность использовать в качестве спецсимволов в
SIMILAR TO
иSUBSTRING
многобайтовых символов (Джефф Девис)Ранее в качестве спецсимвола можно было выбрать только однобайтовый символ.
Добавление вариации
width_bucket()
, поддерживающей любой упорядочиваемый тип данных и группы неодинаковой ширины (Петр Желинек)Добавление необязательного аргумента
missing_ok
вpg_read_file()
и связанные функции (Микаэль Пакье, Хейкки Линнакангас)Введение конструкции
=>
, позволяющей задать значения именованных параметров в вызовах функций (Павел Стехуле)Ранее присвоение значения записывалось только с конструкцией
:=
. Это потребовало запретить создание пользовательского оператора=>
. При создании пользовательских операторов=>
до этого выдавались предупреждения (начиная с PostgreSQL 9.0).Добавление POSIX-совместимого округления для платформ, где используются функции округления, предоставляемые PostgreSQL (Педро Химено Фортеа)
E.45.3.7.1. Системные информационные функции и представления
Добавление функции
pg_get_object_address()
, возвращающей наборOID
, однозначно идентифицирующих объект, и функцииpg_identify_object_as_address()
, возвращающей информацию об объекте по этимOID
(Альваро Эррера)Ослабление ограничений безопасности при просмотре запросов в
pg_stat_activity
и вызове функцийpg_cancel_backend()
иpg_terminate_backend()
(Стивен Фрост)Ранее эти операции могли выполнять только роли, которым непосредственно принадлежит целевой сеанс; теперь достаточно быть членом такой роли.
Добавление функции
pg_stat_get_snapshot_timestamp()
, выдающей время снимка статистики (Мэтт Келли)Это время показывает, когда в последний раз файл снимка записывался в файловую систему.
Добавление функции
mxid_age()
, вычисляющей возраст мультитранзакций (Брюс Момджян)
E.45.3.8. Языки программирования на стороне сервера
Улучшение поддержки составных типов в PL/Python (Эд Бен, Ронан Данклау)
Это позволяет возвращать из функций на PL/Python массивы составных типов.
Уменьшение неточности при преобразовании значений с плавающей точкой в PL/Python (Марко Крин)
Возможность определения функций преобразования между типами данных SQL и типами данных процедурных языков (Питер Эйзентраут)
Это изменение привносит команды
CREATE
/DROP TRANSFORM
. Также с ним добавлены дополнительные трансформации типов hstore и ltree из/в типы языков PL/Perl и PL/Python.
E.45.3.9. Клиентские приложения
Перемещение pg_archivecleanup, pg_test_fsync, pg_test_timing и pg_xlogdump из
contrib
вsrc/bin
(Питер Эйзентраут)В результате эти программы должны по умолчанию устанавливаться в большем числе инсталляций.
Добавление программы pg_rewind, позволяющей восстановить синхронизированное состояние главного сервера после отработки отказа (Хейкки Линнакангас)
Возможность управления слотами физической репликации с помощью pg_receivexlog (Микаэль Пакье)
Для этого введены новые параметры
--create-slot
и--drop-slot
.В pg_receivexlog появилась возможность синхронно сбрасывать WAL на диск с нововведённым параметром
--synchronous
(Фуруя Осаму, Фудзии Масао)Без него файлы WAL сохраняются на диске только при закрытии.
В vacuumdb появилась возможность очистки в параллельном режиме с нововведённым параметром
--jobs
(Дилип Кумар)Программа vacuumdb теперь не запрашивает один и тот же пароль многократно, когда устанавливает несколько подключений (Харибабу Комми, Микаэль Пакье)
Добавление ключа
--verbose
для reindexdb (Савада Масахико)Использование в pg_basebackup файла отображений табличных пространств при выборе формата tar, что позволяет поддерживать символические ссылки и пути длиннее 100 символов в MS Windows (Амит Капила)
Добавление в pg_xlogdump ключа
--stats
для получения сводной статистики (Абхиджит Менон-Сен)
E.45.3.9.1. psql
Возможность получить вывод psql в формате AsciiDoc (Шимон Гуз)
Добавление режима
errors
в переменнойECHO
, в котором psql выводит только команды с ошибками (Павел Стехуле)Этот режим также можно включить, передав psql ключ
-b
.Разделение в psql параметров, управляющих стилем линий в Юникоде, на параметры для колонок, заголовка и границ (Павел Стехуле)
Поддерживаются одинарные и двойные линии; вариант по умолчанию —
single
(одинарные).Поддержка нового параметра
%l
в переменных окруженияPROMPT
в psql, позволяющего увидеть текущий номер строки в многострочном операторе (Савада Масахико)Добавление в
\pset
параметраpager_min_lines
, управляющего вызовом постраничника (Эндрю Дунстан)Улучшение подсчёта строк в psql, по результатам которого принимается решения о вызове постраничника (Эндрю Дунстан)
Теперь psql не запускается, если не может записать в файл, заданный ключом
--output
или--log-file
(Том Лейн, Даниэль Верите)Ранее psql по сути игнорировал этот ключ в таких случаях.
Добавление в psql дополнения табуляцией, когда устанавливается переменная search_path (Джефф Джейнс)
В настоящее время дополнение табуляцией возможно только для первой схемы.
Улучшение в psql дополнения табуляцией для триггеров и правил (Андреас Карлссон)
E.45.3.9.1.1. Команды с обратной косой чертой
Добавление для команды psql
\?
разделов справкиvariables
иoptions
(Павел Стехуле)Команда
\? variables
показывает справку по специальным переменным psql, а\? options
— по параметрам командной строки. Команда\? commands
выводит метакоманды, которые выводились раньше, и это остаётся вариантом по умолчанию. Эти разделы справки также можно получить, передав в командной строке аргумент--help=
.раздел
В команде psql
\db+
добавлен вывод размера табличного пространства (Фабрицио де Ройес Мелло)В psql
\dT+
добавлено отображение владельцев типов данных (Магнус Хагандер)В psql
\watch
добавлен вывод информации\timing
(Фудзии Масао)Отключение вывода запросов
\watch
при запуске с ключом--echo-hidden
, так как обычно они не нужны.Команды psql
\sf
и\ef
должны учитывать переменнуюECHO_HIDDEN
(Эндрю Дунстан)Улучшение в psql дополнения табуляцией для
\set
,\unset
и имён:variable
(Павел Стехуле)Возможность дополнения табуляцией имён ролей в командах psql
\c
(Иэн Барвик)
E.45.3.9.2. pg_dump
Возможность использовать в pg_dump снимок данных, полученный в другом сеансе, с параметром
--snapshot
(Саймон Риггс, Микаэль Пакье)Этот снимок должен быть экспортирован функцией
pg_export_snapshot()
или при создании слота логической репликации. Это может применяться для совместного использования согласованного снимка несколькими процессами pg_dump.Поддержка в архивном формате tar таблиц размером больше 8 ГБ (Том Лейн)
Стандарт POSIX формата tar не позволяет включать в архив элементы размером больше 8 ГБ, но большинство современных реализаций tar поддерживают расширение, допускающие это. Поэтому нужно использовать расширенный формат, когда это необходимо, а не выдавать ошибку.
Включение в pg_dump вывода версий сервера и pg_dump во всех режимах (Цзин Ван)
До этого информация о версии выводилась только в режиме
--verbose
.Исключение давно забытого параметра
-i
/--ignore-version
из pg_dump, pg_dumpall и pg_restore (Фудзии Масао)
E.45.3.9.3. pg_ctl
Поддержка нескольких параметров pg_ctl
-o
, так что их значения соединяются вместе (Брюс Момджян)Возможность определения для pg_ctl источника событий, записываемых в журнал событий MS Windows (МауМау)
Это влияет только на события pg_ctl, а не сервера — для него источник событий задаётся отдельно, в
postgresql.conf
.Если в качестве принимающего адреса сервера задаётся всёохватывающее значение (
0.0.0.0
в IPv4 или::
в IPv6), нужно подключаться через адрес локального замыкания, а не использовать заданный адрес буквально (Кондо Юта)Это исправление в первую очередь затрагивает Windows, так как на других платформах pg_ctl предпочитает использовать Unix-сокет.
E.45.3.9.4. pg_upgrade
Перемещение pg_upgrade из
contrib
вsrc/bin
(Питер Эйзентраут)В связи с этим изменением, функциональность, ранее предоставляемая модулем pg_upgrade_support, была включена в ядро сервера.
Поддержка нескольких параметров pg_upgrade
-o
/-O
, так что их значения соединяются вместе (Брюс Момджян)Улучшение сравнений правил сортировки для баз данных в pg_upgrade (Хейкки Линнакангас)
Ликвидация поддержки обновления с версии 8.3 (Брюс Момджян)
E.45.3.9.5. pgbench
Перемещение pgbench из
contrib
вsrc/bin
(Питер Эйзентраут)Исправлено вычисление TPS «за исключением установленных соединений» (Тацуо Исии, Фабьен Коэльо)
Накладные расходы на установление соединения подсчитывались неправильно, когда число потоков pgbench было меньше числа клиентских подключений. Хотя это определённо ошибка, мы не будем переносить её исправление в версии до 9.5, так как при этом значения TPS окажутся несравнимыми с предыдущими результатами.
Подсчёт транзакций, выполнявшихся дольше заданного времени (Фабьен Коэльо)
Этим подсчётом управляет нововведённый параметр
--latency-limit
.Возможность получить в pgbench случайное распределение Гаусса или экспоненциальное распределение
\setrandom
(Мицумаса Кондо, Фабьен Коэльо)Реализация в команде pgbench
\set
обработки арифметических выражений с несколькими операторами и включение%
(деления по модулю) в список поддерживаемых операторов (Роберт Хаас, Фабьен Коэльо)
E.45.3.10. Исходный код
Упрощение формата записи WAL (Хейкки Линнакангас)
Благодаря этому изменению, внешним средствам будет легче отслеживать, какие блоки изменяются.
Улучшение представления записей фиксации и прерывания транзакций в WAL (Андрес Фройнд)
Добавление API атомарных операций с памятью (Андрес Фройнд)
Возможность реализации нестандартных методов сканирования и путей (КайГай Кохэй, Том Лейн)
Это даёт расширениям дополнительные рычаги управления оптимизатором и исполнителем.
Возможность устанавливать блокировки после фильтрации в обёртках сторонних данных (Эцуро Фудзита)
Сторонние таблицы теперь могут участвовать в запросах
INSERT ... ON CONFLICT DO NOTHING
(Питер Гейган, Хейкки Линнакангас, Андрес Фройнд)Обёртки сторонних данных не нужно модифицировать, чтобы это поддерживалось. Однако команда
INSERT ... ON CONFLICT DO UPDATE
со сторонними таблицами не поддерживается.Улучшение интерфейса
hash_create()
, позволяющее выбирать хеш-функции с простым двоичным ключом (Фёдор Сигаев, Том Лейн)Улучшение инфраструктуры параллельного выполнения (Роберт Хаас, Амит Капила, Ной Миш, Рушаб Латиа, Дживан Чок)
Ликвидация портов для Alpha (CPU) и Tru64 (ОС) (Андрес Фройнд)
Ликвидация реализации циклических блокировок (spinlock) на основе перестановки байт для ARMv5 и предыдущих процессоров (Роберт Хаас)
Особенность слабого упорядочивания доступа к памяти в ARM v5 делает такую реализацию блокировки ненадёжной. Однако использование циклических блокировок всё же возможно с новыми версиями gcc, поддерживающими атомарные операции.
Выдача ошибки при попытке записать в файлы tar чрезмерно длинный (больше 100 символов) путь (Питер Эйзентраут)
Tar не поддерживает такие длинные пути.
Смена индексируемого класса операторов для столбцов
pg_seclabel
.provider
иpg_shseclabel
.provider
наtext_pattern_ops
(Том Лейн)Это позволяет избежать возможных проблем с этими индексами, когда в разных базах данных кластера используются разные правила сортировки.
Изменение примитивов spinlock, чтобы они действовали как барьеры для оптимизаций компилятора (Роберт Хаас)
E.45.3.10.1. MS Windows
Получение системного времени с большей точностью в Windows 8, Windows Server 2012 и более новых системах Windows (Крейг Рингер)
Установка разделяемых библиотек в
bin
в MS Windows (Питер Эйзентраут, Микаэль Пакье)Установка
src/test/modules
вместе сcontrib
в сборках с MSVC (Микаэль Пакье)В сборке с MSVC теперь может учитываться задаваемый для configure параметр
--with-extra-version
(Микаэль Пакье)Передача
PGFILEDESC
в сборки contrib с MSVC (Микаэль Пакье)Добавление значков во все собираемые с MSVC двоичные файлы и информации о версии во все двоичные файлы, собираемые для MS Windows (Ной Миш)
При сборке с MinGW такие значки уже добавлялись ранее.
Добавление поддержки необязательных аргументов во внутреннюю реализацию
getopt_long()
(Микаэль Пакье, Андрес Фройнд)Это используется при сборке с MSVC.
E.45.3.11. Дополнительные модули
Добавление статистики для получения минимального, максимального, среднего времени и стандартного отклонения в pg_stat_statements (Мицумаса Кондо, Эндрю Дунстан)
Добавление в pgcrypto функции
pgp_armor_headers()
для извлечения заголовков PGP Armor (Марко Тииккая, Хейкки Линнакангас)Возможность задавать пустые строки замены в unaccent (Мохаммед Альхашаш)
Это полезно для языков, в которых диакритические знаки представляются как отдельные символы.
Возможность задавать многосимвольные исходные строки в unaccent (Том Лейн)
Это может быть полезно для языков, в которых диакритические знаки представляются как отдельные символы. Это также позволяет создавать более сложные словари удаления диакритики.
Добавление в
contrib
модулей tsm_system_rows и tsm_system_time, реализующих дополнительные методы извлечения выборки (Петр Желинек)Добавление функций исследования индекса GIN в pageinspect (Хейкки Линнакангас, Питер Гейган, Микаэль Пакье)
Добавление информации о закреплении буфера в вывод pg_buffercache (Андрес Фройнд)
Возможность получать от pgstattuple приблизительных ответов с меньшими издержками, используя
pgstattuple_approx()
(Абхиджит Менон-Сен)Перемещение dummy_seclabel, test_shm_mq, test_parser и worker_spi из
contrib
вsrc/test/modules
(Альваро Эррера)Эти модули предназначаются только для тестирования сервера, поэтому их нет смысла собирать или устанавливать в составе пакета PostgreSQL.