Поделиться через


Рекомендации по расширению, относящиеся к База данных 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 позволяет подключаться из одного База данных 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, которые он создает.

Примеры

  1. Удаление старых данных в субботу в 3:30 утра (GMT).

    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
  2. Чтобы запустить вакуум каждый день в 10:00 (GMT) в базе данных postgresпо умолчанию.

    SELECT cron.schedule('0 10 * * *', 'VACUUM');
    
  3. Чтобы отменить отмену всех задач из pg_cron.

    SELECT cron.unschedule(jobid) FROM cron.job;
    
  4. Просмотр всех заданий, запланированных в данный момент.pg_cron

    SELECT * FROM cron.job;
    
  5. Чтобы запустить вакуум каждый день в 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 привилегии роли.

  1. Чтобы удалить старые данные в субботу в 3:30 утра (GMT) в базе данных DBName.

    SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');
    
  2. Обновление или изменение имени базы данных для существующего расписания

    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 проще, менее подверженной ошибкам и более производительной.

Для этого выполните следующие шаги:

  1. Установите средства, как описано здесь.

  2. Создайте целевой База данных Azure для PostgreSQL гибкий экземпляр сервера и базу данных.

  3. Включите расширение timescale.

  4. Предоставьте azure_pg_admin роль пользователю, который используется ts-restore.

  5. Выполните ts-restore для восстановления базы данных.

Дополнительные сведения об этих служебных программах см. здесь.

Расширения и обновление основных версий

База данных Azure для PostgreSQL гибкий сервер предлагает функцию обновления основной версии на месте, которая выполняет обновление База данных Azure для PostgreSQL гибкого экземпляра сервера с простым взаимодействием с пользователем. Обновление основной версии на месте упрощает процесс обновления гибкого сервера База данных Azure для PostgreSQL, минимизируя нарушение доступа пользователей и приложений к серверу. Обновления основной версии на месте не поддерживают определенные расширения, и существуют некоторые ограничения для обновления определенных расширений.

Расширения anon, Apache AGE, pgauditpostgres_fdwdblinkorafceи timescaledb не поддерживаются для всех База данных Azure для PostgreSQL гибких версий сервера при использовании функции обновления основной версии на месте.