Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются некоторые особые аспекты, которые необходимо учитывать при использовании определенных расширений или модулей в гибком экземпляре сервера Базы данных 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_prewarmpg_repackpg_stat_statementspgcryptopostgres_fdwpgstattuple
AGE
Расширение Apache AGE — это расширение графа для PostgreSQL, поддерживаемое Базой данных Azure для PostgreSQL. Он предоставляет функции базы данных графа, поддержку запросов открытых шифров и возможность выполнять сложные запросы на данные графа, хранящиеся в PostgreSQL. Apache AGE — это проект с открытым исходным кодом, выпущенный под лицензией Apache 2.0.
Установка AGE
Чтобы использовать AGE, убедитесь, что вы "включили в список разрешенных" расширение, "загрузили ее библиотеку", и "установили расширение" в базе данных, где планируете использовать его функциональность.
dblink
Расширение dblink позволяет устанавливать соединение с одним гибким сервером Azure Database для 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) запускать процесс очистки в базе данных
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 на таблице a, чтобы объединить с таблицей b как 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 доставку аналитических сведений о производительности запросов, поэтому убедитесь, что это касается вас.
pgcrypto
База данных Azure для PostgreSQL поддерживает шифрование на уровне приложения с помощью расширения pgcrypto PostgreSQL. Расширение pgcrypto позволяет приложениям явно вызывать криптографические функции в инструкциях SQL PostgreSQL для шифрования или хэш-значений столбцов с помощью алгоритмов шифрования, предоставляемых базовой библиотекой OpenSSL.
Начиная с Azure Linux 3.0 ОС использует OpenSSL 3.0, который перемещает несколько старых и слабых алгоритмов шифрования и низкоуровневые API в отдельный устаревший поставщик, который по умолчанию не загружается. Это изменение поощряет использование современных, более безопасных алгоритмов шифрования и высокоуровневых 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.
Алгоритмы симметричного шифрования (шифры)
- Blowfish (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 Database для 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, чтобы достичь того же результата. Однако роль pg_read_all_data в PostgreSQL 11–13 не существует.
Клиенты не могут напрямую предоставлять необходимые разрешения. Если необходимо иметь возможность выполнять 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 модуль, убедитесь, что его библиотека была загружена при запуске сервера.