Рекомендации по использованию расширений и модулей
В этой статье описываются некоторые особые аспекты, которые необходимо учитывать при использовании определенных расширений или модулей в База данных Azure для PostgreSQL гибком сервере.
Общие рекомендации с расширениями
Чтобы использовать расширение на База данных Azure для PostgreSQL гибком сервере, необходимо:
-
Разрешить расширение. Если расширение не разрешено, любая попытка выполнить
CREATE EXTENSION
,ALTER EXTENSION
DROP EXTENSION
илиCOMMENT ON EXTENSION
сбой с ошибкой, указывающей, что указанное расширение не разрешено. - Если расширение развертывает некоторую общую двоичную библиотеку, которая требует выделения и доступа к общей памяти, а также должна быть загружена при запуске сервера, следуйте инструкциям, указанным в библиотеках загрузки.
- Создайте расширение в базах данных, в которых требуется, чтобы расширение развертывало объекты SQL, распределенные с этим расширением.
- Удаление расширения. Если вы хотите удалить из базы данных, в которой выполняется команда всех объектов SQL, распределенных этим расширением.
- Обновление расширений для обновления до последней версии всех артефактов SQL, развернутых уже установленным расширением.
- Просмотр установленных расширений и их соответствующих версий.
Если при выполнении CREATE EXTENSION
ALTER EXTENSION
DROP EXTENSION
команд или COMMENT ON EXTENSION
команд на База данных Azure для PostgreSQL гибком сервере возникает ошибка, просмотрите список возможных ошибок и причину каждой из этих ошибок.
Общие рекомендации по модулям
Чтобы использовать модуль в База данных Azure для PostgreSQL гибком сервере, необходимо добавить его только в shared_preload_libraries
параметр сервера, как описано в библиотеках загрузки.
Модули не должны быть разрешены. Это эксклюзивное требование для расширений.
Расширения с конкретными рекомендациями
В следующем списке перечислены все поддерживаемые расширения, требующие конкретных рекомендаций при использовании на гибком сервере База данных Azure для PostgreSQL:
dblink
pg_buffercache
pg_cron
pg_hint_plan
pg_prewarm
pg_repack
pg_stat_statements
postgres_fdw
pgstattuple
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, которые он создает.
Примеры
Удаление старых данных в субботу в 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) в базе данных
test cron
под учетной записьюazure_pg_admin
роли.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. В предыдущих примерах показано выполнение этой функции с необязательным параметром имени пользователя, опущенным или заданным значением 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. Конкретная форма начинается с последовательности символов "/*+" и заканчивается "*/". Фразы подсказки состоят из имен подсказок и следующих параметров, заключенных в скобки и разделенных пробелами. Новые строки для удобочитаемости могут разделять каждую фразу с указанием.
Пример:
/*+
HashJoin(a b)
SeqScan(a)
*/
SELECT *
FROM pgbench_branches b
JOIN pgbench_accounts an ON b.bid = a.bid
ORDER BY a.aid;
В предыдущем примере планировщик использует результаты seqscan
таблицы для объединения с таблицей a
b
в качестве таблицы hashjoin
.
Чтобы использовать pg_hint_plan
расширение, убедитесь, что вы разрешаете список расширений, загружаете ее библиотеку и устанавливаете расширение в базе данных, в которой планируется использовать ее функциональные возможности.
pg_prewarm
Расширение pg_prewarm
загружает реляционные данные в кэш. Предварительное потепление кэша означает, что запросы имеют лучшее время отклика при первом запуске после перезапуска. Функция автоматической подготовки для гибкого сервера PostgreSQL в настоящее время недоступна в базе данных Azure.
pg_repack
В первый раз, когда пользователи pg_repack
расширения обычно задают следующий вопрос: является pg_repack
ли расширение или исполняемый файл на стороне клиента, как psql
или pg_dump
?
pg_repack на самом деле оба. 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. Он предоставляет аналитические функции и оптимизацию и масштабирование Postgres для рабочих нагрузок временных рядов.
Дополнительные сведения о TimescaleDB, зарегистрированном торговом знаке Timescale, Inc. База данных Azure для PostgreSQL гибким сервером, предоставляет выпуск TimescaleDB Apache-2.
Установка TimescaleDB
Чтобы использовать timescaleDB
, убедитесь, что вы разрешаете расширение , загружаете ее библиотеку и устанавливаете расширение в базе данных, в которой планируется использовать ее функциональные возможности.
Теперь можно создать гипертаблицу TimescaleDB с нуля или перенести существующие данные временных рядов в PostgreSQL.
Дополнительные сведения о восстановлении базы данных timescale с помощью pg_dump
и pg_restore
см . в документации по шкале времени.
Восстановление базы данных timescale с помощью timescaledb-backup
При выполнении SELECT timescaledb_post_restore()
процедуры при обновлении флага timescaledb.restoring может быть отказано в разрешениях. Причина, по которой эта ошибка возникает из-за ограниченного разрешения ALTER DATABASE в облачных службах баз данных PaaS. В этом случае можно выполнить альтернативный метод с помощью timescaledb-backup
средства для резервного копирования и восстановления базы данных Timescale. Timescaledb-backup — это программа, которая делает дамповую и восстанавливающую базу данных TimescaleDB проще, менее подверженной ошибкам и более производительной.
Для этого выполните следующие шаги:
Установите средства, как описано здесь.
Создайте целевой База данных Azure для PostgreSQL гибкий экземпляр сервера и базу данных.
Включите расширение timescale.
Предоставьте
azure_pg_admin
роль пользователю, который используется ts-restore.Выполните ts-restore для восстановления базы данных.
Дополнительные сведения об этих служебных программах см. здесь.
Расширения и обновление основных версий
База данных Azure для PostgreSQL гибкий сервер предлагает функцию обновления основной версии на месте, которая выполняет обновление База данных Azure для PostgreSQL гибкого экземпляра сервера с простым взаимодействием с пользователем. Обновление основной версии на месте упрощает процесс обновления гибкого сервера База данных Azure для PostgreSQL, минимизируя нарушение доступа пользователей и приложений к серверу. Обновления основной версии на месте не поддерживают определенные расширения, и существуют некоторые ограничения для обновления определенных расширений.
Расширения anon
, Apache AGE
, pgaudit
postgres_fdw
dblink
orafce
и timescaledb
не поддерживаются для всех База данных Azure для PostgreSQL гибких версий сервера при использовании функции обновления основной версии на месте.
Модули с конкретными рекомендациями
В следующем списке перечислены все поддерживаемые модули, требующие конкретных рекомендаций при использовании на гибком сервере База данных Azure для PostgreSQL:
pg_failover_slots
pg_failover_slots
Расширение pg_failover_slots
улучшает База данных Azure для PostgreSQL гибкий сервер при работе как с логическими репликациями, так и с серверами с поддержкой высокой доступности. Он эффективно решает проблему в стандартном обработчике PostgreSQL, который не сохраняет слоты логической репликации после отработки отказа. Сохранение этих слотов крайне важно, чтобы предотвратить приостановку репликации или несоответствие данных во время изменений роли сервера-источника, обеспечивая непрерывность работы и целостность данных.
Расширение упрощает процесс отработки отказа путем управления необходимой передачей, очисткой и синхронизацией слотов репликации, что обеспечивает простой переход во время изменений роли сервера.
Дополнительные сведения и инструкции по использованию pg_failover_slots
расширения можно найти на странице GitHub.
Чтобы использовать pg_failover_slots
расширение, убедитесь, что его библиотека была загружена при запуске сервера.