Рекомендации по расширению, относящиеся к База данных Azure для PostgreSQL — гибкий сервер
В этой статье описываются некоторые особые аспекты, которые необходимо учитывать при использовании определенных расширений в экземпляре База данных Azure для PostgreSQL гибкого сервера.
Необходимые компоненты
Ознакомьтесь со статьей о том, как использовать расширения PostgreSQL для База данных Azure для PostgreSQL, чтобы узнать, как:
- Расширения списка разрешений на гибком сервере База данных Azure для PostgreSQL
- Загрузите библиотеки расширений, развертывающих двоичные библиотеки, которые требуют выделения и доступа к общей памяти и должны загружаться при запуске сервера.
- Установите расширения в некоторых базах данных, чтобы объекты SQL, упакованные в это расширение, развертывались в этой базе данных и могли быть доступны в его контексте.
- Удалите расширения из некоторых баз данных, чтобы объекты SQL, упакованные в это расширение, удалены из этой базы данных.
- Обновите артефакты SQL, развернутые расширением, которое уже установлено.
- Просмотр установленных расширений и их соответствующих версий.
- Узнайте, какие возможные ошибки можно получить при управлении расширениями в База данных Azure для PostgreSQL гибком сервере, а также о том, что может быть причиной каждого из них.
Расширения
В следующем списке перечислены все поддерживаемые расширения, требующие конкретных рекомендаций при использовании в службе гибкого сервера База данных Azure для PostgreSQL:
dblink
pg_buffercache
pg_cron
pg_failover_slots
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_failover_slots
Расширение pg_failover_slots
улучшает База данных Azure для PostgreSQL гибкий сервер при работе как с логическими репликациями, так и с серверами с поддержкой высокой доступности. Он эффективно решает проблему в стандартном обработчике PostgreSQL, который не сохраняет слоты логической репликации после отработки отказа. Сохранение этих слотов крайне важно, чтобы предотвратить приостановку репликации или несоответствие данных во время изменений роли сервера-источника, обеспечивая непрерывность работы и целостность данных.
Расширение упрощает процесс отработки отказа путем управления необходимой передачей, очисткой и синхронизацией слотов репликации, что обеспечивает простой переход во время изменений роли сервера.
Дополнительные сведения и инструкции по использованию pg_failover_slots
расширения можно найти на странице GitHub.
Чтобы использовать pg_failover_slots
расширение, убедитесь, что его библиотека была загружена при запуске сервера.
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.
Восстановление базы данных шкалы времени с помощью 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 гибкий экземпляр сервера и базу данных.
Включите расширение 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 гибких версий сервера при использовании функции обновления основной версии на месте.