Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
В этой статье описываются некоторые особые аспекты, которые необходимо учитывать при использовании определенных расширений или модулей в гибком экземпляре сервера Базы данных Azure для PostgreSQL.
Общие рекомендации с расширениями
Чтобы использовать расширение в гибком экземпляре сервера Базы данных Azure для PostgreSQL, необходимо:
-
Разрешить расширение. Если расширение не разрешено, любая попытка выполнить
CREATE EXTENSION,ALTER EXTENSIONDROP 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_prewarmpg_repackpg_stat_statementspostgres_fdwpgstattuple
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_cronSELECT * 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. Конкретная форма начинается с последовательности символов "/*+" и заканчивается "*/". Фразы подсказки состоят из имен подсказок и следующих параметров, заключенных в скобки и разделенных пробелами. Новые строки для удобочитаемости могут разделять каждую фразу с указанием.
Example:
/*+
HashJoin(a b)
SeqScan(a)
*/
SELECT *
FROM pgbench_branches b
JOIN pgbench_accounts an ON b.bid = a.bid
ORDER BY a.aid;
В предыдущем примере планировщик использует результаты seqscan таблицы для объединения с таблицей ab в качестве таблицы hashjoin.
Чтобы использовать pg_hint_plan расширение, убедитесь, что добавляете в белый список расширение, загружаете его библиотеку, и устанавливаете расширение в базе данных, в которой планируется использовать его функциональность.
pg_prewarm
Расширение pg_prewarm загружает реляционные данные в кэш. Предварительное потепление кэша означает, что запросы имеют лучшее время отклика при первом запуске после перезапуска. Функциональность автоматического разогрева для PostgreSQL в настоящий момент недоступна в Azure Database.
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.tracknone. Некоторые сторонние службы мониторинга могут полагаться на 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 для 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 достижения того же результата. Однако в 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.
Восстановление базы данных 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, 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 модуль, убедитесь, что его библиотека была загружена при запуске сервера.