- PVSM.RU - https://www.pvsm.ru -

Встречаем PostgreSQL 10. Перевод Release Notes

Вышел релиз PostgreSQL 10. Мы долго ждали появления новых фич. Мои коллеги ещё весной тестировали новую версию и отправляли баг-репорты: раз [1], два [2]. А я был очень рад обновлению и подготовил перевод Release Notes на русский язык. Давайте обсуждать.

Встречаем PostgreSQL 10. Перевод Release Notes - 1

Содержание

E.1.1. Обзор (TLDR) [3]
E.1.2. Миграция на версию 10 [4]
E.1.3. Изменения [5]
E.1.3.1. Сервер [6]
E.1.3.1.1. Параллельные запросы [7]
E.1.3.1.2. Индексы [8]
E.1.3.1.3. Блокировки [9]
E.1.3.1.4. Оптимизатор [10]
E.1.3.1.5. Общая производительность [11]
E.1.3.1.6. Мониторинг [12]
E.1.3.1.6.1. Логгирование [13]
E.1.3.1.6.2. pg_stat_activity [14]
E.1.3.1.7. Проверка подлинности [15]
E.1.3.1.8. Конфигурация сервера [16]
E.1.3.1.9. Надёжность [17]
E.1.3.1.9.1. Журнал упреждающей записи (WAL) [18]
E.1.3.2. Репликация и восстановление [19]
E.1.3.3. Запросы [20]
E.1.3.4. Вспомогательные команды [21]
E.1.3.5. Типы данных [22]
E.1.3.6. Функции [23]
E.1.3.7. Серверные языки [24]
E.1.3.7.1. PL/Tcl [25]
E.1.3.8. Клиентские интерфейсы [26]
E.1.3.9. Клиентские приложения [27]
E.1.3.9.1. psql [28]
E.1.3.9.2. pgbench [29]
E.1.3.10. Серверные приложения [30]
E.1.3.10.1. pg_dump, pg_dumpall, pg_restore [31]
E.1.3.10.2. pg_basebackup [32]
E.1.3.10.3. pg_ctl [33]
E.1.3.11. Исходный код [34]
E.1.3.12. Дополнительные модули [35]

E.1.1. Обзор (TLDR)

Основные улучшения в PostgreSQL 10:

  • Логическая репликация с использованием publish/subscribe
  • Декларативное партицирование таблиц
  • Улучшенная параллельная обработка запросов
  • Значительные улучшения общей производительности
  • Более сильная проверка подлинности, основанная на SCRAM-SHA-256
  • Улучшенный мониторинг и администрирование

Всё перечисленное подробно описано ниже.

E.1.2. Миграция на версию 10

Для перехода с любых предыдущих версий необходимо выполнить dump/restore, используя pg_dumpall [36], или воспользоваться pg_upgrade [37].
Версия 10 содержит ряд изменений, которые могут затронуть совместимость с предыдущими релизами. Вот эти изменения:

  • Хэш-индексы должны быть перестроены после выполнения pg_upgrade с любых предыдущих мажорных версий PostgreSQL (Mithun Cy, Robert Haas, Amit Kapila). Важные изменения в хэш-индексах делают перестроение необходимым. pg_upgrade создаст скрипт для помощи в перестроении.
  • Переименование директории журнала упреждающей записи pg_xlog в pg_wal и переименование директории со статусами транзакций pg_clog в pg_xact (Michael Paquier).
    Пользователи иногда думали, что эти каталоги содержат только несущественные файлы журнала, удаляли файлы журнала упреждающей записи или файлы со статусами транзацкций вручную, что приводило к невосполнимой потере данных. Такие переименования должны предотвратить подобные действия пользователей в будущем.
  • Переименование SQL-функций, утилит и опций, относящихся к “xlog” в “wal” (Robert Haas).
    Например, pg_switch_xlog() станет pg_switch_wal()pg_receivexlog станет pg_receivewal;--xlogdir станет --waldir. Это делается для единообразия с переименованием pg_xlog; в общем, термин “xlog” в дальнейшем не будет использоваться со стороны пользователя.
  • Переименование функций и представлений, относящихся к WAL, с использованием lsn вместо location (David Rowley). Ранее возникали противоречия при использовании двух терминов.
  • Изменена реализация SRF (set-returning functions), задействованных в списке SELECT (Andres Freund). Функции, возвращающие множества (Set-returning functions, SRF), теперь вычисляются до вычисления скалярных выражений в списке SELECT, как будто они были помещены в выражение LATERAL FROM. Это даёт более здравую семантику при использовании нескольких SRF. Если они возвращают разное количество строк, более короткие результаты будут расширены до самого длинного путём добавления NULL-значений. Ранее находился наименьший общий множитель размеров результатов SRF, и они циклично повторялись. Также вызов SRF теперь запрещен с конструкциями CASE и COALESCE. Более подробная информация содержится в разделе документации Section 37.4.8 [38].
  • Когда ALTER TABLE ... ADD PRIMARY KEY устанавливает атрибут колонки NOT NULL, это изменение также распространяется на унаследованные дочерние таблицы (Michael Paquier).
  • Предотвращен вызов statement-триггеров от вызова более одного раза за запрос (statement) (Tom Lane). В случаях использования пишуших CTE, при обновлении той же таблицы, или другим пишущим CTE, BEFORE STATEMENT- или AFTER STATEMENT-триггеры вызывались более одного раза. Также если были statement-триггеры на таблице, затронутой ограничением внешнего ключа (таким, как ON DELETE CASCADE), они могли вызваться более одного раза для внешнего SQL-выражения. Это противоречило стандарту, поэтому было изменено.
  • Метаданные последовательностей перенесены в новый системный каталог pg_sequence [39] (Peter Eisentraut). Новая таблица содержит в себе поля, которые могут быть изменены с помощью функции nextval(), то есть last_valuelog_cnt и is_called. Остальные свойства последовательностей, такие как начальное значение и инкремент, сохранены в соответствующей строке каталога pg_sequenceALTER SEQUENCE теперь полностью транзакционна, подразумевая блокировку последовательности до коммита. Функции nextval() и setval() остаются нетранзакционными.
    Основная несовместимость, внесённая этим изменением, состоит в том, что выборка из таблицы с последовательностями вернёт только три поля, перечисленных выше. Для получения остальных свойств последовательности приложение должно найти их в pg_sequence. Новое системное представление pg_sequences может быть также использовано для этих целей; оно предоставляет имена колонок, более совместимые с существующим кодом.
  • pg_basebackup [40] стримит WAL, необходимый для восстановления бэкапа по умолчанию (Magnus Hagander). Это изменяет значение по умолчанию параметра -X/--xlog-method команды pg_basebackup в stream. Значение none добавлено для воспроизведения старого поведения. Опция  -x команды pg_basebackup была удалена (используйте взамен -X fetch).
  • Изменен способ использования  pg_hba.conf [41] логической репликацией (Peter Eisentraut). В предыдущих релизах логическая репликация требовала использования ключевого слова replication в колонке базы данных. С этого релиза логическая репликация использует обычное вхождение имени базы данных или ключевого слова all. Физическая репликация продолжает использовать ключевое слово replication. Так как логическая репликация — новинка данного релиза, изменение затрагивает только пользователей сторонних плагинов для репликации.
  • Все действия pg_ctl [42] ожидают завершения по умолчанию (Peter Eisentraut). До этого момента некоторые действия pg_ctl не ожидали завершения и требовали для этого использования параметра -w.
  • Изменено значение по умолчанию серверного параметра log_directory [43] с pg_log на log (Andreas Karlsson).
  • Добавлена опция конфигурации ssl_dh_params_file [44] для указания файла с измененными параметрами Диффи-Хеллмана (Heikki Linnakangas). Это убирает захардкоженное недокументированное имя файла dh1024.pem. Обратите внимание, dh1024.pem более не проверяется по умолчанию; вы должны выставить значение опции для использования собственных параметров Диффи-Хеллмана.
  • Увеличен размер параметров Диффи-Хеллмана по умолчанию до 2048 для эфемерного алгоритма Диффи-Хеллмана OpenSSL (Heikki Linnakangas). Размер поставляемых параметров Диффи-Хеллмана был увеличен с 1024 до 2048 бит, делая обмен ключами Диффи-Хеллмана более устойчивым к брутфорс-атакам. Тем не менее, некоторые старые реализации SSL, в частности некоторые редакции Java Runtime Environment версии 6, не будут принимать параметры Диффи-Хеллмана длиннее, чем 1024 бита, и, следовательно, не смогут подключиться через SSL. Если требуется поддерживать такие старые клиенты, вы можете использовать обычный 1024-битные параметры параметров Диффи-Хеллмана вместо поставляемых по умолчанию. См. ssl_dh_params_file [44].
  • Удалена возможность сохранять незашифрованные пароли на сервере (Heikki Linnakangas). Серверный параметр password_encryption [45] более не поддерживает значения off или plain. Опция UNENCRYPTED более не поддерживается в команде CREATE/ALTER USER ... PASSWORD. Аналогично, опция --unencrypted была удалена из команды createuser. Незашифрованные пароли при миграции со старых версий будут сохранены зашифрованными в этом релизе. Значение по умолчанию для параметра password_encryption всё ещё md5.
  • Добавлены серверные параметры min_parallel_table_scan_size [46] и min_parallel_index_scan_size [47] для управления параллельными запросами (Amit Kapila, Robert Haas). Это заменяет min_parallel_relation_size, который оказался слишком общим.
  • Значение параметра shared_preload_libraries [48] и ему подобных не приводится к нижнему регистру, если оно не взято в кавычки (QL Zhuo). Эти настройки являются списком имён файлов, но до этого момента обрабатывались как идентификаторы SQL, которые обрабатываются по другим правилам.
  • Удалён серверный параметр sql_inheritance (Robert Haas). Изменение значения по умолчанию для этого параметра приводило к тому, что запросы к родительским таблицам не включали данные из дочерних таблиц. Стандарт SQL требует, чтобы они были включены, однако, это и так было по умолчанию с PostgreSQL 7.1.
  • Разрешена передача многомерных массивов в функции на PL/Python и возврат в виде вложенных списков языка Python (Alexey Grishchenko, Dave Cramer, Heikki Linnakangas). Эта возможность потребовала обратно несовместимых изменений в обработке массивов составных типов PL/Python. Ранее можно было возвращать массив с составными значениями написав, к примеру, [[col1, col2], [col1, col2]]; но теперь это интерпретируется как двумерный массив. Составные типы в массивах теперь должны быть записаны как кортежи Python, а не списки, чтобы устранить неоднозначность; это значит, что следует писать так: [(col1, col2), (col1, col2)].
  • Убрана возможность автозагрузки из модуля PL/Tcl's (Tom Lane). Эта функциональность заменена двумя новыми серверными параметрами pltcl.start_proc [49] и pltclu.start_proc [50], которые проще в использовании и более похожи на возможности в других процедурных языках.
  • Удалена поддержка версий до 8.0 в pg_dump/pg_dumpall (Tom Lane). Пользователям, которым необходимо снять дамп с версий до 8.0, необходимо воспользоваться версией PostgreSQL 9.6 или более ранней. Результирующий вывод должен успешно загрузиться в более новые версии.
  • Удалена поддержка для таймстампов и интервалов с плавающей точкой (Tom Lane). Удалён параметр конфигурации --disable-integer-datetimes. Таймстампы с плавающей точкой имеют некоторые преимущества, но не использовались по умолчанию с PostgreSQL 8.3.
  • Удалена серверная поддержка протокола клиент-серверного протокола версии 1.0 (Tom Lane). Этот протокол не поддерживался с версии PostgreSQL 6.3.
  • Удалён модуль contrib/tsearch2 (Robert Haas). Этот модуль предоставлял совместимость с версией полнотекстового поиска, поставляемого до версий 8.3.
  • Удалены утилиты командной строки createlang и droplang (Peter Eisentraut). Они устарели в версии PostgreSQL 9.1. Вместо них используйте команды CREATE EXTENSION и DROP EXTENSION.
  • Удалена поддержка соглашения о вызове функций версии 0 (Andres Freund). Расширения, использующие функции на C, должны соответствовать версии 1 соглашения о вызове функций. Версия 0 устарела в 2001 году.

E.1.3. Изменения

Ниже приведена детальная информация об изменениях между PostgreSQL 10 и предыдущим мажорным релизом.

E.1.3.1. Сервер

E.1.3.1.1. Параллельные запросы

  • Поддержаны параллельные index scans для B-tree (Rahila Syed, Amit Kapila, Robert Haas, Rafia Sabih). Это изменение позволяет индексным страницам B-tree быть просмотренными различными parallel workers.
  • Поддержаны параллельные bitmap heap scans (Dilip Kumar). Это позволяет одиночному index scan диспетчеризовать просмотр кучи различными parallel workers.
  • Разрешено параллельное выполнение merge joins (Dilip Kumar).
  • Разрешено параллельное выполнение невзаимосвязанных подзапросов (Amit Kapila).
  • Улучшена возможность parallel workers по возврату предсортированных данных (Rushabh Lathia).
  • Увеличено использование параллельных запросов в процедурных функциях (Robert Haas, Rafia Sabih).
  • Добавлен серверный параметр max_parallel_workers [51] для ограничения количества воркеров, которые могут быть использованы для параллельной обработки запроса (Julien Rouhaud). Этот параметр может быть установлен в меньшее значение, чем max_worker_processes [52] для резервирования воркеров, отличающихся от параллельной обработки запросов целей.

E.1.3.1.2. Индексы

  • Добавлена поддержка записи в WAL для хэш-индексов (Amit Kapila). Это позволяет сделать их устойчивыми к сбоям и добавить их в репликацию. Сообщение об опасности их использования удалено.
  • Улучшена производительность хэш-индексов (Amit Kapila, Mithun Cy, Ashutosh Sharma).
  • Добавлена поддержка типов INET and CIDR SP-GiST-индексы (Emre Hasegeli).
  • Добавлен параметр для более агрессивной суммаризации BRIN-индексов (Álvaro Herrera). Новая опция CREATE INDEX [53] включает автосуммаризацию предыдущего диапазона BRIN-страниц, когда создаётся новый страничный диапазон.
  • Добавлены функции для удаления и повторного добавления BRIN-суммаризации для индексных диапазонов BRIN (Álvaro Herrera). Новая SQL-функция brin_summarize_range() [54] обновляет суммаризацию BRIN-индекса для указанного диапазона и brin_desummarize_range() для ее удаления. Это полезно для обновления суммаризации диапазона, который сейчас меньше из-за UPDATE-ов и DELETE-ов.
  • Повышена точность определения выгодности сканирования BRIN-индекса (David Rowley, Emre Hasegeli).
  • Разрешены более быстрые вставки и обновления посредством более эффективного переиспользования индексных страниц GiST (Andrey Borodin).
  • Уменьшен уровень блокировки страниц во время обновления GIN-индекса (Andrey Borodin).

E.1.3.1.3. Блокировки

  • Уменьшен уровень блокировок, необходимый для добавления значений в перечисления (Andrew Dunstan, Tom Lane). Ранее было невозможно запустить команду ALTER TYPE ... ADD VALUE в блоке транзакции, если это перечисление не было создано в нём. Теперь запрещены только ссылки на незафиксированные значения перечислений из других транзакций.
  • Уменьшен уровень блокировок, необходимый для изменения параметров таблиц (Simon Riggs, Fabrízio Mello). Например, изменение настройки таблицы effective_io_concurrency [55] может быть выполнено с более легковесной блокировкой.
  • Разрешена настройка промотирования порогов предикатных блокировок (Dagfinn Ilmari Mannsåker). Промотирование блокировок может контролироваться двумя новыми серверными параметрами: max_pred_locks_per_relation [56] и max_pred_locks_per_page [57].

E.1.3.1.4. Оптимизатор

  • Добавлена многоколоночная статистика оптимизатора для вычисления коэффициента корреляции и количества уникальных значений (Tomas Vondra, David Rowley, Álvaro Herrera). Добавлены новые команды CREATE STATISTICS [58]ALTER STATISTICS [59] и DROP STATISTICS [60]. Эта возможность полезна при оценке использования памяти запросом и при комбинировании статистики из разных колонок.
  • Увеличена производительность запросов, затронутых ограничениями row-level security (Tom Lane). Оптимизатор обладает большим количеством знаний о том, где он может расположить фильтры RLS, позволяя строить лучшие планы и безопасно обеспечивать условия RLS.

E.1.3.1.5. Общая производительность

  • Ускорены агрегатные функции, вычисляющие текущую сумму при использовании арифметики numeric-типа, включая некоторые варианты SUM()AVG() и STDDEV() (Heikki Linnakangas).
  • Увеличена производительность преобразований кодировки символов с использованием radix-деревьев (Kyotaro Horiguchi, Heikki Linnakangas).
  • Уменьшены накладные расходы на вычисление выражений во время выполения запроса, а также накладные расходы на вызов узлов плана (Andres Freund). В частности это полезно для запросов, обрабатывающих большое количество строк.
  • Добавлена возможность использования хэш-агрегации с grouping sets (Andrew Gierth).
  • Использованы гарантии уникальности для оптимизации некоторых типов объединений (David Rowley).
  • Увеличена производительность сортировки типа данных macaddr (Brandur Leach).
  • Сокращены накладные расходы на отслеживание статистики в сеансах, которые используют многие тысячи отношений (Aleksander Alekseev).

E.1.3.1.6. Мониторинг

  • Добавлено явное управление отображением времени планирования и выполнения команды EXPLAIN [61] (Ashutosh Bapat). По умолчанию время планирования и выполнения отображалось командой EXPLAIN ANALYZE и не отображалось в других случаях. Новая опция команды EXPLAIN SUMMARY позволяет явно управлять отображением.
  • Добавлены правила мониторинга по умолчанию (Dave Page). Новые роли pg_monitorpg_read_all_settingspg_read_all_stats и pg_stat_scan_tables позволяют проще настраивать привилегии.
  • Правильное обновление сборщика статистики во время выполнения REFRESH MATERIALIZED VIEW [62] (Jim Mlodgenski).

E.1.3.1.6.1. Логгирование

  • Изменено значение по умолчанию параметра log_line_prefix [63] с включением таймстампа с миллисекундами и PID в каждой строке вывода postmaster'а (Christoph Berg). В прошлом префикс был пустым.
  • Добавлены функции для возврата содержимого каталогов log и WAL (Dave Page)
    Новые функции pg_ls_logdir() [64] и pg_ls_waldir() [64] могут быть запущены несуперпользователями с правильными настройками привилегий.
  • Добавлена функция pg_current_logfile() [65] для вывода имени файла, в который коллектор ошибок пишет текущий stderr или csvlog (Gilles Darold).
  • Сообщается об адресе и номере порта каждого слушающего сокета в логе сервера во время запуска postmaster'а (Tom Lane). Кроме того, при ошибке подключения к слушающему сокету, указывается конкретный адрес, к которому пытались подключиться.
  • Уменьшено количество сообщений в лог о запуске и остановке подпроцессов launcher'а (Tom Lane). Теперь они используют уровень сообщений DEBUG1.
  • Уменьшена многословность сообщений низких отладочных уровней управляемых  log_min_messages [66] (Robert Haas). Это также меняет многословность отладочных уровней client_min_messages [67].

E.1.3.1.6.2. pg_stat_activity [68]

  • Добавлена отчетность о низкоуровневых состояниях ожидания в pg_stat_activity (Michael Paquier, Robert Haas, Rushabh Lathia). Это изменение позволяет сообщать о многочисленных низкоуровневых блокировках, включая latch waits, чтение/запись fsync файлов, клиентские чтение/запись и синхронную репликацию.
  • Добавлено отображение фоновых процессов, background workers и процессов walsender в pg_stat_activity (Kuntal Ghosh, Michael Paquier). Это упрощает мониторинг. Новая колонка backend_type идентифицирует тип процесса.
  • В pg_stat_activity добавлено отображение SQL запущенного parallel workers (Rafia Sabih).
  • Переименованы значения pg_stat_activity.wait_event_type LWLockTranche и LWLockNamed в LWLock (Robert Haas). Это делает вывод более последовательным.

E.1.3.1.7. Проверка подлинности

  • Добавлена поддержка SCRAM-SHA-256 [41] для передачи и хранения паролей (Michael Paquier, Heikki Linnakangas). Это даёт большую безопасность, чем текущий (md5) метод передачи и хранения.
  • Изменен тип серверного параметра the password_encryption [45] с boolean на enum (Michael Paquier). Это было необходимо для поддержки дополнительных опций хэширования паролей.
  • Добавлено представление pg_hba_file_rules [69] для отображения содержимого pg_hba.conf (Haribabu Kommi). Показывается содержимое файла, но не текущие активные настройки.
  • Поддержка нескольких RADIUS-серверов (Magnus Hagander). Все параметры, относящиеся к  RADIUS, теперь записаны во множественном числе и поддерживают список серверов, разделённый запятыми.

E.1.3.1.8. Конфигурация сервера

  • Конфигурацию SSL стало можно обновлять при перезагрузке конфигурации (Andreas Karlsson, Tom Lane). Это позволяет переконфигурировать SSL без перезагрузки сервера, используя pg_ctl reloadSELECT pg_reload_conf() или отправляя сигнал SIGHUP. Однако перезагрузка конфигурации SSL не работает, если серверный ключ SSL требует пароль, так как нет возможности предложить ввод пароля. В этом случае будет применена первоначальная конфигурация.
  • Максимальное значение bgwriter_lru_maxpages [70] сделано действительно неограниченным (Jim Nasby).

E.1.3.1.9. Надёжность

  • После создания или удаления файлов выполняется вызов fsync для их родительского каталога (Michael Paquier). Это уменьшает риск потери данных при сбоях питания.

E.1.3.1.9.1. Журнал упреждающей записи (WAL) [71]

  • Убраны ненужные checkpoint'ы и архивация  WAL'а при простое системы (Michael Paquier)
  • Добавлен серверный параметр wal_consistency_checking [72], чтобы добавить сведения в WAL, которые нужно проверить на стендбае (Kuntal Ghosh, Robert Haas). Любая ошибка при проверке порождает фатальную ошибку на стендбае.
  • Увеличен максимальный конфигурируемый сегмент WAL до гигабайта (Beena Emerson)
    Больший размер WAL-сегмента позволяет реже вызывать archive_command [73] и управлять меньшим количеством WAL-файлов.

E.1.3.2. Репликация и восстановление

  • Добавлена возможность логически реплицировать [74] таблицы на стендбаи (Petr Jelinek). Логическая репликация даёт большую гибкость, чем физическая, включая репликацию между различными мажорными версиями PostgreSQL и выборочную репликацию.
  • Разрешено ожидание подтверждения коммита от стендбаев вне зависимости от порядка, в котором они перечислены в synchronous_standby_names [75] (Masahiko Sawada). До этого сервер ждал активного стендбая, который встречался первым в списке synchronous_standby_names. Новое ключевое слово synchronous_standby_names ANY позволяет ожидать любое количество стендбаев, вне зависимости от их порядка. Это называется кворумным коммитом.
  • Уменьшено количество изменений в конфигурации необходимых для подготовки потоковой репликации и бэкапа (Magnus Hagander, Dang Minh Huong). Конкретно, умолчания поменялись для wal_level [76]max_wal_senders [77]max_replication_slots [78] и hot_standby [79], чтобы сделать их более подходящими для использования из коробки.
  • Включена репликация с локальных соединений по умолчанию в pg_hba.conf [41] (Michael Paquier). Ранее строки с соединениями репликации в pg_hba.conf были закомментированы по умолчанию. В частности, это полезно для pg_basebackup [40].
  • Добавлены колонки в pg_stat_replication [80] для отчета по времени отставания репликации (Thomas Munro). Новые колонки: write_lagflush_lag и replay_lag.
  • Добавлено указание точки останова восстановления с помощью Log Sequence Number (LSN) в recovery.conf [81] (Michael Paquier). До этого точка останова могла быть указана с помощью таймстампа или XID'а.
  • Пользователям разрешено отключать pg_stop_backup() [82], ждущий архивации всех WAL'ов (David Steele). Управляет этим поведением необязательный второй аргумент pg_stop_backup().
  • Разрешено создание временных слотов репликации [83] (Petr Jelinek). Временные слоты удаляются автоматически при ошибке или завершении сеанса.
  • Увеличена производительность реплея на хот стендбае с лучшей обработкой блокировок уровня Access Exclusive (Simon Riggs, David Rowley).
  • Ускорена производительность двухфазного коммита (Stas Kelvich, Nikhil Sontakke, Michael Paquier).

E.1.3.3. Запросы

  • Добавлена функция XMLTABLE [84], конвертирующая XML-данные в список строк (Pavel Stehule, Álvaro Herrera).
  • Добавлена поддержка стандартного синтаксиса конструктора строки в UPDATE ... SET (column_list) = row_constructor (Tom Lane). row_constructor может начинаться с ключевого слова ROW; ранее оно опускалось. Также вхождение table_name.* вместе с row_constructor теперь раскрывается в несколько колонок, как и в других случаях применения row_constructors.
  • Исправлена обработка символьных классов в регулярных выражениях для больших кодов символов, конкретно для символов Unicode выше U+7FF (Tom Lane). Ранее такие символы никогда не распознавались, как относящиеся к локалезависимым классам, таким как [[:alpha:]].

E.1.3.4. Вспомогательные команды

  • Добавлен синтаксис партицирования [85] таблиц, который автоматически выставляет ограничения на партиции и управляет вставками и обновлениями (Amit Langote). Синтаксис поддерживает диапазонное и списочное партицирование.
  • Добавлены таблицы переходов для AFTER-триггеров [86], для записи измененных строк (Kevin Grittner, Thomas Munro). Таблицы переходов теперь доступны для триггеров, написаных на серверных языках программирования.
  • Добавлены ограничительные политики безопасности [87] на уровне строк (Stephen Frost). Ранее политики безопасности были разрешающими, что означает, что любая политика разрешает доступ. Запрещающая политика должна совпадать с доступом, который должен быть выдан. Такие типы политик могут комбинироваться.
  • При создании ограничения внешнего ключа проверяется REFERENCES-привилегия только на целевой таблице (Tom Lane). Ранее REFERENCES-привилегия требовалась на ссылающейся таблице. Похоже, это произошло из-за неправильного прочтения стандарта SQL. Поскольку создание ограничения внешнего ключа (или любого другого типа) требует права собственности на целевую таблицу, дополнительно требовать REFERENCES-привилегию выглядит довольно бессмысленным.
  • Добавлены привилегии по умолчанию [88] для схем (Matheus Oliveira). Это делается с использованием команды ALTER DEFAULT PRIVILEGES.
  • Добавлена команда CREATE SEQUENCE AS [89] чтобы создать последовательность, соответствующую целочисленному типу данных (Peter Eisentraut). Это упрощает создание последовательностей, соответствующих диапазону базовых колонок.
  • Разрешено COPY view FROM source на представлениях с INSTEAD INSERT-триггерами (Haribabu Kommi). Триггеры получают строки данных из COPY.
  • Разрешено определение функции без аргументов в DDL, если сигнатура уникальна (Peter Eisentraut). Например, допустимо выполнение DROP FUNCTION [90] с именем функции без аргументов, если такая функция одна. Это поведение требует стандарт SQL.
  • Разрешено удаление нескольких функций, операторов и агрегатов в одиночной команде DROP (Peter Eisentraut).
  • Поддержан IF NOT EXISTS в CREATE SERVER [91]CREATE USER MAPPING [92] и CREATE COLLATION [93] (Anastasia Lubennikova, Peter Eisentraut).
  • VACUUM VERBOSE [94] сообщает о количестве пропущенных замороженных страниц и старейшем xmin (Masahiko Sawada, Simon Riggs). Эта информация также включена в вывод log_autovacuum_min_duration [95].
  • Увеличена скорость удаления пустых хвостовых табличных страниц при VACUUM-е (Claudio Freire, Álvaro Herrera).

E.1.3.5. Типы данных

  • Добавлена поддержка полнотекстового поиска для JSON и JSONB (Dmitry Dolgov). Функции ts_headline() и to_tsvector() могут использоваться с этими типами данных.
  • Добавлена поддержка для EUI-64 MAC-адресов в виде нового типа данных macaddr8 [96] (Haribabu Kommi). Это дополняет существующую поддержку MAC-адресов EUI-48 (type macaddr).
  • Добавлены столбцы идентификаторов [97] для присвоения числового значения колонкам при вставке (Peter Eisentraut). Они подобны колонкам SERIAL, но более соответствуют стандарту SQL.
  • Разрешено переименовывать значения ENUM [98] (Dagfinn Ilmari Mannsåker). Используется синтаксис ALTER TYPE… RENAME VALUE [99].
  • Правильная обработка массивов псевдотипов (anyarray) как массивов в to_json() и to_jsonb() (Andrew Dunstan). Ранее колонки, объявленные как anyarray (в частности, такие есть в представлении pg_stats) преобразовывались в JSON-строки, а не массивы.
  • Добавлены операторы для умножения и деления of  значений типа money [100] на значения int8 (Peter Eisentraut). Ранее такие случаи приводили бы к преобразованию int8-значений в float8 использовались money-и-float8 операторы. Новое поведение позволяет избежать возможной потери точности. Но обратите внимание, что деление money на int8 теперь усекает частное, как и в других случаях целочисленного деления, в то время как предыдущее поведение округлило бы результат.
  • Проверка на переполнение в функции ввода  типа money (Peter Eisentraut).

E.1.3.6. Функции

  • Добавлена упрощенная функция regexp_match() [101](Emre Hasegeli). Она похожа на regexp_matches(), но возвращает результаты с первого совпадения, так что не нужно возвращать набор данных, делая её использование более простым в простых случаях.
  • Добавлена версия оператора удаления [102] для jsonb, принимающего список ключей для удаления (Magnus Hagander).
  • Функции json_populate_record() [103] и аналогичные обрабатывают массивы JSON рекурсивно (Nikita Glukhov). С этим изменением массивы SQL правильно конвертируются из массиово JSON, а также композитные типы правильно конвертируются из объектов JSON. Ранее подобное не работало, так как на вход array_in() или record_in() подавалось текстовое представление JSON-значения, этот синтаксис не соответствовал тому, что ожидала функция.
  • Добавлена функция txid_current_ifassigned() [104] для возврата текущего идентификатора транзакции или значения NULL, если идентификатор транзакции не был присвоен (Craig Ringer). Она отличается от txid_current() [104], которая всегда возвращает идентификатор транзакции или присваивает его, если необходимо. Эта функция может выполняться только на стендбаях.
  • Добавлена функция txid_status() [104] для проверки фиксации транзакции (Craig Ringer). Это полезно для проверки после резкого отключения, была ли совершена предыдущая транзакция, и вы просто не получили подтверждение.
  • Функция make_date() [105] интерпретирует отрицательные годы, как годы до н. э. (Álvaro Herrera).
  • Функции to_timestamp() и to_date() не принимают выходящие за диапазон допустимых значений поля (Artur Zakirov). Например, ранее to_date('2009-06-40','YYYY-MM-DD') принималось и возвращалось 2009-07-10. Сейчас это приводит к ошибке.

E.1.3.7. Серверные языки

  • Разрешено функциям cursor() и execute() PL/Python быть вызванными как методы объектов (Peter Eisentraut). Это позволяет использовать более объектно-ориентированный стиль программирования.
  • Разрешено получение GET DIAGNOSTICS в PL/pgSQL в массив элементов (Tom Lane). Ранее синтаксическое ограничение не позволяло целевой переменной быть элементом массива.

E.1.3.7.1. PL/Tcl [106]

  • PL/Tcl могут возвращать композитные типы и множества (Karl Lehenbauer).
  • Добавлена команда подтранзакций в PL/Tcl (Victor Wagner). Это позволяет PL/Tcl-запросам падать без отмены всей функции.
  • Добавлены параметры сервера pltcl.start_proc [49] и pltclu.start_proc [50] для вызова функций инициализации при старте PL/Tcl (Tom Lane).

E.1.3.8. Клиентские интерфейсы

  • Добавлена возможность задавать множественные имена хостов [107] или адреса в строках соединений и URI libpq (Robert Haas, Heikki Linnakangas). libpq будет соединяться с первым доступным сервером в списке.
  • Добавлена возможность для строк соединения и URI libpq запрашивать читающий/пишуший хост [108] для различия мастера и стендбая (Victor Wagner, Mithun Cy). Это полезно при указании нескольких имен хостов. Он управляется с помощью параметра соединения библиотеки libpq target_session_attrs.
  • Разрешено использовать  имя файла с паролем [109] в качестве параметра соединения libpq (Julian Markwort). В прошлом это было возможно только с помощью задания переменной окружения.
  • Добавлена функция PQencryptPasswordConn() [110], позволяющая создавать большее количество типов зашифрованных паролей на стороне клиента (Michael Paquier, Heikki Linnakangas). До этого момента MD5-хэшированные пароли могли быть созданы с использованием PQencryptPassword() [111]. Новая функция может создавать SCRAM-SHA-256- [41]шифрованные пароли.
  • Изменена версия обработчика ecpg с 4.12 на 10 (Tom Lane). Впоследствии версия ecpg будет соответствовать номеру дистрибутива PostgreSQL.

E.1.3.9. Клиентские приложения

E.1.3.9.1. psql [112]

  • Добавлена поддержка ветвления в psql (Corey Huinker). Эта фича добавляет в psql метакоманды ifelifelse и endif. В первую очередь, это удобно для сценариев.
  • Добавлена метакоманда psql gx для запуска (g) запроса в расширенном режиме (x) (Christoph Berg).
  • Переменные psql раскрываются в строках, обрамлённых в обратные кавычки (Tom Lane). В частности, это удобно для новых команд условного ветвления в psql.
  • Предотвращена установка неправильных значений специальных переменных psql (Daniel Vérité, Tom Lane). Ранее установка одной специальной переменной psql в неправильное значение выполнялась молча. set для специальной переменной теперь выполняется с ошибкой, если новое значение некорректно. Как особое исключение, set с пустым или пропущенным значением для булевой специальной переменной выставляет эту переменную в значение on; но теперь он получает это значение, а не пустую строку. unset теперь явно выставляет в значение по умолчанию, которое является значением, полученным при запуске. В итоге управляющая переменная теперь всегда имеет отображаемое значение, которое отражает то, что на самом деле делает psql.
  • Добавлены переменные, показывающие версию сервера и psql (Fabien Coelho).
  • Улучшены команды psql d (показать отношение) и dD (показать домен), чтобы показать сортировку, значение null, и свойства по умолчанию в разных колонках (Peter Eisentraut)
    До этого они отображались в одиночной колонке “Modifiers”.
  • Обработка командами d несоответствующих объектов выполнена более последовательно (Daniel Gustafsson). Сообщения выводятся в stderr, не в stdout, формулировка стала более последовательной.
  • Улучшено автодополнение в psql (Jeff Janes, Ian Barwick, Andreas Karlsson, Sehrope Sarkuni, Thomas Munro, Kevin Grittner, Dagfinn Ilmari Mannsåker).

E.1.3.9.2. pgbench [113]

  • Добавлена опция pgbench --log-prefix для управления префиксом в логе (Masahiko Sawada).
  • Добавлена многострочность метакоманд pgbench (Fabien Coelho). Метакоманды могут продолжаться с новой строки при использовании обратного слэша.
  • Удалено ограничение на использование опции -M, относящейся к другим опциям командной строки (Tom Lane).

E.1.3.10. Серверные приложения

  • Добавлена опция pg_receivewal [114]  -Z/--compress для указания уровня сжатия (Michael Paquier).
  • Добавлена опция pg_recvlogical [115] --endpos для указания конечной позиции (Craig Ringer). Это соответствует существующей опции --startpos.
  • Переименованы опции initdb [116] --noclean и --nosync в --no-clean и --no-sync (Vik Fearing, Peter Eisentraut). Старые варианты всё ещё поддерживаются.

E.1.3.10.1. pg_dump [117]pg_dumpall [36]pg_restore [118]

  • Добавлена возможность pg_restore исключать схемы (Michael Banck). Это добавляет новую опцию -N/--exclude-schema.
  • Добавлена опция --no-blobs в pg_dump (Guillaume Lelarge). Это подавляет дамп больших объектов.
  • Добавлена опция pg_dumpall --no-role-passwords, чтобы исключить пароли ролей (Robins Tharakan, Simon Riggs). Это позволяет использовать pg_dumpall несуперпользователям, без этой опции он аварийно завершался от невозможности прочитать пароли.
  • Поддержка использования синхронизированных снэпшотов при снятии дампа со стендбая (Petr Jelinek).
  • Запуск fsync() для файлов, сгенерированных pg_dump и pg_dumpall (Michael Paquier). Это обеспечивает большую сохранность данных при внезапных завершениях программы, т.к. данные принудительно сохраняются на диск. Может быть выключено с помощью новой опции --no-sync.

E.1.3.10.2. pg_basebackup [40]

  • Добавлена возможность pg_basebackup стримить WAL в tar-режиме (Magnus Hagander). WAL будет сохранён в отдельном tar-файле от base backup'а.
  • Дана возможность pg_basebackup использовать временные слоты репликации (Magnus Hagander). Временные слоты репликации используются по умолчанию, когда pg_basebackup использует стриминг WAL со стандартными опциями.
  • Более аккуратный fsync во всех требуемых местах  pg_basebackup и pg_receivewal (Michael Paquier).
  • Добавлена опция pg_basebackup  --no-sync для отключения fsync (Michael Paquier).
  • Улучшена обработка pg_basebackup'ом, какие директории нужно пропустить (David Steele).

E.1.3.10.3. pg_ctl [42]

  • Добавлена опция ожидания для операции промотирования pg_ctl (Peter Eisentraut).
  • Добавлены длинные эквиваленты для pg_ctl wait (--wait) и no-wait (--no-wait) (Vik Fearing).
  • Добавлен длинный эквивалент для серверных опций в pg_ctl (--options) (Peter Eisentraut).
  • pg_ctl start --wait определяет готовность сервера по наблюдению за postmaster.pid, не по попыткам соединиться (Tom Lane). postmaster изменен, чтобы отобразить готовность к приёму соединений в postmaster.pid, и pg_ctl теперь просматривает этот файл, чтобы понять, что запуск завершен. Этот метод более эффективный и надеждный, чем старый, и убирает из лога сообщения о попытках подключения во время старта.
  • Уменьшено время реакции pg_ctl при ожидании старта/остановки postmaster'а (Tom Lane). pg_ctl теперь проверяет десять раз в секунду изменение состояния postmaster'а, а не один раз в секунду.
  • pg_ctl завершает работу с ненулевым кодом возврата, если операция не завершилась по таймауту (Peter Eisentraut). Операции start и promote теперь возвращают 1, не 0, в таких случаях. Операция stop всегда работала так.

E.1.3.11. Исходный код

  • Нумерация релизов изменена на двухномерную (Peter Eisentraut, Tom Lane). Номера релизов теперь будут состоять из двух частей (например, 10.1), а не трех (e.g., 9.6.3). Мажорные версии будут увеличивать первое число, минорные — второе. Релизные ветки будут именоваться одиночными числами (например, 10 вместо 9.6). Это изменение направлено на уменьшение путаницы среди пользователей, какой релиз PostgreSQL является мажорным или минорным.
  • Улучшена работа pgindent (Piotr Stefaniak, Tom Lane). Мы перешли на новую версию pg_bsd_indent, основанную на последних улучшениях, сделанных проектом FreeBSD. Она исправляет многочисленные маленькие ошибки, к которым приводило нечёткое форматирование кода на C. В частности, строки в скобках (как, например, многострочные вызовы функций), теперь отступают равномерно, даже если приходится пересекать границу справа.
  • Разрешено опциональное использование библиотеки ICU [119] для поддержки сортировки (Peter Eisentraut). Библиотека ICU использует версионирование, позволяющее обнаружить изменение сортировки между версиями. Она включается с помощью опции конфигурации --with-icu. По умолчанию используется системная библиотека параметров сортировки.
  • Все функции PG_FUNCTION_INFO_V1 [120] автоматически маркируются атрибутом DLLEXPORT на Windows (Laurenz Albe). Если сторонний код использует декларацию extern функции, он так же должен использовать отметку DLLEXPORT для таких деклараций.
  • Удалены функции SPI SPI_push()SPI_pop()SPI_push_conditional()SPI_pop_conditional() и SPI_restore_connection() как ненужные (Tom Lane). Их функциональность теперь выполняется автоматически. В настоящее время эти имена не содержат макросов, поэтому внешние модули не нуждаются в немедленном обновлении, но в конечном итоге такие вызовы должны быть удалены.
    Побочный эффект состоит в том, что  SPI_palloc() и аналогичные функции теперь требуют активного SPI-подключения; они не вырождаются в простые palloc(), если его нет. Предыдущее поведение было не очень полезным и порождало риски неожиданных утечек памяти.
  • Разрешено динамическое выделение общей памяти (Thomas Munro, Robert Haas).
  • Добавлен slab-like аллокатор памяти для более эффективного выделения памяти фиксированных размеров (Tomas Vondra).
  • Использование семафоров POSIX вместо семафоров SysV на Linux и FreeBSD (Tom Lane). Это позволяет избежать платформозависимых ограничений при использовании семафоров SysV.
  • Улучшена поддержка 64-битных атомик-типов (Andres Freund).
  • Включены 64-битные атомарные операции на ARM64 (Roman Shaposhnik).
  • Переход на использование clock_gettime(), где это возможно, для измерений производительности (Tom Lane). gettimeofday() используется там, где clock_gettime() недоступен.
  • Добавлены более быстрые генераторы случайных чисел для использования в криптографии (Magnus Hagander, Michael Paquier, Heikki Linnakangas). Если не найдено ни одного стойкого генератора случайных чисел, configure [119] будет завершаться с ошибкой, если не указана опция --disable-strong-random. Однако с этой опцией функции pgcrypto, требующие стойкого генератора случайных чисел будут недоступны.
  • Разрешены WaitLatchOrSocket() соединения на сокете на Windows (Andres Freund).
  • Функции tupconvert.c более не конвертируют туплы, только встраивают в них композитный OID (Ashutosh Bapat, Tom Lane). В большинстве случаев о составных OID не заботятся, но если результирующий тупл должен использоваться как композитный Datum, необходимо выполнить определенные шаги, чтобы убедиться, что в него вставлен правильный OID.
  • Убрана поддержка SCO и Unixware (Tom Lane).
  • Переписана документация по процессу сборки [121] (Alexander Lakhin).
  • Используется XSLT для сборки документации PostgreSQL (Peter Eisentraut). До этого использовались Jade, DSSSL, и JadeTex.
  • Сборка HTML-документации использует XSLT-таблицы стилей по умолчанию (Peter Eisentraut).

E.1.3.12. Дополнительные модули

  • Добавлена возможность file_fdw [122] читать вывод программ, так же как и файлы (Corey Huinker, Adam Gomaa).
  • В postgres_fdw [123] агрегатные функции отправляются на удалённый сервер, когда это возможно (Jeevan Chalke, Ashutosh Bapat). Это уменьшает объем данных, которые должны передаваться с удаленного сервера, и разгружает агрегационные вычисления с запрашивающего сервера.
  • В postgres_fdw джойны отправляются на удалённые сервера в большем количестве случаев (David Rowley, Ashutosh Bapat, Etsuro Fujita).
  • Правильная поддержка колонок OID в таблицах postgres_fdw (Etsuro Fujita). До этого колонки OID всегда возвращали нули.
  • Добавлена возможность для btree_gist [124] и btree_gin [125] индексировать перечислимые типы (Andrew Dunstan). Это позволяет использовать перечисления в exclusion constraints.
  • Добавлена индексная поддержка в btree_gist для типа данных UUID (Paul Jungwirth).
  • Добавлен amcheck [126], который может проверять валидность индексов B-tree (Peter Geoghegan).
  • Представление проигнорированных констант как $N вместо ? в pg_stat_statements [127] (Lukas Fittl).
  • Улучшена обработка ноль-размерных кубов (cube [128]) (Tom Lane). Это также улучшает обработку infinite- и NaN-значений.
  • Добавлена возможность запуска pg_buffercache [129] с меньшим количеством блокировок (Ivan Kartyshov). Это делает запуски на продакшне менее деструктивными.
  • Добавлена функция pgstattuple [130] pgstathashindex() для просмотра статистики хэш-индексов (Ashutosh Sharma).
  • Использование GRANT для выдачи привилегий на использование pgstattuple (Stephen Frost). Это позволяет администраторам дать права на запуск этих функций не суперпользователям.
  • Уменьшен уровень блокировок при просмотре хэш-индексов с помощью pgstattuple (Amit Kapila).
  • В pageinspect [131] добавлена функция page_checksum(), выводящая контрольную сумму страницы (Tomas Vondra).
  • В pageinspect добавлена функция bt_page_items() для вывода страничных записей из образа странцы (Tomas Vondra).
  • В pageinspect добавлена поддержка хэш-индексов (Jesper Pedersen, Ashutosh Sharma).

От переводчика

Вот мои мысли о новых фичах.

Логическая репликация — очень мощный и гибкий инструмент. Очень хотелось бы иметь механизмы восстановления после аварий источника событий. А также увидеть опциональное хранение данных для логической репликации в отдельной структуре, а не в WALе.

Декларативное партицирование закладывает хороший фундамент для будущих улучшений в этой области. Есть надежда, что существующие проблемы уйдут в прошлое, и будет меньше головной боли с партициями.

Параллельная обработка запросов дает существенный прирост производительности во многих случаях.

Улучшенный мониторинг и администрирование: благодаря добавлению новых ролей упрощается процесс снятия метрик для мониторинга.

Какие фичи понравились вам больше всего? Когда планируете мигрировать?

Автор: pkorobeinikov

Источник [132]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/postgresql/265190

Ссылки в тексте:

[1] раз: https://www.postgresql.org/message-id/20170616195617.1422.31261%40wrigleys.postgresql.org

[2] два: https://www.postgresql.org/message-id/20170609160109.26502.14118%40wrigleys.postgresql.org

[3] E.1.1. Обзор (TLDR): #e11-obzor-tldr

[4] E.1.2. Миграция на версию 10: #e12-migraciya-na-versiyu-10

[5] E.1.3. Изменения: #e13izmeneniya

[6] E.1.3.1. Сервер: #e131server

[7] E.1.3.1.1. Параллельные запросы: #e1311parallelnye-zaprosy

[8] E.1.3.1.2. Индексы: #e1312indeksy

[9] E.1.3.1.3. Блокировки: #e1313blokirovki

[10] E.1.3.1.4. Оптимизатор: #e1314optimizator

[11] E.1.3.1.5. Общая производительность: #e1315obschaya-proizvoditelnost

[12] E.1.3.1.6. Мониторинг: #e1316monitoring

[13] E.1.3.1.6.1. Логгирование: #e13161loggirovanie

[14] E.1.3.1.6.2. pg_stat_activity: #e13162pg_stat_activityhttpswwwpostgresqlorgdocs10staticmonitoring-statshtmlpg-stat-activity-view

[15] E.1.3.1.7. Проверка подлинности: #e1317proverka-podlinnosti

[16] E.1.3.1.8. Конфигурация сервера: #e1318konfiguraciya-servera

[17] E.1.3.1.9. Надёжность: #e1319nadyozhnost

[18] E.1.3.1.9.1. Журнал упреждающей записи (WAL): #e13191zhurnal-uprezhdayuschey-zapisiwalhttpswwwpostgresqlorgdocs10staticwalhtml

[19] E.1.3.2. Репликация и восстановление: #e132replikaciya-i-vosstanovlenie

[20] E.1.3.3. Запросы: #e133zaprosy

[21] E.1.3.4. Вспомогательные команды: #e134vspomogatelnye-komandy

[22] E.1.3.5. Типы данных: #e135tipy-dannyh

[23] E.1.3.6. Функции: #e136funkcii

[24] E.1.3.7. Серверные языки: #e137servernye-yazyki

[25] E.1.3.7.1. PL/Tcl: #e1371pltclhttpswwwpostgresqlorgdocs10staticpltclhtml

[26] E.1.3.8. Клиентские интерфейсы: #e138klientskie-interfeysy

[27] E.1.3.9. Клиентские приложения: #e139klientskie-prilozheniya

[28] E.1.3.9.1. psql: #e1391psqlhttpswwwpostgresqlorgdocs10staticapp-psqlhtml

[29] E.1.3.9.2. pgbench: #e1392pgbenchhttpswwwpostgresqlorgdocs10staticpgbenchhtml

[30] E.1.3.10. Серверные приложения: #e1310servernye-prilozheniya

[31] E.1.3.10.1. pg_dump, pg_dumpall, pg_restore: #e13101pg_dumphttpswwwpostgresqlorgdocs10staticapp-pgdumphtmlpg_dumpallhttpswwwpostgresqlorgdocs10staticapp-pg-dumpallhtmlpg_restorehttpswwwpostgresqlorgdocs10staticapp-pgrestorehtml

[32] E.1.3.10.2. pg_basebackup: #e13102pg_basebackuphttpswwwpostgresqlorgdocs10staticapp-pgbasebackuphtml

[33] E.1.3.10.3. pg_ctl: #e13103pg_ctlhttpswwwpostgresqlorgdocs10staticapp-pg-ctlhtml

[34] E.1.3.11. Исходный код: #e1311ishodnyy-kod

[35] E.1.3.12. Дополнительные модули: #e1312dopolnitelnye-moduli

[36] pg_dumpall: https://www.postgresql.org/docs/10/static/app-pg-dumpall.html

[37] pg_upgrade: https://www.postgresql.org/docs/10/static/pgupgrade.html

[38] Section 37.4.8: https://www.postgresql.org/docs/10/static/xfunc-sql.html#xfunc-sql-functions-returning-set

[39] pg_sequence: https://www.postgresql.org/docs/10/static/catalog-pg-sequence.html

[40] pg_basebackup: https://www.postgresql.org/docs/10/static/app-pgbasebackup.html

[41] pg_hba.conf: https://www.postgresql.org/docs/10/static/auth-pg-hba-conf.html

[42] pg_ctl: https://www.postgresql.org/docs/10/static/app-pg-ctl.html

[43] log_directory: https://www.postgresql.org/docs/10/static/runtime-config-logging.html#guc-log-directory

[44] ssl_dh_params_file: https://www.postgresql.org/docs/10/static/runtime-config-connection.html#guc-ssl-dh-params-file

[45] password_encryption: https://www.postgresql.org/docs/10/static/runtime-config-connection.html#guc-password-encryption

[46] min_parallel_table_scan_size: https://www.postgresql.org/docs/10/static/runtime-config-query.html#guc-min-parallel-table-scan-size

[47] min_parallel_index_scan_size: https://www.postgresql.org/docs/10/static/runtime-config-query.html#guc-min-parallel-index-scan-size

[48] shared_preload_libraries: https://www.postgresql.org/docs/10/static/runtime-config-client.html#guc-shared-preload-libraries

[49] pltcl.start_proc: https://www.postgresql.org/docs/10/static/pltcl-config.html#guc-pltcl-start-proc

[50] pltclu.start_proc: https://www.postgresql.org/docs/10/static/pltcl-config.html#guc-pltclu-start-proc

[51] max_parallel_workers: https://www.postgresql.org/docs/10/static/runtime-config-resource.html#guc-max-parallel-workers

[52] max_worker_processes: https://www.postgresql.org/docs/10/static/runtime-config-resource.html#guc-max-worker-processes

[53] CREATE INDEX: https://www.postgresql.org/docs/10/static/sql-createindex.html

[54] brin_summarize_range(): https://www.postgresql.org/docs/10/static/functions-admin.html#functions-admin-index-table

[55] effective_io_concurrency: https://www.postgresql.org/docs/10/static/runtime-config-resource.html#guc-effective-io-concurrency

[56] max_pred_locks_per_relation: https://www.postgresql.org/docs/10/static/runtime-config-locks.html#guc-max-pred-locks-per-relation

[57] max_pred_locks_per_page: https://www.postgresql.org/docs/10/static/runtime-config-locks.html#guc-max-pred-locks-per-page

[58] CREATE STATISTICS: https://www.postgresql.org/docs/10/static/sql-createstatistics.html

[59] ALTER STATISTICS: https://www.postgresql.org/docs/10/static/sql-alterstatistics.html

[60] DROP STATISTICS: https://www.postgresql.org/docs/10/static/sql-dropstatistics.html

[61] EXPLAIN: https://www.postgresql.org/docs/10/static/sql-explain.html

[62] REFRESH MATERIALIZED VIEW: https://www.postgresql.org/docs/10/static/sql-refreshmaterializedview.html

[63] log_line_prefix: https://www.postgresql.org/docs/10/static/runtime-config-logging.html#guc-log-line-prefix

[64] pg_ls_logdir(): https://www.postgresql.org/docs/10/static/functions-admin.html#functions-admin-genfile-table

[65] pg_current_logfile(): https://www.postgresql.org/docs/10/static/functions-info.html#functions-info-session-table

[66] log_min_messages: https://www.postgresql.org/docs/10/static/runtime-config-logging.html#guc-log-min-messages

[67] client_min_messages: https://www.postgresql.org/docs/10/static/runtime-config-logging.html#guc-client-min-messages

[68] pg_stat_activity: https://www.postgresql.org/docs/10/static/monitoring-stats.html#pg-stat-activity-view

[69] pg_hba_file_rules: https://www.postgresql.org/docs/10/static/view-pg-hba-file-rules.html

[70] bgwriter_lru_maxpages: https://www.postgresql.org/docs/10/static/runtime-config-resource.html#guc-bgwriter-lru-maxpages

[71] Журнал упреждающей записи (WAL): https://www.postgresql.org/docs/10/static/wal.html

[72] wal_consistency_checking: https://www.postgresql.org/docs/10/static/runtime-config-developer.html#guc-wal-consistency-checking

[73] archive_command: https://www.postgresql.org/docs/10/static/runtime-config-wal.html#guc-archive-command

[74] логически реплицировать: https://www.postgresql.org/docs/10/static/logical-replication.html

[75] synchronous_standby_names: https://www.postgresql.org/docs/10/static/runtime-config-replication.html#guc-synchronous-standby-names

[76] wal_level: https://www.postgresql.org/docs/10/static/runtime-config-wal.html#guc-wal-level

[77] max_wal_senders: https://www.postgresql.org/docs/10/static/runtime-config-replication.html#guc-max-wal-senders

[78] max_replication_slots: https://www.postgresql.org/docs/10/static/runtime-config-replication.html#guc-max-replication-slots

[79] hot_standby: https://www.postgresql.org/docs/10/static/runtime-config-replication.html#guc-hot-standby

[80] pg_stat_replication: https://www.postgresql.org/docs/10/static/monitoring-stats.html#monitoring-stats-views-table

[81] recovery.conf: https://www.postgresql.org/docs/10/static/recovery-config.html

[82] pg_stop_backup(): https://www.postgresql.org/docs/10/static/functions-admin.html

[83] временных слотов репликации: https://www.postgresql.org/docs/10/static/functions-admin.html#functions-replication-table

[84] XMLTABLE: https://www.postgresql.org/docs/10/static/functions-xml.html#functions-xml-processing-xmltable

[85] синтаксис партицирования: https://www.postgresql.org/docs/10/static/sql-createtable.html#sql-createtable-partition

[86] триггеров: https://www.postgresql.org/docs/10/static/sql-createtrigger.html

[87] ограничительные политики безопасности: https://www.postgresql.org/docs/10/static/sql-createpolicy.html

[88] привилегии по умолчанию: https://www.postgresql.org/docs/10/static/sql-alterdefaultprivileges.html

[89] CREATE SEQUENCE AS: https://www.postgresql.org/docs/10/static/sql-createsequence.html

[90] DROP FUNCTION: https://www.postgresql.org/docs/10/static/sql-dropfunction.html

[91] CREATE SERVER: https://www.postgresql.org/docs/10/static/sql-createserver.html

[92] CREATE USER MAPPING: https://www.postgresql.org/docs/10/static/sql-createusermapping.html

[93] CREATE COLLATION: https://www.postgresql.org/docs/10/static/sql-createcollation.html

[94] VACUUM VERBOSE: https://www.postgresql.org/docs/10/static/sql-vacuum.html

[95] log_autovacuum_min_duration: https://www.postgresql.org/docs/10/static/runtime-config-autovacuum.html#guc-log-autovacuum-min-duration

[96] macaddr8: https://www.postgresql.org/docs/10/static/datatype-net-types.html#datatype-macaddr8

[97] столбцы идентификаторов: https://www.postgresql.org/docs/10/static/sql-createtable.html

[98] ENUM: https://www.postgresql.org/docs/10/static/datatype-enum.html

[99] ALTER TYPE… RENAME VALUE: https://www.postgresql.org/docs/10/static/sql-altertype.html

[100] money: https://www.postgresql.org/docs/10/static/datatype-money.html

[101] regexp_match(): https://www.postgresql.org/docs/10/static/functions-matching.html#functions-posix-regexp

[102] оператора удаления: https://www.postgresql.org/docs/10/static/functions-json.html#functions-jsonb-op-table

[103] json_populate_record(): https://www.postgresql.org/docs/10/static/functions-json.html#functions-json-processing-table

[104] txid_current_ifassigned(): https://www.postgresql.org/docs/10/static/functions-info.html#functions-txid-snapshot

[105] make_date(): https://www.postgresql.org/docs/10/static/functions-formatting.html#functions-formatting-table

[106] PL/Tcl: https://www.postgresql.org/docs/10/static/pltcl.html

[107] множественные имена хостов: https://www.postgresql.org/docs/10/static/libpq-connect.html#libpq-connect-host

[108] читающий/пишуший хост: https://www.postgresql.org/docs/10/static/libpq-connect.html#libpq-connect-target-session-attrs

[109] имя файла с паролем: https://www.postgresql.org/docs/10/static/libpq-connect.html#libpq-connect-passfile

[110] PQencryptPasswordConn(): https://www.postgresql.org/docs/10/static/libpq-misc.html#libpq-pqencryptpasswordconn

[111] PQencryptPassword(): https://www.postgresql.org/docs/10/static/libpq-misc.html#libpq-pqencryptpassword

[112] psql: https://www.postgresql.org/docs/10/static/app-psql.html

[113] pgbench: https://www.postgresql.org/docs/10/static/pgbench.html

[114] pg_receivewal: https://www.postgresql.org/docs/10/static/app-pgreceivewal.html

[115] pg_recvlogical: https://www.postgresql.org/docs/10/static/app-pgrecvlogical.html

[116] initdb: https://www.postgresql.org/docs/10/static/app-initdb.html

[117] pg_dump: https://www.postgresql.org/docs/10/static/app-pgdump.html

[118] pg_restore: https://www.postgresql.org/docs/10/static/app-pgrestore.html

[119] ICU: https://www.postgresql.org/docs/10/static/install-procedure.html#configure

[120] PG_FUNCTION_INFO_V1: https://www.postgresql.org/docs/10/static/xfunc-c.html

[121] процессу сборки: https://www.postgresql.org/docs/10/static/docguide-toolsets.html

[122] file_fdw: https://www.postgresql.org/docs/10/static/file-fdw.html

[123] postgres_fdw: https://www.postgresql.org/docs/10/static/postgres-fdw.html

[124] btree_gist: https://www.postgresql.org/docs/10/static/btree-gist.html

[125] btree_gin: https://www.postgresql.org/docs/10/static/btree-gin.html

[126] amcheck: https://www.postgresql.org/docs/10/static/amcheck.html

[127] pg_stat_statements: https://www.postgresql.org/docs/10/static/pgstatstatements.html

[128] cube: https://www.postgresql.org/docs/10/static/cube.html

[129] pg_buffercache: https://www.postgresql.org/docs/10/static/pgbuffercache.html

[130] pgstattuple: https://www.postgresql.org/docs/10/static/pgstattuple.html

[131] pageinspect: https://www.postgresql.org/docs/10/static/pageinspect.html

[132] Источник: https://habrahabr.ru/post/339520/