Расширения PostgreSQL к БД Azure для PostgreSQL — гибкий сервер
ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для PostgreSQL — гибкий сервер
База данных Azure для PostgreSQL гибкий сервер предоставляет возможность расширения функциональности базы данных с помощью расширений. Расширения объединяют несколько связанных объектов SQL в одном пакете, который можно загрузить или удалить из базы данных с помощью команды. После загрузки в базу данных расширения работают как встроенные функции.
Как использовать расширения PostgreSQL
Перед установкой расширений на гибком сервере База данных Azure для PostgreSQL необходимо разрешить список этих расширений для использования.
В случае использования портала Azure выполните следующие действия:
- Выберите гибкий экземпляр сервера База данных Azure для PostgreSQL.
В случае использования Azure CLI:
Расширения списка разрешений можно разрешить с помощью команды набора параметров CLI.
az postgres flexible-server parameter set --resource-group <resource_group> --server-name <server> --subscription <subscription_id> --name azure.extensions --value <extension_name>,<extension_name>
Использование шаблона ARM: следующий пример расширений разрешенных списков dblink
, pg_buffercache
dict_xsyn
на сервере, имя которого :postgres-test-server
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"flexibleServers_name": {
"defaultValue": "postgres-test-server",
"type": "String"
},
"azure_extensions_set_value": {
"defaultValue": " dblink,dict_xsyn,pg_buffercache",
"type": "String"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.DBforPostgreSQL/flexibleServers/configurations",
"apiVersion": "2021-06-01",
"name": "[concat(parameters('flexibleServers_name'), '/azure.extensions')]",
"properties": {
"value": "[parameters('azure_extensions_set_value')]",
"source": "user-override"
}
}
]
}
shared_preload_libraries
— это параметр конфигурации сервера, который определяет, какие библиотеки необходимо загрузить при запуске гибкого сервера База данных Azure для PostgreSQL. Все библиотеки, использующие общую память, должны загружаться с помощью этого параметра. Если расширение необходимо добавить в общие библиотеки предварительной загрузки, выполните следующие действия.
В случае использования портала Azure выполните следующие действия:
- Выберите гибкий экземпляр сервера База данных Azure для PostgreSQL.
- В меню ресурсов в разделе "Параметры " выберите параметры сервера.
- Найдите параметр
shared_preload_libraries
. - Выберите библиотеки, которые вы хотите добавить.
:::image type="content" source="./media/concepts-extensions/shared-libraries.png" alt-text="Screenshot showing Azure Database for PostgreSQL -setting shared preload libraries parameter setting for extensions installation." lightbox="./media/concepts-extensions/shared-libraries.png":::
```Using [Azure CLI](/cli/azure/):
You can set `shared_preload_libraries` via CLI [parameter set](/cli/azure/postgres/flexible-server/parameter?view=azure-cli-latest&preserve-view=true) command.
```azurecli
az postgres flexible-server parameter set --resource-group <resource_group> --server-name <server> --subscription <subscription_id> --name shared_preload_libraries --value <extension_name>,<extension_name>
Создание расширения
После того как расширения разрешены и загружены, они должны быть установлены в каждой базе данных, в которой планируется их использовать.
- Пользователь должен быть членом
azure_pg_admin
роли для создания расширения. Участникazure_pg_admin
роли может предоставить права другим пользователям для создания расширений. - Чтобы установить конкретное расширение, выполните команду CREATE EXTENSION. Эта команда загружает упакованные объекты в базу данных.
Примечание.
Сторонние расширения, предлагаемые в База данных Azure для PostgreSQL гибком сервере, открытый код лицензированным кодом. В настоящее время мы не предлагаем сторонние расширения или версии расширений с моделями корпоративного или частного лицензирования.
База данных Azure для PostgreSQL гибкий экземпляр сервера поддерживает подмножество ключевых расширений PostgreSQL, как указано в следующей таблице. Эти сведения также можно получить, выполнив SHOW azure.extensions;
. Расширения, не перечисленные в этом документе, не поддерживаются на гибком сервере База данных Azure для PostgreSQL. Вы не можете создать или загрузить собственное расширение в База данных Azure для PostgreSQL гибком сервере.
Версии расширения
Следующие расширения доступны на гибком сервере База данных Azure для PostgreSQL:
Примечание.
Расширения в следующей таблице с ✔️ меткой требуют включения соответствующих библиотек в параметре shared_preload_libraries
сервера.
Имя расширения | Description | PostgreSQL 17 | PostgreSQL 16 | PostgreSQL 15 | PostgreSQL 14 | PostgreSQL 13 | PostgreSQL 12 | PostgreSQL 11 |
---|---|---|---|---|---|---|---|---|
address_standardizer | Используются для анализа адреса в составных элементы. Преимущественно используется для поддержки шага нормализации геокодирования адресов. | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
address_standardizer_data_us | пример набора данных для стандартизации адресов США | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
возраст (предварительная версия) | Предоставляет возможности базы данных graph | Н/П | 1.5.0 ✔️ | 1.5.0 ✔️ | 1.5.0 ✔️ | 1.5.0 ✔️ | Неприменимо | Неприменимо |
amcheck | Функции для проверки целостности связей | 1.4 | 1,3 | 1,3 | 1,3 | 1.2 | 1.2 | 1,1 |
anon (предварительная версия) | Средства анонимизации данных | 1.3.2 ✔️ | 1.3.2 ✔️ | 1.3.2 ✔️ | 1.3.2 ✔️ | 1.3.2 ✔️ | 1.3.2 ✔️ | 1.3.2 ✔️ |
azure_ai | Интеграция служб ИИ и машинного обучения Azure для PostgreSQL | Н/П | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | Н/П |
azure_storage | Интеграция Azure для PostgreSQL | Н/П | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ | Н/П |
bloom | Метод доступа Блум — индекс на основе файла подписи | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
btree_gin | Поддержка индексирования распространенных типов данных в GIN | 1,3 | 1,3 | 1,3 | 1,3 | 1,3 | 1,3 | 1,3 |
btree_gist | Поддержка индексирования распространенных типов данных в GiST | 1,7 | 1,7 | 1,7 | 1,6 | 1.5 | 1.5 | 1.5 |
citext | Тип данных для строк символов без учета регистра | 1,6 | 1,6 | 1,6 | 1,6 | 1,6 | 1,6 | 1.5 |
cube | Тип данных для многомерных кубов | 1.5 | 1.5 | 1.5 | 1.5 | 1.4 | 1.4 | 1.4 |
dblink | Подключение к другим базам данных PostgreSQL из базы данных | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
dict_int | Шаблон словаря поиска текста для целых чисел | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
dict_xsyn | Шаблон словаря поиска текста для расширенной обработки синонимов | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
earthdistance | Вычисление большого круга расстояний на поверхности Земли | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 |
fuzzystrmatch | Определение сходства и расстояния между строками | 1.2 | 1.2 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 |
hstore | Тип данных для хранения пар (ключ, значение) | 1.8 | 1.8 | 1.8 | 1.8 | 1,7 | 1,6 | 1.5 |
hypopg | гипотетические индексы для PostgreSQL | 1.4.0 | 1.4.0 | 1.4.0 | 1.4.0 | 1.4.0 | 1.4.0 | 1.4.0 |
intagg | Целочисленный агрегатор и перечислитель (устаревший) | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 |
intarray | Функции, операторы и индексы поддерживают 1-D массивов целых чисел | 1.5 | 1.5 | 1.5 | 1.5 | 1,3 | 1.2 | 1.2 |
isn | Типы данных для международных стандартов нумерирования продуктов | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
lo | Обслуживание больших объектов | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 |
login_hook | Login_hook — перехватчик для выполнения login_hook.login() во время входа | 1.5 | 1.5 | 1.4 | 1.4 | 1.4 | 1.4 | 1.4 |
ltree | Тип данных для иерархических структур, таких как дерево | 1,3 | 1.2 | 1.2 | 1.2 | 1.2 | 1,1 | 1,1 |
oracle_fdw | Внешний оболочка данных для баз данных Oracle | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | Н/П |
orafce | Функции и операторы, эмулирующие подмножество функций и пакетов из Oracle RDBMS | 4,9 | 4.4. | 3.24 | 3,18 | 3,18 | 3,18 | 3,7 |
pageinspect | Проверка содержимого страниц базы данных на низком уровне | 1.12 | 1.12 | 1.11 | 1,9 | 1.8 | 1,7 | 1,7 |
pgaudit | Предоставляет функции аудита | 16.0 ✔️ | 16.0 ✔️ | 1.7 ✔️ | 1.6.2 ✔️ | 1.5 ✔️ | 1.4.3 ✔️ | 1.3.2 ✔️ |
pg_buffercache | Проверка общего кэша буфера | 1.5 | 1.4 | 1,3 | 1,3 | 1,3 | 1,3 | 1,3 |
pg_cron | Планировщик заданий для PostgreSQL | 1.6 ✔️ | 1.6 ✔️ | 1.6 ✔️ | 1.6 ✔️ | 1.6 ✔️ | 1.6 ✔️ | 1.4-1 ✔️ |
pgcrypto | Функции шифрования | 1,3 | 1,3 | 1,3 | 1,3 | 1,3 | 1,3 | 1,3 |
pg_freespacemap | Проверка карты свободного пространства (FSM) | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
pg_hint_plan | Позволяет настраивать планы выполнения PostgreSQL с помощью так называемых подсказок в комментариях SQL. | 1.7.0 ✔️ | 1.6.0 ✔️ | 1.5 ✔️ | 1.4 ✔️ | 1.3.7 ✔️ | 1.3.7 ✔️ | 1.3.7 ✔️ |
pglogical | Логическая репликация PostgreSQL | 2.4.5 ✔️ | 2.4.4 ✔️ | 2.4.2 ✔️ | 2.4.1 ✔️ | 2.4.1 ✔️ | 2.4.1 ✔️ | 2.4.1 ✔️ |
pg_partman | Расширение для управления секционированными таблицами по времени или идентификатору | 5.0.1 ✔️ | 5.0.1 ✔️ | 4.7.1 ✔️ | 4.6.1 ✔️ | 4.5.0 ✔️ | 4.5.0 ✔️ | 4.5.0 ✔️ |
pg_prewarm | Предваренные данные о отношениях | 1.2 ✔️ | 1.2 ✔️ | 1.2 ✔️ | 1.2 ✔️ | 1.2 ✔️ | 1.2 ✔️ | 1.2 ✔️ |
pg_repack | Реорганизация таблиц в базах данных PostgreSQL с минимальными блокировками | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 | 1.4.7 |
pgrouting | Расширение PgRouting | Неприменимо | Неприменимо | 3.5.0 | 3.3.0 | 3.3.0 | 3.3.0 | 3.3.0 |
pgrowlocks | Отображение сведений о блокировке на уровне строк | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
pg_squeeze | Средство для удаления неиспользуемого пространства из отношения. | 1.7 ✔️ | 1.6 ✔️ | 1.6 ✔️ | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ | 1.5 ✔️ |
pg_stat_statements | Отслеживание статистики выполнения всех выполняемых инструкций SQL | 1.11 ✔️ | 1.10 ✔️ | 1.10 ✔️ | 1.9 ✔️ | 1.8 ✔️ | 1.7 ✔️ | 1.6 ✔️ |
pgstattuple | Отображение статистики на уровне кортежа | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 | 1.5 |
pg_trgm | Измерение сходства текста и поиск индексов на основе триграмм | 1,6 | 1,6 | 1,6 | 1,6 | 1.5 | 1.4 | 1.4 |
pg_visibility | Просмотр сведений о видимости (виртуальная машина) и сведений о видимости на уровне страницы | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
plpgsql | процедурный язык PL/pgSQL | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
plv8 | доверенный процедурный язык PL/JavaScript (версия 8) | 3.1.7 | 3.1.7 | 3.1.7 | 3.0.0 | 3.0.0 | 3.0.0 | 3.0.0 |
postgis | Геометрия и географические пространственные типы и функции PostGIS | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_raster | растровые типы и функции PostGIS | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_sfcgal | функции PostGIS SFCGAL | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_tiger_geocoder | PostGIS Tiger для геокодирования и инвертированного геокодирования | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgis_topology | пространственные типы и функции топологии PostGIS | 3.5.0 | 3.3.3 | 3.3.1 | 3.2.3 | 3.2.3 | 3.2.3 | 3.2.3 |
postgres_fdw | Оболочка внешних данных для удаленных серверов PostgreSQL | 1,1 | 1,1 | 1,1 | 1,1 | 1.0 | 1.0 | 1.0 |
postgres_protobuf | Буферы протокола для PostgreSQL | 0,2 | 0,2 | 0,2 | 0,2 | 0,2 | 0,2 | Н/П |
semver | Тип данных семантической версии | 0.32.1 | 0.32.1 | 0.32.0 | 0.32.0 | 0.32.0 | 0.32.0 | 0.32.0 |
session_variable | Session_variable — регистрация и обработка переменных сеанса и констант | 3,3 | 3,3 | 3,3 | 3,3 | 3,3 | 3,3 | 3,3 |
sslinfo | Сведения о SSL-сертификатах | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 | 1.2 |
tablefunc | Функции, которые управляют целыми таблицами, включая перекрестную таблицу | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
tds_fdw | Оболочка внешних данных для запроса базы данных TDS (Sybase или Microsoft SQL Server) | 2.0.3 | 2.0.3 | 2.0.3 | 2.0.3 | 2.0.3 | 2.0.3 | 2.0.3 |
timescaledb | включает масштабируемые вставки и сложные запросы для данных временных рядов | Н/П | 2.13.0 ✔️ | 2.10.0 ✔️ | 2.10.0 ✔️ | 2.10.0 ✔️ | 2.10.0 ✔️ | 1.7.4 ✔️ |
tsm_system_rows | метод TABLESAMPLE, который принимает число строк в качестве ограничения | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
tsm_system_time | метод TABLESAMPLE, который принимает время в миллисекундах в качестве ограничения | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 | 1.0 |
unaccent | Словарь поиска текста, который удаляет акценты | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 |
uuid-ossp | Создает идентификаторы UUID. | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 | 1,1 |
vector | Методы доступа к векторным данным и ivfflat и hnsw | 0.7.0 | 0.7.0 | 0.7.0 | 0.7.0 | 0.7.0 | 0.7.0 | 0.5.1 |
Обновление расширений PostgreSQL
Обновление расширений базы данных на месте разрешено с помощью простой команды. Эта функция позволяет клиентам автоматически обновлять сторонние расширения до последних версий, сохраняя текущие и безопасные системы без ручной работы.
Обновление расширений
Чтобы обновить установленное расширение до последней доступной версии, поддерживаемой Azure, используйте следующую команду SQL:
ALTER EXTENSION <extension_name> UPDATE;
Эта команда упрощает управление расширениями базы данных, позволяя пользователям вручную обновляться до последней версии, утвержденной Azure, повышая совместимость и безопасность.
Ограничения
Хотя обновление расширений является простым, существуют некоторые ограничения:
- Выбор определенной версии: команда не поддерживает обновление до промежуточных версий расширения. Он всегда обновляется до последней доступной версии.
- Понижение: не поддерживает понижение уровня расширения до предыдущей версии. Если требуется понижение, может потребоваться помощь в поддержке и зависит от доступности предыдущей версии.
Установленные расширения
Чтобы вывести список расширений, установленных в настоящее время в базе данных, используйте следующую команду SQL:
SELECT * FROM pg_extension;
Доступные расширения и их версии
Чтобы проверить, какие версии расширения доступны для текущей установки базы данных, выполните запрос к представлению pg_available_extensions
системного каталога. Например, чтобы определить версию, доступную для azure_ai
расширения, выполните следующую команду:
SELECT * FROM pg_available_extensions WHERE name = 'azure_ai';
Эти команды предоставляют необходимые аналитические сведения о конфигурациях расширений базы данных, помогая эффективно и безопасно поддерживать системы. Включив простые обновления в последние версии расширений, База данных Azure для PostgreSQL продолжает поддерживать надежное, безопасное и эффективное управление приложениями базы данных.
Рекомендации, связанные с гибким сервером База данных Azure для PostgreSQL
Ниже приведен список поддерживаемых расширений, требующих некоторых конкретных рекомендаций при использовании в службе База данных Azure для PostgreSQL гибкого сервера. Список отсортирован по алфавиту.
dblink
dblink позволяет подключаться из одного База данных Azure для PostgreSQL гибкого экземпляра сервера к другому или к другой базе данных на том же сервере. База данных Azure для PostgreSQL гибкий сервер поддерживает как входящие, так и исходящие подключения к любому серверу PostgreSQL. Отправляющий сервер должен разрешать исходящие подключения к принимающему серверу. Аналогично, принимающий сервер должен разрешать подключения с отправляющего сервера.
Мы рекомендуем развернуть серверы с интеграцией виртуальной сети, если планируется использовать это расширение. По умолчанию интеграция виртуальной сети позволяет подключаться между серверами в виртуальной сети. Вы также можете использовать группы безопасности сети виртуальной сети для настройки доступа.
pg_buffercache
pg_buffercache
можно использовать для изучения содержимого shared_buffers. С помощью этого расширения можно определить, кэшируется ли определенное отношение (в shared_buffers
). Это расширение поможет устранить проблемы с производительностью (кэширование связанных проблем с производительностью).
Это расширение интегрировано с основной установкой PostgreSQL и легко установить.
CREATE EXTENSION pg_buffercache;
pg_cron
pg_cron — это простой планировщик заданий на основе cron для PostgreSQL, который работает в базе данных как расширение. Расширение pg_cron
можно использовать для выполнения запланированных задач обслуживания в базе данных PostgreSQL. Например, можно запустить периодическую очистку таблицы или удалить старые задания данных.
pg_cron
может выполнять несколько заданий параллельно, но в каждый момент времени выполняется не более одного экземпляра задания. Если второй запуск должен начаться до завершения первого, второй запуск помещается в очередь и запускается сразу после завершения первого выполнения. Таким образом, это гарантирует, что задания выполняются ровно столько раз, сколько запланировано, и не выполняются одновременно с собой.
Некоторые примеры:
Удаление старых данных в субботу в 3:30 утра (GMT).
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
Для запуска вакуума каждый день в базе данных postgres
по умолчанию в 10:00 утра (GMT).
SELECT cron.schedule('0 10 * * *', 'VACUUM');
Чтобы отменить отмену всех задач из pg_cron
.
SELECT cron.unschedule(jobid) FROM cron.job;
Просмотр всех заданий, запланированных в данный момент.pg_cron
SELECT * FROM cron.job;
Чтобы запускать вакуум каждый день в 10:00 (GMT) в базе данных testcron в azure_pg_admin учетной записи роли.
SELECT cron.schedule_in_database('VACUUM','0 10 * * * ','VACUUM','testcron',null,TRUE);
Примечание.
pg_cron расширение предварительно загружено shared_preload_libraries
для каждого База данных Azure для PostgreSQL гибкого экземпляра сервера внутри базы данных postgres, чтобы обеспечить возможность планирования заданий для выполнения в других базах данных в База данных Azure для PostgreSQL гибком экземпляре базы данных сервера без ущерба для безопасности. Однако по соображениям безопасности необходимо разрешить расширение списка pg_cron
и установить его с помощью команды CREATE EXTENSION .
Начиная с pg_cron
версии 1.4 можно использовать cron.schedule_in_database
и cron.alter_job
функции для планирования задания в определенной базе данных и обновления существующего расписания соответственно.
Некоторые примеры:
Удаление старых данных в субботу в 3:30 утра (GMT) в базе данных DBName.
SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
Примечание.
cron_schedule_in_database
функция позволяет использовать имя пользователя как необязательный параметр. Для задания имени пользователя значение, отличное от NULL, требуется привилегия суперпользователя PostgreSQL и не поддерживается в База данных Azure для PostgreSQL гибком сервере. В предыдущих примерах показано, как выполнить эту функцию с необязательным параметром имени пользователя или задать значение NULL, которое запускает задание в контексте планирования задания, которое должно иметь права azure_pg_admin роли.
Обновление или изменение имени базы данных для существующего расписания
SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
pg_failover_slots
Расширение слотов отработки отказа PG улучшает База данных Azure для PostgreSQL гибкий сервер при работе с логическими и высокодоступными серверами. Он эффективно решает проблему в стандартном обработчике PostgreSQL, который не сохраняет слоты логической репликации после отработки отказа. Сохранение этих слотов крайне важно, чтобы предотвратить приостановку репликации или несоответствие данных во время изменений роли сервера-источника, обеспечивая непрерывность работы и целостность данных.
Расширение упрощает процесс отработки отказа путем управления необходимой передачей, очисткой и синхронизацией слотов репликации, что обеспечивает простой переход во время изменений роли сервера. Расширение поддерживается для PostgreSQL версии 11–16.
Дополнительные сведения и способы использования расширения слотов отработки отказа PG можно найти на странице GitHub.
Включение pg_failover_slots
Чтобы включить расширение слотов отработки отказа PG для База данных Azure для PostgreSQL гибкого экземпляра сервера, необходимо изменить конфигурацию сервера, включив расширение в общие библиотеки предварительной загрузки сервера и настройка определенного параметра сервера. Вот как это делается:
- Добавьте
pg_failover_slots
в общие библиотеки предварительной загрузки сервера, обновивshared_preload_libraries
параметр. - Измените параметр
hot_standby_feedback
on
сервера на .
Любые изменения в параметре shared_preload_libraries
требуют, чтобы перезапуск сервера вступил в силу.
В случае использования портала Azure выполните следующие действия:
- Выберите гибкий экземпляр сервера База данных Azure для PostgreSQL.
- В меню ресурсов в разделе "Параметры " выберите параметры сервера.
shared_preload_libraries
Выполните поиск параметра и измените его значение, чтобы включитьpg_failover_slots
.- Выполните поиск параметра и задайте для нее
hot_standby_feedback
значениеon
. - Нажмите кнопку "Сохранить", чтобы сохранить изменения. Теперь у вас есть возможность сохранить и перезапустить. Выберите это, чтобы убедиться, что изменения вступили в силу, так как для изменения
shared_preload_libraries
требуется перезапуск сервера.
Выбрав "Сохранить и перезапустить", сервер автоматически перезагружается, применяя только что внесенные изменения. После возврата сервера расширение слотов отработки отказа PG включено и работает на основном База данных Azure для PostgreSQL гибком экземпляре сервера, готовом к обработке логических слотов репликации во время отработки отказа.
pg_hint_plan
pg_hint_plan
позволяет настраивать планы выполнения PostgreSQL с помощью так называемых "подсказок" в комментариях SQL, например:
/*+ SeqScan(a) */
pg_hint_plan
считывает фразы с указанием в комментариях специальной формы, заданной с помощью целевой инструкции SQL. Специальная форма начинается по последовательности символов "/*+" и заканчивается "*/". Фразы подсказки состоят из имени подсказки и следующих параметров, заключенных в скобки и разделенных пробелами. Новые строки для удобочитаемости могут разделять каждую фразу с указанием.
Пример:
/*+
HashJoin(a b)
SeqScan(a)
*/
SELECT *
FROM pgbench_branches b
JOIN pgbench_accounts an ON b.bid = a.bid
ORDER BY a.aid;
Предыдущий пример приводит к тому, что планировщик будет использовать результаты seq scan
таблицы a в сочетании с таблицей b в качестве .hash join
Чтобы установить pg_hint_plan, кроме того, чтобы разрешить его перечисление, как показано в использовании расширений PostgreSQL, необходимо включить его в общие библиотеки предварительной загрузки сервера. Чтобы изменение параметра shared_preload_libraries
вступило в силу, перезапустите сервер. Параметры можно изменить с помощью портала Azure или Azure CLI.
В случае использования портала Azure выполните следующие действия:
- Выберите гибкий экземпляр сервера База данных Azure для PostgreSQL.
- В меню ресурсов в разделе "Параметры " выберите параметры сервера.
shared_preload_libraries
Выполните поиск параметра и измените его значение, чтобы включитьpg_hint_plan
.- Нажмите кнопку "Сохранить", чтобы сохранить изменения. Теперь у вас есть возможность сохранить и перезапустить. Выберите это, чтобы убедиться, что изменения вступили в силу, так как для изменения
shared_preload_libraries
требуется перезапуск сервера. Теперь вы можете включить pg_hint_plan гибкой базы данных сервера База данных Azure для PostgreSQL. Подключитесь к базе данных заданий и выполните следующую команду:
CREATE EXTENSION pg_hint_plan;
pg_prewarm
Расширение pg_prewarm
загружает реляционные данные в кэш. Предварительная подготовка кэшей означает, что запросы быстрее отвечают при первом запуске после перезагрузки. Функция автоматической предварительной подготовки в настоящее время недоступна на гибком сервере База данных Azure для PostgreSQL.
pg_repack
Типичный вопрос, когда они сначала пытаются использовать это расширение: pg_repack расширение или исполняемый файл на стороне клиента, например psql или pg_dump?
Ответ на это заключается в том, что это на самом деле оба. pg_repack/lib содержит код расширения, включая артефакты схемы и SQL, которые он создает, и библиотека C, реализуя код нескольких этих функций. С другой стороны, pg_repack/bin хранит код клиентского приложения, который знает, как взаимодействовать с артефактами программирования, созданными расширением. Это клиентское приложение предназначено для упрощения взаимодействия с различными интерфейсами, предоставляемыми расширением на стороне сервера, путем предоставления пользователю некоторых параметров командной строки, которые проще понять. Клиентское приложение без расширения, созданного в базе данных, на которую он указывает, является бесполезным. Расширение на стороне сервера будет полностью функциональным, но пользователю потребуется понять сложный шаблон взаимодействия, состоящий из выполнения запросов для получения данных, используемых в качестве входных данных для функций, реализованных расширением.
Разрешение, запрещенное для перепаковки схемы
По состоянию на данный момент, из-за того, как мы предоставляем разрешения на схему перепаковки, созданную этим расширением, она поддерживается только для запуска pg_repack функциональных возможностей из контекста azure_pg_admin
.
Вы можете заметить, что если владелец таблицы, который не azure_pg_admin
является, пытается запустить pg_repack, они в конечном итоге получают ошибку, как показано ниже:
NOTICE: Setting up workers.conns
ERROR: pg_repack failed with error: ERROR: permission denied for schema repack
LINE 1: select repack.version(), repack.version_sql()
Чтобы избежать этой ошибки, убедитесь, что вы выполняете pg_repack из контекста azure_pg_admin
.
pg_stat_statements
Расширение pg_stat_statements предоставляет представление всех запросов, выполняемых в базе данных. Это полезно, чтобы понять, как выглядит производительность рабочей нагрузки запроса в рабочей системе.
Расширение pg_stat_statements предварительно загружено на shared_preload_libraries
каждый База данных Azure для PostgreSQL гибкий экземпляр сервера, чтобы обеспечить возможность отслеживания статистики выполнения инструкций SQL.
Однако по соображениям безопасности вам по-прежнему необходимо разрешить расширение pg_stat_statements спискаразрешений и установить его с помощью команды CREATE EXTENSION.
Параметр pg_stat_statements.track
, который управляет тем, какие инструкции учитываются расширением, по умолчанию имеет значение top
. Это означает, что все инструкции, выпущенные непосредственно клиентами, отслеживаются. Два других уровня отслеживания: none
и all
. Это значение настраивается как параметр сервера.
Существует компромисс между информацией о выполнении запроса, предоставляемой pg_stat_statements
, и воздействием на производительность сервера при регистрации каждой инструкции SQL. Если вы не используете pg_stat_statements
расширение, рекомендуется задать значение pg_stat_statements.track
none
. Некоторые сторонние службы мониторинга могут полагаться на pg_stat_statements
доставку аналитических сведений о производительности запросов, поэтому убедитесь, что это так для вас или нет.
postgres_fdw
postgres_fdw позволяет подключаться из одного База данных Azure для PostgreSQL гибкого экземпляра сервера к другому или к другой базе данных на том же сервере. База данных Azure для PostgreSQL гибкий сервер поддерживает как входящие, так и исходящие подключения к любому серверу PostgreSQL. Отправляющий сервер должен разрешать исходящие подключения к принимающему серверу. Аналогично, принимающий сервер должен разрешать подключения с отправляющего сервера.
Мы рекомендуем развернуть серверы с интеграцией виртуальной сети, если планируется использовать это расширение. По умолчанию интеграция виртуальной сети позволяет подключаться между серверами в виртуальной сети. Вы также можете использовать группы безопасности сети виртуальной сети для настройки доступа.
pgstattuple
При использовании расширения pgstattuple для получения статистики кортежей от объектов, хранимых в схеме pg_toast
в версиях Postgres 11–13, вы получите ошибку "разрешение отказано в схеме pg_toast".
Разрешение, отклоненное для pg_toast схемы
Клиенты, использующие PostgreSQL версии 11–13 в базе данных Azure для гибкого сервера, не могут использовать pgstattuple
расширение для объектов в схеме pg_toast
.
В PostgreSQL 16 и 17 роль автоматически предоставляетсяazure_pg_admin
, pg_read_all_data
позволяя pgstattuple
правильно работать. В PostgreSQL 14 и 15 клиенты могут вручную предоставить pg_read_all_data
роль для azure_pg_admin
достижения того же результата. Однако в PostgreSQL 11–13 pg_read_all_data
роль не существует.
Клиенты не могут напрямую предоставить необходимые разрешения. Если вам нужно иметь возможность выполнять pgstattuple
доступ к объектам в схемеpg_toast
, перейдите к созданию запроса поддержка Azure.
TimescaleDB
TimescaleDB — это база данных временных рядов, которая упакована в качестве расширения для PostgreSQL. TimescaleDB обеспечивает ориентированные на время аналитические функции, оптимизации и масштабирует Postgres для рабочих нагрузок временных рядов. Дополнительные сведения о TimescaleDB, зарегистрированном торговом знаке Timescale, Inc. База данных Azure для PostgreSQL гибким сервером, предоставляет выпуск TimescaleDB Apache-2.
Установка TimescaleDB
Чтобы установить TimescaleDB, кроме того, чтобы разрешить перечисление, как показано выше, необходимо включить его в общие библиотеки предварительной загрузки сервера. Чтобы изменение параметра shared_preload_libraries
вступило в силу, перезапустите сервер. Параметры можно изменить с помощью портала Azure или Azure CLI.
В случае использования портала Azure выполните следующие действия:
- Выберите гибкий экземпляр сервера База данных Azure для PostgreSQL.
- В меню ресурсов в разделе "Параметры " выберите параметры сервера.
shared_preload_libraries
Выполните поиск параметра и измените его значение, чтобы включитьTimescaleDB
.- Нажмите кнопку "Сохранить", чтобы сохранить изменения. Теперь у вас есть возможность сохранить и перезапустить. Выберите это, чтобы убедиться, что изменения вступили в силу, так как для изменения
shared_preload_libraries
требуется перезапуск сервера. Теперь вы можете включить TimescaleDB в гибкой базе данных сервера База данных Azure для PostgreSQL. Подключитесь к базе данных заданий и выполните следующую команду:
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
Совет
Если появится сообщение об ошибке, подтвердите перезапуск сервера после сохранения shared_preload_libraries.
Теперь можно создать гипертаблицу TimescaleDB с нуля или перенести существующие данные временных рядов в PostgreSQL.
Восстановление базы данных шкалы времени с помощью pg_dump и pg_restore
Чтобы восстановить базу данных timescale с помощью pg_dump и pg_restore, необходимо выполнить две вспомогательные процедуры в целевой базе данных: timescaledb_pre_restore()
и timescaledb_post restore()
.
Сначала подготовьте целевую базу данных:
--create the new database where you want to perform the restore
CREATE DATABASE tutorial;
\c tutorial --connect to the database
CREATE EXTENSION timescaledb;
SELECT timescaledb_pre_restore();
Теперь вы можете запустить pg_dump в исходной базе данных, а затем выполнить pg_restore. После восстановления выполните в восстановленной базе данных следующую команду:
SELECT timescaledb_post_restore();
Дополнительные сведения о методе восстановления с включенной базой данных Timescale см . в документации по шкале времени.
Восстановление базы данных timescale с помощью timescaledb-backup
При выполнении процедуры SELECT timescaledb_post_restore()
, указанной выше, могут быть отклонены разрешения на обновление флага timescaledb.restoring. Это связано с ограниченным разрешением ALTER DATABASE в облачных службах баз данных PaaS. В этом случае можно выполнить альтернативный метод с помощью timescaledb-backup
средства для резервного копирования и восстановления базы данных Timescale. Timescaledb-backup — это программа, позволяющая упростить создание дампа и восстановление базы данных TimescaleDB, сделать эти процедуры менее подверженными ошибкам и повысить их производительность.
Для этого необходимо выполнить следующие действия.
- Установите инструменты, как описано здесь
- Создание целевого База данных Azure для PostgreSQL гибкого экземпляра сервера и базы данных
- Включите расширение шкалы времени, как показано выше
- Предоставление
azure_pg_admin
роли пользователю, который будет использоваться ts-restore - Выполните команду ts-restore для восстановления базы данных
Дополнительные сведения об этих служебных программах см. здесь.
Расширения и обновление основных версий
База данных Azure для PostgreSQL гибкий сервер представил функцию обновления основной версии на месте, которая выполняет обновление База данных Azure для PostgreSQL гибкого экземпляра сервера с щелчком мыши. Обновление основной версии на месте упрощает процесс обновления гибкого сервера База данных Azure для PostgreSQL, минимизируя нарушение доступа пользователей и приложений к серверу. Обновление основной версии на месте не поддерживает определенные расширения, и существуют некоторые ограничения для обновления определенных расширений. Расширения anon, Apache AGE, dblink, orafce, pgaudit, postgres_fdw и Timescaledb не поддерживаются для всех База данных Azure для PostgreSQL гибких версий сервера при использовании функции обновления основной версии на месте.