Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются специальные рекомендации по использованию определенных расширений или модулей в База данных Azure для PostgreSQL гибком сервере.
Общие рекомендации по расширению
Чтобы использовать расширение в База данных Azure для PostgreSQL гибком сервере, необходимо:
-
Разрешить расширение. Если вы не разрешите это расширение, любая попытка выполнить
CREATE EXTENSION,ALTER EXTENSION,DROP EXTENSIONилиCOMMENT ON EXTENSIONзавершится ошибкой, указывающей на то, что указанное расширение не разрешено. - Если расширение развертывает общую двоичную библиотеку, требующую выделения и доступа к общей памяти, и необходимо загрузить при запуске сервера, следуйте инструкциям, приведенным в библиотеках загрузки.
- Создайте расширение в базах данных, где требуется расширение для развертывания объектов SQL, распределенных с этим расширением.
- Отключение расширения. Если вы хотите удалить из базы данных все объекты SQL, распределенные этим расширением.
- Обновление расширений для обновления до последней версии всех артефактов SQL, развернутых уже установленным расширением.
- Просмотр установленных расширений и их соответствующих версий.
Если при выполнении CREATE EXTENSIONALTER EXTENSIONDROP EXTENSIONкоманд или COMMENT ON EXTENSION команд на База данных Azure для PostgreSQL гибком сервере возникает какая-либо ошибка, просмотрите список возможных ошибок и причину каждой ошибки.
Общие рекомендации по модулям
Чтобы использовать модуль на гибком сервере База данных Azure для PostgreSQL, добавьте его в параметр shared_preload_libraries, как описано в разделе загрузка библиотек.
Модули не нужно добавлять в список разрешенных. Это эксклюзивное требование для расширений.
Расширения с учетом особенностей
В следующем списке перечислены все поддерживаемые расширения, требующие конкретных рекомендаций при использовании в База данных Azure для PostgreSQL гибком сервере:
AGEdblinkpg_buffercachepg_cronpg_hint_planpg_repackpg_stat_statementspgcryptopostgres_fdwpgstattupletimescaledb
AGE
Расширение Apache AGE — это расширение графа для PostgreSQL, поддерживаемое Базой данных Azure для PostgreSQL. Он предоставляет функции базы данных графа, поддержку запросов открытых шифров и возможность выполнять сложные запросы на данные графа, хранящиеся в PostgreSQL. Apache AGE — это проект с открытым исходным кодом, выпущенный под лицензией Apache 2.0.
Установка AGE
Чтобы использовать AGE, убедитесь, что вы разрешаете расширение , загружаете ее библиотеку и устанавливаете расширение в базе данных, в которой планируется использовать ее функциональные возможности.
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 может выполнять несколько заданий параллельно, но выполняется не более одного экземпляра задания одновременно. Если второй запуск должен начаться до завершения первого, второй запуск помещается в очередь и запускается сразу после завершения первого выполнения. Таким образом, это гарантирует, что задания выполняются ровно столько раз, сколько запланировано, и не выполняются в одно и то же время.
Убедитесь, что значение, для которого shared_preload_libraries задано, включает в себя pg_cron. Это расширение не поддерживает загрузку библиотеки в качестве эффекта выполнения CREATE EXTENSION. Любая попытка запустить CREATE EXTENSION, если расширение не было добавлено в shared_preload_libraries, или сервер не был перезапущен после его добавления, приводит к ошибке, текст которой содержит pg_cron can only be loaded via shared_preload_libraries, и содержит указание Add pg_cron to the shared_preload_libraries configuration variable in postgresql.conf.
Чтобы использовать pg_cron, убедитесь, что вы загружаете разделяемую библиотеку при запуске сервера, она включена в список разрешённых и установлена в любой базе данных, чтобы можно было взаимодействовать с её функциональностью, используя артефакты SQL, которые она создаёт.
Examples
Удаление старых данных в субботу в 3:30 утра (GMT).
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);Чтобы запустить вакуум каждый день в 10:00 (GMT) в базе данных
postgresпо умолчанию.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базе данных.SELECT cron.schedule_in_database('VACUUM','0 10 * * *', 'VACUUM', 'testcron', null, TRUE);
Дополнительные примеры
Начиная с pg_cron версии 1.4 можно использовать cron.schedule_in_database и cron.alter_job функции для планирования задания в определенной базе данных и обновления существующего расписания соответственно.
Функция cron_schedule_in_database позволяет использовать имя пользователя как необязательный параметр. Установка имени пользователя в значение, отличное от NULL, требует привилегий суперпользователя PostgreSQL и не поддерживается в База данных Azure для PostgreSQL Flexible Server. В предыдущих примерах показано выполнение этой функции с необязательным параметром имени пользователя, который опущен или задан как NULL, что запускает задание в контексте пользователя, планирующего задание, который должен иметь azure_pg_admin привилегии роли.
Чтобы удалить старые данные в субботу в 3:30 утра (GMT) в базе данных DBName, выполните следующие действия:
SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');Обновление или изменение имени базы данных для существующего расписания
SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');
pg_hint_plan
Расширение pg_hint_plan позволяет настраивать планы выполнения PostgreSQL с помощью подсказок в комментариях SQL, таких как:
/*+ SeqScan(a) */
Расширение pg_hint_plan считывает подсказки из комментария специальной формы, заданной с целевым оператором SQL. Конкретная форма начинается с последовательности символов /*+ и заканчивается */. Фразы подсказки состоят из имен подсказок и следующих параметров, заключенных в скобки и разделенных пробелами. Новые строки для удобочитаемости могут разделять каждую подсказку.
Example:
/*+
HashJoin(a b)
SeqScan(a)
*/
SELECT *
FROM pgbench_branches b
JOIN pgbench_accounts a ON b.bid = a.bid
ORDER BY a.aid;
В предыдущем примере планировщик использует результаты операции seqscan над таблицей a для объединения с таблицей b в рамках hashjoin.
Чтобы использовать расширение pg_hint_plan, убедитесь, что вы добавите расширение в список разрешённых, загрузите его библиотеку и установите расширение в базе данных, где вы планируете использовать его функциональность.
pg_repack
Пользователи, впервые использующие расширение pg_repack, обычно задают такой вопрос: pg_repack — это расширение или клиентское исполняемое приложение, как psql или pg_dump?
pg_repack на самом деле и то и другое.
pg_repack/lib содержит код расширения, включая созданную схему и артефакты SQL, а библиотека C реализует код нескольких этих функций.
С другой стороны, pg_repack/bin имеет код клиентского приложения, который знает, как взаимодействовать с элементами программирования, реализованными в расширении. Это клиентское приложение призвано упростить взаимодействие с различными интерфейсами, которые отображаются расширением на стороне сервера. Он предлагает пользователю некоторые параметры командной строки, которые проще понять. Клиентское приложение не используется без расширения, созданного в базе данных, на которую он указывает. Расширение на стороне сервера полностью функционально, но требует, чтобы пользователь понимал сложный шаблон взаимодействия. Этот шаблон состоит из выполнения запросов для получения данных, которые используются в качестве входных данных для функций, реализованных расширением, и т. д.
Отказано в разрешении на перепаковку схемы
В настоящее время, поскольку расширение предоставляет схеме repack разрешения, можно поддерживать запуск функциональности 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 доставку аналитических сведений о производительности запросов, поэтому убедитесь, что это касается вас.
pgcrypto
База данных Azure для PostgreSQL поддерживает шифрование на уровне приложения с помощью расширения pgcrypto PostgreSQL. Расширение pgcrypto позволяет приложениям явно вызывать криптографические функции в инструкциях SQL PostgreSQL для шифрования или хэш-значений столбцов с помощью криптографических алгоритмов, предоставляемых базовой библиотекой OpenSSL.
Начиная с Azure Linux 3.0, операционная система использует OpenSSL 3.0, в которой несколько старых и слабых криптографических алгоритмов и низкоуровневых API перенесены в отдельный legacy-провайдер, который по умолчанию не загружается. Это изменение поощряет использование современных, более безопасных алгоритмов шифрования и высокоуровневых API OpenSSL EVP (Конверт).
В результате криптографические алгоритмы, которые OpenSSL 3.0 классифицируются как устаревшие, по умолчанию недоступны для использования pgcrypto на серверах База данных Azure для PostgreSQL под управлением Azure Linux 3.0.
Устаревшие алгоритмы шифрования
Следующие устаревшие алгоритмы шифрования находятся в устаревшем поставщике OpenSSL 3.0 и недоступны по умолчанию на серверах База данных Azure для PostgreSQL под управлением Azure Linux 3.0. Более ранние версии платформы могли позволить pgcrypto использовать эти алгоритмы, но Azure Linux 3.0 больше не поддерживает их.
Алгоритмы симметричного шифрования (шифры):
- Дутья (BF-CBC)
- CAST
- DES (одинарный DES; не 3DES)
- ИДЕЯ
- RC2
- RC4;
- RC5
- Сид
Алгоритмы дайджеста сообщений и хэша:
- MD2
- MD4
- MDC2
- RIPEMD-160
- SHA-1 (не рекомендуется для цифровых подписей, но может быть разрешено для определенных сценариев HMAC в зависимости от конфигурации)
- Джакузи
База данных Azure для PostgreSQL обновления до Azure Linux 3.0 являются частью текущих улучшений платформы. Приложения, использующие pgcrypto, должны гарантировать, что они используют современные, поддерживаемые алгоритмы шифрования при выполнении шифрования на уровне приложения.
postgres_fdw
Расширение postgres_fdw позволяет подключаться с одного База данных Azure для PostgreSQL гибкого сервера к другому серверу или к другой базе данных на том же сервере. База данных Azure для PostgreSQL поддерживает как входящие, так и исходящие подключения к любому серверу PostgreSQL. Отправляющий сервер должен разрешать исходящие подключения к принимающему серверу. Аналогично, принимающий сервер должен разрешать подключения с отправляющего сервера.
Если вы планируете использовать это расширение, разверните серверы с интеграцией виртуальной сети. По умолчанию интеграция виртуальной сети позволяет подключаться между серверами в виртуальной сети. Вы также можете использовать группы безопасности сети для настройки доступа.
pgstattuple
При использовании pgstattuple расширения для получения статистики кортежей от объектов, хранящихся в схеме pg_toast в PostgreSQL версии 11–13, возникает ошибка "отказано в разрешении для схемы pg_toast".
Отказано в разрешении для схемы pg_toast
Клиенты, использующие PostgreSQL версии 11–13 на гибком сервере База данных Azure для PostgreSQL, не могут использовать pgstattuple расширение для объектов в схемеpg_toast.
В версиях PostgreSQL 16 и 17 роль pg_read_all_data автоматически назначается azure_pg_admin, что позволяет pgstattuple работать корректно. В PostgreSQL 14 и 15 клиенты могут вручную назначить роль pg_read_all_data для azure_pg_admin, чтобы достичь того же результата. Однако роль pg_read_all_data в PostgreSQL 11–13 не существует.
Клиенты не могут напрямую предоставлять необходимые разрешения. Если необходимо выполнить pgstattuple, чтобы получить доступ к объектам в схеме pg_toast, перейдите к созданию запроса в службу поддержки Azure.
timescaledb
Расширение timescaledb — это база данных временных рядов, упаковаемая в виде расширения для PostgreSQL. Он предоставляет временные аналитические функции и оптимизацию и масштабирует PostgreSQL для рабочих нагрузок временных рядов.
Дополнительные сведения о TimescaleDB, зарегистрированном торговом знаке Timescale, Inc. База данных Azure для PostgreSQL предоставляет выпуск TimescaleDB Apache-2.
Установка TimescaleDB
Чтобы использовать timescaledb, убедитесь, что вы разрешаете расширение , загружаете ее библиотеку и устанавливаете расширение в базе данных, в которой планируется использовать ее функциональные возможности.
Теперь можно создать гипертаблицу TimescaleDB с нуля или перенести существующие данные временных рядов в PostgreSQL.
Дополнительные сведения о восстановлении базы данных Timescale с помощью pg_dump и pg_restore см. в документации Timescale.
Восстановление базы данных timescale с помощью timescaledb-backup
При выполнении SELECT timescaledb_post_restore() процедуры при обновлении timescaledb.restoring флага могут быть отклонены разрешения. Эта ошибка возникает из-за ограниченного ALTER DATABASE разрешения в облачных службах баз данных PaaS. В этом случае можно выполнить альтернативный метод с помощью timescaledb-backup средства для резервного копирования и восстановления базы данных Timescale. Timescaledb-backup — это программа, которая делает дамповую и восстанавливающую базу данных TimescaleDB проще, менее подверженной ошибкам и более производительной.
Для этого выполните следующие шаги:
Установите средства, как описано в разделе "Установка timescaledb-backup".
Создайте целевой гибкий сервер База данных Azure для PostgreSQL и базу данных.
Включите расширение Timescale.
Предоставьте роль
azure_pg_adminпользователю, используемому ts-restore.Выполните ts-restore для восстановления базы данных.
Дополнительные сведения об этих служебных программах см. в разделе timescaledb-backup.
Расширения и обновление основных версий
База данных Azure для PostgreSQL предлагает функцию обновления основной версии на месте, которая выполняет обновление База данных Azure для PostgreSQL гибкого сервера с простым взаимодействием с пользователем. Обновление основной версии на месте упрощает процесс обновления Базы данных Azure для PostgreSQL, минимизируя нарушение доступа пользователей и приложений к серверу. Обновления основной версии на месте не поддерживают определенные расширения, и существуют некоторые ограничения для обновления определенных расширений.
Расширения anon, Apache AGE, dblink, orafce, postgres_fdw и timescaledb поддерживаются не для всех версий гибкого сервера База данных Azure для PostgreSQL при использовании функции локального обновления основной версии.
Модули с конкретными рекомендациями
Следующий список перечисляет все поддерживаемые модули, требующие конкретных рекомендаций при использовании на гибком сервере База данных Azure для PostgreSQL:
pg_failover_slots
pg_failover_slots
Модуль pg_failover_slots улучшает базу данных Azure для PostgreSQL при работе как с логическими репликациями, так и с серверами с поддержкой высокой доступности. Он эффективно решает проблему в стандартном движке PostgreSQL, который не сохраняет логические слоты репликации после переключения после отказа. Сохранение этих слотов крайне важно, чтобы предотвратить приостановку репликации или несоответствие данных во время изменений роли сервера-источника, обеспечивая непрерывность работы и целостность данных.
Расширение упрощает процесс переключения путем управления необходимой передачей, очисткой и синхронизацией слотов репликации, обеспечивая простой переход во время изменений роли сервера.
Дополнительные сведения и инструкции по использованию pg_failover_slots модуля можно найти на странице GitHub.
Чтобы использовать pg_failover_slots модуль, убедитесь, что его библиотека загружается при запуске сервера.