Управление расширениями
Managed Service for PostgreSQL поддерживает многие стандартные расширения PostgreSQL и некоторые нестандартные. Полный список доступных расширений и их версий в зависимости от версии PostgreSQL приведен ниже.
Важно
В кластерах Managed Service for PostgreSQL нельзя управлять расширениями PostgreSQL с помощью команд SQL.
Подключение библиотек для расширений
Некоторые расширения требуют подключения библиотек общего пользования (shared libraries). Чтобы подключить библиотеку, при создании или изменении кластера укажите ее имя в параметре Shared preload libraries.
Managed Service for PostgreSQL поддерживает подключение библиотек:
auto_explain
— необходима для работы расширения auto_explain ;pgaudit
— необходима для работы расширения pgaudit ;pg_cron
— необходима для работы расширения pg_cron ;pg_hint_plan
— необходима для работы расширения pg_hint_plan ;pg_qualstats
— необходима для работы расширения pg_qualstats ;timescaledb
— необходима для использования расширения TimescaleDB ;anon
— необходима для использования расширения postgresql_anonymizer .
Важно
Подключение библиотеки общего пользования приведет к перезагрузке PostgreSQL на хосте-мастере.
Получить список установленных расширений
- Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера и выберите блок Базы данных.
- В колонке Расширения PostgreSQL будет отображаться список расширений, подключенных к каждой базе данных.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы получить список расширений для базы данных, выполните команду:
yc managed-postgresql database get <имя_БД> \
--cluster-name <имя_кластера>
Включенные расширения будут перечислены в списке extensions
.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Database.get и выполните запрос, например, с помощью cURL
:curl \ --request GET \ --header "Authorization: Bearer $IAM_TOKEN" \ --url 'https://mdb.api.cloud.yandex.net/managed-postgresql/v1/clusters/<идентификатор_кластера>/databases/<имя_БД>'
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя БД — со списком БД в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Список установленных расширений приведен в параметре
extensions
в выводе команды.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом DatabaseService/Get и выполните запрос, например, с помощью gRPCurl
:grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/database_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "database_name": "<имя_БД>" }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.DatabaseService.Get
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя БД — со списком БД в кластере.
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Список установленных расширений приведен в параметре
extensions
в выводе команды.
Изменить список установленных расширений
- Перейдите на страницу каталога и выберите сервис Managed Service for PostgreSQL.
- Нажмите на имя нужного кластера и выберите вкладку Базы данных.
- В строке с нужной базой данных нажмите значок
и выберите пункт Настроить. - Выберите необходимые расширения и нажмите кнопку Изменить.
Если у вас еще нет интерфейса командной строки Yandex Cloud, установите и инициализируйте его.
По умолчанию используется каталог, указанный в профиле CLI. Вы можете указать другой каталог с помощью параметра --folder-name
или --folder-id
.
Чтобы изменить расширения для базы данных, передайте их список в аргументе --extensions
команды CLI. При этом расширения, не упомянутые в списке, будут выключены.
yc managed-postgresql database update <имя_БД> \
--cluster-name <имя_кластера>
--extensions <имя_расширения>=<версия>,<имя_расширения>=<версия>...
Примечание
Версия расширения не учитывается при обработке команды — в качестве версии можно передать любую непустую строку.
-
Откройте актуальный конфигурационный файл Terraform с планом инфраструктуры.
О том, как создать такой файл, см. в разделе Создание кластера.
Полный список доступных для изменения полей конфигурации базы данных кластера Managed Service for PostgreSQL см. в документации провайдера Terraform
. -
Добавьте к описанию соответствующей базы данных кластера один или несколько блоков
extension
(по одному блоку на каждое расширение):resource "yandex_mdb_postgresql_database" "<имя_БД>" { ... extension { name = "<имя_расширения>" version = "<версия_расширения>" } ... }
-
Проверьте корректность настроек.
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Воспользуйтесь методом Database.update и выполните запрос, например, с помощью cURL
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
updateMask
(одной строкой через запятую).curl \ --request PATCH \ --header "Authorization: Bearer $IAM_TOKEN" \ --header "Content-Type: application/json" \ --url 'https://mdb.api.cloud.yandex.net/managed-postgresql/v1/clusters/<идентификатор_кластера>/databases/<имя_БД>' \ --data '{ "updateMask": "extensions", "extensions": [ { "name": "<имя_расширения>", "version": "<версия_расширения>" }, { <аналогичный_набор_настроек_для_расширения_2> }, { ... }, { <аналогичный_набор_настроек_для_расширения_N> } ] }'
Где:
-
updateMask
— перечень изменяемых параметров в одну строку через запятую.В данном случае передается только один параметр.
-
extensions
— массив расширений БД. Каждый объект соответствует отдельному расширению и имеет следующую структуру:name
— имя расширения;version
— версия расширения.
Указывайте имя и версию в соответствии со списком поддерживаемых расширений и утилит PostgreSQL.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя БД — со списком БД в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
-
Получите IAM-токен для аутентификации в API и поместите токен в переменную среды окружения:
export IAM_TOKEN="<IAM-токен>"
-
Клонируйте репозиторий cloudapi
:cd ~/ && git clone --depth=1 https://github.com/yandex-cloud/cloudapi
Далее предполагается, что содержимое репозитория находится в директории
~/cloudapi/
. -
Воспользуйтесь вызовом DatabaseService/Update и выполните запрос, например, с помощью gRPCurl
:Важно
Метод API переопределит все параметры изменяемого объекта, которые не были явно переданы в запросе, на значения по умолчанию. Чтобы избежать этого, перечислите настройки, которые вы хотите изменить, в параметре
update_mask
(в виде массива строкpaths[]
).Формат перечисления настроек
"update_mask": { "paths": [ "<настройка_1>", "<настройка_2>", ... "<настройка_N>" ] }
grpcurl \ -format json \ -import-path ~/cloudapi/ \ -import-path ~/cloudapi/third_party/googleapis/ \ -proto ~/cloudapi/yandex/cloud/mdb/postgresql/v1/database_service.proto \ -rpc-header "Authorization: Bearer $IAM_TOKEN" \ -d '{ "cluster_id": "<идентификатор_кластера>", "database_name": "<имя_БД>", "update_mask": { "paths": [ "extensions" ] }, "extensions": [ { "name": "<имя_расширения>", "version": "<версия_расширения>" }, { <аналогичный_набор_настроек_для_расширения_2> }, { ... }, { <аналогичный_набор_настроек_для_расширения_N> } ] }' \ mdb.api.cloud.yandex.net:443 \ yandex.cloud.mdb.postgresql.v1.DatabaseService.Update
Где:
-
update_mask
— перечень изменяемых параметров в виде массива строкpaths[]
.В данном случае передается только один параметр.
-
extensions
— массив расширений БД. Один элемент массива содержит настройки для одного расширения и имеет следующую структуру:name
— имя расширения;version
— версия расширения.
Указывайте имя и версию в соответствии со списком поддерживаемых расширений и утилит PostgreSQL.
Идентификатор кластера можно запросить со списком кластеров в каталоге, а имя БД — со списком БД в кластере.
-
-
Убедитесь, что запрос был выполнен успешно, изучив ответ сервера.
Поддерживаемые расширения и утилиты PostgreSQL
Расширение \ Версия PostgreSQL |
11 |
12 |
13 |
14 |
15 |
16 |
Содержит функции для нормализации почтовых адресов, переданных в виде строки. |
2.5.2 |
3.0.0 |
3.1.4 |
3.1.4 |
3.3.2 |
3.4.0 |
Содержит правила нормализации почтовых адресов США и Канады для расширения |
2.5.2 |
3.0.0 |
3.1.4 |
3.1.4 |
3.3.2 |
3.4.0 |
Содержит функции проверки логической согласованности реляционной структуры баз данных. Для использования расширения необходима роль |
1.1 |
1.2 |
1.2 |
1.3 |
1.3 |
1.3 |
Содержит функцию
|
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
Добавляет доступ к индексам баз данных на основе фильтров Блума |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
Содержит примеры классов оператора GIN (Generalized Inverted Index, обобщенный инвертированный индекс), используемого для обратного поиска. |
1.3 |
1.3 |
1.3 |
1.3 |
1.3 |
1.3 |
Содержит классы оператора GiST (Generalized Search Tree, обобщенное дерево поиска). В отличие от индексов B-tree, GiST поддерживает операторы |
1.5 |
1.5 |
1.5 |
1.6 |
1.7 |
1.7 |
Содержит тип данных |
1.5 |
1.6 |
1.6 |
1.6 |
1.6 |
1.6 |
Добавляет поддержку Foreign Data Wrapper |
1.3 |
1.3 |
1.3 |
- |
1.4 |
- |
Содержит тип данных |
1.4 |
1.4 |
1.4 |
1.5 |
1.5 |
1.5 |
Добавляет поддержку подключения к другим базам данных PostgreSQL из текущей сессии. Для использования расширения необходима роль |
1.2 |
1.2 |
1.2 |
1.2 |
1.2 |
1.2 |
Содержит пример дополнительного шаблона словаря для полнотекстового поиска. Использование шаблона позволяет избежать разрастания списка уникальных слов и увеличивает скорость поиска. Для полнотекстового поиска помимо расширения также доступны словари от Hunspell. |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
Содержит пример дополнительного шаблона словаря синонимов (Extended Synonym Dictionary) для полнотекстового поиска: при поиске слова будут найдены также все его синонимы. Для полнотекстового поиска помимо расширения также доступны словари от Hunspell. |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
Содержит модуль для вычисления расстояний между точками на поверхности Земли. Вычисление расстояния производится двумя способами:
|
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
Содержит функции, используемые для определения сходства и различия строк. |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
1.2 |
Содержит тип |
1.5 |
1.6 |
1.7 |
1.8 |
1.8 |
1.8 |
Содержит виртуальные индексы. Они позволяют с минимальными затратами ресурсов выяснить, будет ли PostgreSQL использовать реальные индексы при обработке проблемных запросов. |
1.3.1 |
1.3.1 |
1.3.1 |
1.3.1 |
1.3.1 |
1.4.0 |
Содержит функции и операторы для работы с массивами целых чисел, в которых нет пустых ( |
1.2 |
1.2 |
1.3 |
1.5 |
1.5 |
1.5 |
Содержит типы данных для международных стандартов нумерации продукции EAN13, UPC, ISBN, ISMN и ISSN. Проверка и формирование номеров осуществляется по заданному списку префиксов. |
1.2 |
1.2 |
1.2 |
1.2 |
1.2 |
1.2 |
Добавляет поддержку языка JsQuery, используемого для работы с данными типа |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
Содержит тип данных |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
Содержит тип данных |
1.1 |
1.1 |
1.2 |
1.2 |
1.2 |
1.2 |
Содержит функцию |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
Добавляет поддержку Foreign Data Wrapper Для использования расширения необходима роль |
1.2 |
1.2 |
1.2 |
1.2 |
1.2 |
1.2 |
Добавляет функции и операторы, которые эмулируют набор функций и пакетов БД Oracle. |
3.18 |
3.18 |
3.18 |
3.18 |
3.25 |
4.6 |
Добавляет функции мониторинга общего буферного кеша. Для использования расширения необходима роль |
1.3 |
1.3 |
1.3 |
1.3 |
1.3 |
1.4 |
Позволяет добавлять в базу данных задачи по расписанию и выполнять SQL-запросы непосредственно из задачи. Требует подключения библиотеки общего пользования Для использования расширения необходима роль Подключение расширения приводит к перезагрузке всех хостов. Подробнее см. в разделе Использование pg_cron. |
1.4.1 |
1.4.1 |
1.4.1 |
1.4.1 |
1.4.1 |
1.5 |
Содержит функции для управления планировщиком PostgreSQL. Требует подключения библиотеки общего пользования |
1.3.4 |
1.3.5 |
1.3.7 |
1.4 |
- |
1.6.0 |
Добавляет расширенные возможности по партицированию таблиц, в том числе на основе времени или последовательности. |
4.0.0 |
4.2.0 |
4.4.0 |
4.6.0 |
4.7.0 |
4.7.4 |
Добавляет возможность сбора статистики по предикатам в выражениях Требует подключения библиотеки общего пользования |
2.0.3 |
2.0.3 |
2.0.3 |
2.0.3 |
2.0.4 |
2.1.0 |
Позволяет загружать данные отношений в кеш операционной системы или в кеш буферов PostgreSQL. |
1.2 |
1.2 |
1.2 |
1.2 |
1.2 |
1.2 |
Содержит функции для удаления раздувания (bloat) из таблиц и индексов. В отличие от Для использования расширения необходима роль |
1.4.6 |
1.4.6 |
1.4.6 |
1.4.7 |
1.4.8 |
1.4.8 |
Добавляет возможность сбора статистики по операциям чтения и записи, выполненным на уровне файловой системы. Требует включения расширения Для использования расширения необходима роль |
2.1.1 |
2.1.1 |
2.1.3 |
2.2.0 |
2.2.1 |
2.2.1 |
Добавляет возможности отслеживания планирования и сбора статистики выполнения всех SQL-запросов, запущенных в кластере. Для использования расширения необходима роль |
1.6 |
1.7 |
1.8 |
1.9 |
1.10 |
1.10 |
Позволяет создавать логический слот репликации в прошлом. |
1.0 |
1.0 |
1.0 |
1.0 |
1.1 |
1.1.1 |
Содержит инструменты для быстрого поиска похожих строк на основе сопоставления триграмм. |
1.4 |
1.4 |
1.5 |
1.6 |
1.6 |
1.6 |
Предоставляет дополнительные инструменты для логирования и повышает возможности аудита. Требует подключения библиотеки общего пользования Подробнее см. в разделе Использование pgaudit. |
1.0.0 |
1.0.0 |
1.0.0 |
1.0.0 |
1.7 |
16.0 |
Предоставляет криптографические функции для PostgreSQL. Подробнее см. в разделе Использование pgcrypto. |
1.3 |
1.3 |
1.3 |
1.3 |
1.3 |
1.3 |
Добавляет поддержку потоковой логической репликации с использованием механизма публикации/подписки. |
2.4.1 |
2.4.1 |
2.4.1 |
2.4.1 |
- |
2.4.3 |
Содержит функции для геопространственной маршрутизации базы данных PostGIS |
2.6.2 |
2.6.2 |
3.0.2 |
3.3.0 |
3.4.1 |
3.5.0 |
Содержит функцию |
1.2 |
1.2 |
1.2 |
1.2 |
1.2 |
1.2 |
Содержит функции для получения статистики на уровне кортежей. Для использования расширения необходима роль |
1.5 |
1.5 |
1.5 |
1.5 |
1.5 |
1.5 |
Добавляет поиск векторного подобия. |
0.2.5 |
0.2.5 |
0.2.5 |
0.2.5 |
0.3.2 |
0.5.1 |
Добавляет поддержку процедурного языка основе JavaScript и движка V8. |
3.0.0 |
3.0.0 |
3.0.0 |
3.0.0 |
- |
3.2.0 |
Добавляет возможности хранения и обработки объектов геоинформационных систем (ГИС) в базах данных PostgreSQL. |
2.5.2 |
3.0.0 |
3.1.4 |
3.1.4 |
3.3.2 |
3.4.0 |
Содержит функции для геокодирования на основе данных в формате TIGER |
2.5.2 |
3.0.0 |
3.1.4 |
3.1.4 |
3.3.2 |
3.4.0 |
Содержит типы данных и функции расширения |
2.5.2 |
3.0.0 |
3.1.4 |
3.1.4 |
3.3.2 |
3.4.0 |
Добавляет поддержку Foreign Data Wrapper Для использования расширения необходима роль |
1.0 |
1.0 |
1.0 |
1.1 |
1.1 |
1.1 |
Позволяет замаскировать или заменить данные в базе данных PostgreSQL. Требует подключения библиотеки общего пользования Для использования расширения необходима роль |
- |
- |
- |
- |
1.3.2 |
1.3.2 |
Добавляет метод доступа для работы с индексами |
1.3 |
1.3 |
1.3 |
1.3 |
1.3 |
1.3 |
Содержит тип данных |
1.3 |
1.3 |
1.3 |
1.4 |
1.4 |
1.4 |
Содержит набор функций для определения сходства массивов. |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
Содержит набор функций, возвращающих таблицы (наборы строк). |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
1.0 |
Добавляет возможности автоматического партицирования таблиц по времени и пространству (ключу партицирования), сохраняя при этом стандартный интерфейс PostgreSQL для работы с данными. Это позволяет масштабировать PostgreSQL для обработки временных рядов. Требует подключения библиотеки общего пользования В сервис устанавливается издание TimescaleDB Apache 2 Edition. Оно имеет ограниченную функциональность по сравнению с TimescaleDB Community Edition. Изменить издание нельзя. Подробнее об ограничениях см. в документации TimescaleDB |
2.3.1 |
2.4.2 |
2.5.2 |
2.6.1 |
2.9.0 |
2.13.0-dev |
Содержит словарь для поиска текста без учета диакритических знаков. |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
Содержит функции для генерации UUID по стандартным алгоритмам. |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
Добавляет поддержку запросов XPath и языка XSLT. |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
1.1 |
Утилита pgcompacttable
Синтаксис использования:
./bin/pgcompacttable \
-h c-<идентификатор_кластера>.rw.mdb.yandexcloud.net \
-p 6432 \
-U <имя_пользователя> \
-W <пароль> \
-d <имя_БД> \
-n <имя_схемы> \
-t <имя_таблицы>
Требует включения расширения pgstattuple
.
Для использования утилиты необходима роль mdb_admin
.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc