Extensions PostgreSQL dans Azure Database pour PostgreSQL - Serveur flexible

S’APPLIQUE À : Azure Database pour PostgreSQL – Serveur flexible

Le serveur flexible Azure Database pour PostgreSQL permet d’étendre les fonctionnalités de votre base de données avec des extensions. Les extensions regroupent plusieurs objets SQL associés au sein d’un package qui peut être chargé ou supprimé de votre base de données à l’aide d’une commande. Une fois chargées dans la base de données, les extensions fonctionnent comme des fonctionnalités intégrées.

Guide pratique pour utiliser les extensions PostgreSQL

Avant d’installer des extensions dans le serveur flexible Azure Database pour PostgreSQL, vous devez les ajouter à la liste d’autorisation pour les utiliser.

À l’aide du Portail Azure :

  1. Sélectionnez votre instance de serveur flexible Azure Database pour PostgreSQL.
    1. Dans le menu des ressources, sous la section Paramètres, sélectionnez Paramètres du serveur.
    2. Recherchez le paramètre azure.extensions.
    3. Sélectionnez les extensions à ajouter à la liste d’autorisation. Capture d’écran montrant Serveur flexible Azure Database pour PostgreSQL : extensions dans la liste verte pour l’installation.

Avec Azure CLI :

Vous pouvez ajouter des extensions à la liste d’autorisation en utilisant la commande CLI « parameter set ».

az postgres flexible-server parameter set --resource-group <resource_group>  --server-name <server> --subscription <subscription_id> --name azure.extensions --value <extension_name>,<extension_name>

À l’aide d’un modèle ARM : l’exemple suivant ajoute à la liste d’autorisation les extensions dblink, dict_xsyn et pg_buffercache sur un serveur nommé postgres-test-server :

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "flexibleServers_name": {
            "defaultValue": "postgres-test-server",
            "type": "String"
        },
        "azure_extensions_set_value": {
            "defaultValue": " dblink,dict_xsyn,pg_buffercache",
            "type": "String"
        }
    },
    "variables": {},
    "resources": [
        {
            "type": "Microsoft.DBforPostgreSQL/flexibleServers/configurations",
            "apiVersion": "2021-06-01",
            "name": "[concat(parameters('flexibleServers_name'), '/azure.extensions')]",
            "properties": {
                "value": "[parameters('azure_extensions_set_value')]",
                "source": "user-override"
            }
        }
    ]
}

shared_preload_libraries est un paramètre de configuration de serveur qui détermine les bibliothèques à charger lors du démarrage du serveur flexible Azure Database pour PostgreSQL. Toutes les bibliothèques qui utilisent de la mémoire partagée doivent être chargées via ce paramètre. Si votre extension doit être ajoutée aux bibliothèques de préchargement partagées, effectuez ces étapes :

À l’aide du Portail Azure :

  1. Sélectionnez votre instance de serveur flexible Azure Database pour PostgreSQL.
    1. Dans le menu des ressources, sous la section Paramètres, sélectionnez Paramètres du serveur.
    2. Recherchez le paramètre shared_preload_libraries.
    3. Sélectionnez les bibliothèques à ajouter.
 :::image type="content" source="./media/concepts-extensions/shared-libraries.png" alt-text="Screenshot showing Azure Database for PostgreSQL -setting shared preload libraries parameter setting for extensions installation." lightbox="./media/concepts-extensions/shared-libraries.png":::
```Using [Azure CLI](/cli/azure/):

   You can set `shared_preload_libraries` via CLI [parameter set](/cli/azure/postgres/flexible-server/parameter?view=azure-cli-latest&preserve-view=true) command.

   ```azurecli
az postgres flexible-server parameter set --resource-group <resource_group>  --server-name <server> --subscription <subscription_id> --name shared_preload_libraries --value <extension_name>,<extension_name>

Créer une extension

Une fois les extensions ajoutées à la liste d’autorisation et chargées, vous devez les installer dans les bases de données sur lesquelles vous prévoyez de les utiliser.

  1. Pour créer une extension, l’utilisateur doit être membre du rôle azure_pg_admin. Un membre du rôle azure_pg_admin peut accorder des privilèges de création d’extensions à d’autres utilisateurs.
  2. Pour installer une extension, vous devez exécuter la commande CREATE EXTENSION. Cette commande charge les objets empaquetés dans votre base de données.

Remarque

Les extensions tierces proposées dans le serveur flexible Azure Database pour PostgreSQL disposent d’un code sous licence open source. Nous n’offrons actuellement aucune extension ou aucune version d’extension tierce avec des modèles de licence Premium ou propriétaires.

L’instance de serveur flexible Azure Database pour PostgreSQL prend en charge un sous-ensemble d’extensions PostgreSQL clés qui sont répertoriées dans le tableau suivant. Ces informations sont également disponibles en exécutant SHOW azure.extensions;. Les extensions non listées dans ce document ne sont pas prises en charge sur le serveur flexible Azure Database pour PostgreSQL. Vous ne pouvez ni créer ni charger votre propre extension dans le serveur flexible Azure Database pour PostgreSQL.

Versions d’extension

Les extensions suivantes sont disponibles dans le serveur flexible Azure Database pour PostgreSQL :

Remarque

Les extensions du tableau suivant avec la ✔️ marque nécessitent que leurs bibliothèques correspondantes soient activées dans le paramètre de serveur shared_preload_libraries .

Nom de l’extension Description PostgreSQL 17 PostgreSQL 16 PostgreSQL 15 PostgreSQL 14 PostgreSQL 13 PostgreSQL 12 PostgreSQL 11
address_standardizer Utilisé pour analyser une adresse et la décomposer en éléments constitutifs, généralement afin de prendre en charge l’étape de normalisation des adresses par géocodage. 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
address_standardizer_data_us Exemple de jeu de données de normalisation des adresses aux États-Unis 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
âge (préversion) Fournit des fonctionnalités de base de données de graphe S/O 1.5.0 ✔️ 1.5.0 ✔️ 1.5.0 ✔️ 1.5.0 ✔️ N/A N/A
amcheck Fonctions permettant de vérifier l’intégrité de la relation 1.4 1.3 1.3 1.3 1.2 1.2 1.1
anon (préversion) Outils d’anonymisation des données 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️ 1.3.2 ✔️
azure_ai Intégration d’Azure AI et de ML Services pour PostgreSQL S/O 1.1.0 1.1.0 1.1.0 1.1.0 1.1.0 S/O
azure_storage Intégration d’Azure pour PostgreSQL S/O 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ S/O
bloom Méthode d’accès Bloom, index basé sur un fichier de signature 1.0 1.0 1.0 1.0 1.0 1.0 1.0
btree_gin Prise en charge de l’indexation des types de données communs dans GIN 1.3 1.3 1.3 1.3 1.3 1.3 1.3
btree_gist Prise en charge de l’indexation des types de données communs dans GiST 1.7 1.7 1.7 1.6 1.5 1.5 1.5
citext Type de données des chaînes de caractères sans respect de la casse 1.6 1.6 1.6 1.6 1.6 1.6 1.5
cube Type de données pour les cubes multidimensionnels 1.5 1.5 1.5 1.5 1.4 1.4 1.4
dblink Se connecte à d’autres bases de données PostgreSQL à partir d’une base de données 1.2 1.2 1.2 1.2 1.2 1.2 1.2
dict_int Modèle de dictionnaire de recherche de texte pour les entiers 1.0 1.0 1.0 1.0 1.0 1.0 1.0
dict_xsyn Modèle de dictionnaire de recherche de texte pour le traitement de synonyme étendu 1.0 1.0 1.0 1.0 1.0 1.0 1.0
earthdistance Calcule les distances orthodromiques à la surface de la Terre 1.1 1.1 1.1 1.1 1.1 1.1 1.1
fuzzystrmatch Détermine les ressemblances et la distance entre les chaînes 1,2 1.2 1.1 1.1 1.1 1.1 1,1
hstore Type de données permettant de stocker des paires clé/valeur 1.8 1.8 1.8 1.8 1.7 1.6 1.5
hypopg Index hypothétiques pour PostgreSQL 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0 1.4.0
intagg Agrégateur et énumérateur d’entier (obsolète) 1.1 1.1 1.1 1.1 1.1 1.1 1.1
intarray Fonctions, opérateurs et prise en charge d’index pour les tableaux d’entiers 1D 1.5 1.5 1.5 1.5 1.3 1.2 1.2
isn Types de données pour les standards internationaux de numérotation de produits 1.2 1.2 1.2 1.2 1.2 1.2 1.2
lo Maintenance des objets volumineux (Large Object) 1.1 1.1 1.1 1.1 1.1 1.1 1,1
login_hook Login_hook – hook pour exécuter login_hook.login() au moment de la connexion 1.5 1.5 1.4 1.4 1.4 1.4 1.4
ltree Type de données pour les structures hiérarchiques de type arborescence 1.3 1.2 1.2 1.2 1.2 1.1 1,1
oracle_fdw Enveloppe de données étrangères pour les bases de données Oracle 1,2 1.2 1.2 1.2 1.2 1.2 S/O
orafce Fonctions et opérateurs qui émulent un sous-ensemble de fonctions et de packages à partir du système de gestion de base de données relationnelle Oracle 4,9 4.4 3.24 3,18 3,18 3,18 3.7
pageinspect Inspectez le contenu de pages de base de données de bas niveau 1.12 1.12 1.11 1.9 1.8 1.7 1.7
pgaudit Fournit des fonctionnalités d’audit 16.0 ✔️ 16.0 ✔️ 1.7 ✔️ 1.6.2 ✔️ 1.5 ✔️ 1.4.3 ✔️ 1.3.2 ✔️
pg_buffercache Examine le cache des tampons partagé 1.5 1.4 1.3 1.3 1.3 1.3 1.3
pg_cron Planificateur de travaux pour PostgreSQL 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.6 ✔️ 1.4-1 ✔️
pgcrypto Fonctions de chiffrement 1.3 1.3 1.3 1.3 1.3 1.3 1.3
pg_freespacemap Examinez le mappage d’espace libre (FSM) 1.2 1.2 1.2 1.2 1.2 1.2 1.2
pg_hint_plan Permet d’ajuster les plans d’exécution PostgreSQL à l’aide de « conseils » dans les commentaires SQL. 1.7.0 ✔️ 1.6.0 ✔️ 1.5 ✔️ 1.4 ✔️ 1.3.7 ✔️ 1.3.7 ✔️ 1.3.7 ✔️
pglogical Réplication logique PostgreSQL 2.4.5 ✔️ 2.4.4 ✔️ 2.4.2 ✔️ 2.4.1 ✔️ 2.4.1 ✔️ 2.4.1 ✔️ 2.4.1 ✔️
pg_partman Extension pour gérer les tables partitionnées par date et heure ou par ID 5.0.1 ✔️ 5.0.1 ✔️ 4.7.1 ✔️ 4.6.1 ✔️ 4.5.0 ✔️ 4.5.0 ✔️ 4.5.0 ✔️
pg_prewarm Préchauffe les données de relation 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️ 1.2 ✔️
pg_repack Réorganiser les tables dans les bases de données PostgreSQL avec des verrous minimaux 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7 1.4.7
pgrouting Extension PgRouting N/A N/A 3.5.0 3.3.0 3.3.0 3.3.0 3.3.0
pgrowlocks Affiche les informations de verrouillage au niveau des lignes 1.2 1.2 1.2 1.2 1.2 1.2 1.2
pg_squeeze Outil permettant de supprimer l’espace inutilisé d’une relation. 1.7 ✔️ 1.6 ✔️ 1.6 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️ 1.5 ✔️
pg_stat_statements Suit les statistiques d’exécution de toutes les instructions SQL exécutées 1.11 ✔️ 1.10 ✔️ 1.10 ✔️ 1.9 ✔️ 1.8 ✔️ 1.7 ✔️ 1.6 ✔️
pgstattuple Affiche les statistiques au niveau du tuple 1.5 1.5 1.5 1.5 1.5 1.5 1.5
pg_trgm Mesure de la similarité du texte et recherche d’index sur la base de trigrammes 1.6 1.6 1.6 1.6 1.5 1.4 1.4
pg_visibility Examinez le mappage de visibilité (machine virtuelle) et les informations de visibilité au niveau des pages 1.2 1.2 1.2 1.2 1.2 1.2 1.2
plpgsql Langage procédural PL/pgSQL 1.0 1.0 1.0 1.0 1.0 1.0 1.0
plv8 Langage procédural PL/JavaScript (v8) approuvé 3.1.7 3.1.7 3.1.7 3.0.0 3.0.0 3.0.0 3.0.0
postgis Fonctions et types spatiaux de géométrie et géographie PostGIS 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_raster Types et fonctions raster PostGIS 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_sfcgal Fonctions SFCGAL PostGIS 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_tiger_geocoder PostGIS tiger geocoder et geocoder inverse 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgis_topology Types et fonctions spatiaux de topologie PostGIS 3.5.0 3.3.3 3.3.1 3.2.3 3.2.3 3.2.3 3.2.3
postgres_fdw Wrapper de données externes pour les serveurs PostgreSQL distants 1.1 1.1 1.1 1,1 1.0 1.0 1.0
postgres_protobuf Mémoires tampons de protocole pour PostgreSQL 0,2 0,2 0,2 0,2 0,2 0.2 S/O
semver Type de données de version sémantique 0.32.1 0.32.1 0.32.0 0.32.0 0.32.0 0.32.0 0.32.0
session_variable Session_variable – inscription et manipulation des variables de session et des constantes 3.3 3.3 3.3 3.3 3.3 3.3 3.3
sslinfo Informations sur les certificats SSL 1.2 1.2 1.2 1.2 1.2 1.2 1.2
tablefunc Fonctions qui manipulent des tables entières, y compris les tables d’analyse croisée 1.0 1.0 1.0 1.0 1.0 1.0 1.0
tds_fdw Wrapper de données étrangères pour interroger une base de données TDS (Sybase ou Microsoft SQL Server) 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3 2.0.3
timescaledb Permet des insertions scalables et des requêtes complexes pour les données de séries chronologiques S/O 2.13.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 2.10.0 ✔️ 1.7.4 ✔️
tsm_system_rows méthode TABLESAMPLE, qui accepte le nombre de lignes en tant que limite 1.0 1.0 1.0 1.0 1.0 1.0 1.0
tsm_system_time méthode TABLESAMPLE, qui accepte le temps en millisecondes en tant que limite 1.0 1.0 1.0 1.0 1.0 1.0 1.0
unaccent Dictionnaire de recherche de texte qui supprime les accents 1.1 1.1 1.1 1.1 1.1 1.1 1,1
uuid-ossp Génère des identificateurs uniques universels (UUID). 1.1 1.1 1.1 1.1 1.1 1.1 1,1
vector Types de données vectorielles et méthodes d’accès ivfflat et hnsw 0.7.0 0.7.0 0.7.0 0.7.0 0.7.0 0.7.0 0.5.1

Mise à niveau des extensions PostgreSQL

Les mises à niveau sur place des extensions de base de données sont autorisées avec une commande simple. Cette fonctionnalité permet aux clients de mettre automatiquement à jour leurs extensions tierces vers les dernières versions, en maintenant les systèmes à jour et sécurisés sans effort manuel.

Mise à jour des extensions

Pour mettre à jour une extension installée vers la dernière version disponible prise en charge par Azure, utilisez la commande SQL suivante :

ALTER EXTENSION <extension_name> UPDATE;

Cette commande simplifie la gestion des extensions de base de données en permettant aux utilisateurs de passer manuellement à la dernière version approuvée par Azure, ce qui renforce la compatibilité et la sécurité.

Limites

Bien que la mise à jour des extensions soit simple, il existe certaines limitations :

  • Sélection d’une version spécifique : la commande ne prend pas en charge la mise à jour vers les versions intermédiaires d’une extension. La mise à jour porte toujours sur la dernière version disponible.
  • Rétrogradation : ne prend pas en charge la rétrogradation d’une extension vers une version précédente. Si une rétrogradation est nécessaire, elle peut nécessiter une assistance de support et dépend de la disponibilité de la version précédente.

Extensions installées

Pour lister les extensions actuellement installées sur votre base de données, utilisez la commande SQL suivante :

SELECT * FROM pg_extension;

Extensions disponibles et leurs versions

Pour vérifier les versions disponibles d’une extension pour l’installation actuelle de votre base de données, interrogez la vue du catalogue système pg_available_extensions. Par exemple, pour déterminer la version disponible pour l’extension azure_ai, exécutez :

SELECT * FROM pg_available_extensions WHERE name = 'azure_ai';

Ces commandes fournissent des insights nécessaires sur les configurations d’extension de votre base de données, ce qui vous permet de gérer vos systèmes efficacement et de manière sécurisée. En activant les mises à jour faciles des dernières versions d’extension, Azure Database pour PostgreSQL continue de prendre en charge la gestion robuste, sécurisée et efficace de vos applications de base de données.

Considérations propres au serveur flexible Azure Database pour PostgreSQL

Voici la liste des extensions prises en charge qui nécessitent des considérations spécifiques en cas d’utilisation dans le service du serveur flexible Azure Database pour PostgreSQL. La liste est triée par ordre alphabétique.

dblink vous permet de vous connecter d’une instance de serveur flexible Azure Database pour PostgreSQL à une autre, ou à une autre base de données dans le même serveur. Le serveur flexible Azure Database pour PostgreSQL prend en charge les connexions entrantes et sortantes vers n’importe quel serveur PostgreSQL. Le serveur d’envoi doit autoriser les connexions sortantes vers le serveur de réception. De même, le serveur de réception doit autoriser les connexions à partir du serveur d’envoi.

Nous vous recommandons de déployer vos serveurs avec intégration au réseau virtuel si vous envisagez d’utiliser cette extension. Par défaut, l’intégration au réseau virtuel autorise les connexions entre les serveurs du réseau virtuel. Vous pouvez également choisir d’utiliser des groupes de sécurité réseau de réseau virtuel pour personnaliser l’accès.

pg_buffercache

pg_buffercache peut être utilisé pour étudier le contenu de shared_buffers. À l’aide de cette extension vous pouvez savoir si une relation particulière est mise en cache ou non (dans shared_buffers). Cette extension peut vous aider à résoudre les problèmes de performances (mise en cache des problèmes de performances associés).

Cette extension, intégrée à l’installation principale de PostgreSQL, est facile à installer.

CREATE EXTENSION pg_buffercache;

pg_cron

pg_cron est un planificateur de travaux simple basé sur cron pour PostgreSQL qui s’exécute dans la base de données en tant qu’extension. L’extension pg_cron peut être utilisée pour exécuter des tâches de maintenance planifiées dans une base de données PostgreSQL. Par exemple, vous pouvez exécuter le vide périodique d’une table ou supprimer d’anciens travaux de données.

pg_cron peut exécuter plusieurs travaux en parallèle, mais il exécute au plus une instance d’un travail à la fois. Si une deuxième exécution est censée démarrer avant la fin de la première, la deuxième exécution est mise en file d’attente et démarrée dès que la première exécution est terminée. De cette façon, les travaux s’exécutent exactement autant de fois que prévu et ne s’exécutent pas simultanément avec eux-mêmes.

Exemples :

Pour supprimer les anciennes données le samedi à 3h30 (GMT)

SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);

Pour exécuter le vide tous les jours à 10h00 (GMT) dans la base de données par défaut postgres.

SELECT cron.schedule('0 10 * * *', 'VACUUM');

Pour annuler la planification de toutes les tâches de pg_cron.

SELECT cron.unschedule(jobid) FROM cron.job;

Pour afficher tous les travaux actuellement planifiés avec pg_cron.

SELECT * FROM cron.job;

Pour exécuter le vide tous les jours à 10 h (GMT) dans la base de données « testcron » sous azure_pg_admin compte de rôle.

SELECT cron.schedule_in_database('VACUUM','0 10 * * * ','VACUUM','testcron',null,TRUE);

Remarque

pg_cron extension est préchargée dans shared_preload_libraries pour chaque instance de serveur flexible Azure Database pour PostgreSQL à l’intérieur de la base de données postgres pour vous permettre de planifier des travaux à exécuter dans d’autres bases de données au sein de votre instance de base de données flexible Azure Database pour PostgreSQL sans compromettre la sécurité. Toutefois, pour des raisons de sécurité, vous devez toujours ajouter à une liste d’autorisation l’extension pg_cron et l’installer avec la commande CREATE EXTENSION.

À partir de pg_cron version 1.4, vous pouvez utiliser les fonctions cron.schedule_in_database et cron.alter_job pour planifier votre travail dans une base de données spécifique et mettre à jour une planification existante respectivement.

Exemples :

Pour supprimer les anciennes données le samedi à 3h30 (GMT) sur la base de données DBName

SELECT cron.schedule_in_database('JobName', '30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$,'DBName');

Remarque

cron_schedule_in_database fonction autorise le nom d’utilisateur comme paramètre facultatif. La définition du nom d’utilisateur sur une valeur non null nécessite le privilège de superutilisateur PostgreSQL et n’est pas prise en charge dans le serveur flexible Azure Database pour PostgreSQL. Les exemples précédents montrent l’exécution de cette fonction avec un paramètre de nom d’utilisateur facultatif omis ou défini sur null, qui exécute le travail dans le contexte de la planification du travail par l’utilisateur, lequel doit avoir les privilèges du rôle azure_pg_admin.

Pour mettre à jour ou modifier le nom de la base de données pour la planification existante

SELECT cron.alter_job(job_id:=MyJobID,database:='NewDBName');

pg_failover_slots

L’extension PG Failover Slots améliore le serveur flexible Azure Database pour PostgreSQL quand il fonctionne à la fois avec une réplication logique et des serveurs à haute disponibilité. Elle résout efficacement le défi au sein du moteur PostgreSQL standard qui ne conserve pas les emplacements de réplication logique après un basculement. La maintenance de ces emplacements est essentielle pour empêcher les interruptions de réplication ou les incompatibilités de données pendant les modifications de rôle serveur principal, ce qui garantit la continuité opérationnelle et l’intégrité des données.

L’extension simplifie le processus de basculement en gérant le transfert, le nettoyage et la synchronisation nécessaires des emplacements de réplication, ce qui offre une transition transparente pendant les modifications de rôle serveur. L’extension est prise en charge pour PostgreSQL versions 11 à 16.

Vous trouverez plus d’informations et comment utiliser l’extension PG Failover Slots sur sa page GitHub.

Activer pg_failover_slots

Pour activer l’extension PG Failover Slots pour votre instance de serveur flexible Azure Database pour PostgreSQL, vous devez modifier la configuration du serveur en incluant l’extension dans les bibliothèques de préchargement partagées du serveur et en ajustant un paramètre de serveur spécifique. Le processus est le suivant :

  1. Ajoutez pg_failover_slots aux bibliothèques de préchargement partagées du serveur en mettant à jour le paramètre shared_preload_libraries.
  2. Remplacez le paramètre hot_standby_feedback du serveur par on.

Toutes les modifications apportées au paramètre shared_preload_libraries nécessitent un redémarrage du serveur.

À l’aide du Portail Azure :

  1. Sélectionnez votre instance de serveur flexible Azure Database pour PostgreSQL.
  2. Dans le menu des ressources, sous la section Paramètres, sélectionnez Paramètres du serveur.
  3. Recherchez le paramètre shared_preload_libraries et modifiez sa valeur pour inclure pg_failover_slots.
  4. Recherchez le paramètre hot_standby_feedback et définissez sa valeur sur on.
  5. Sélectionnez Enregistrer pour conserver vos modifications. Vous pouvez à présent Enregistrer et redémarrer. Choisissez cette option pour vérifier que les modifications prennent effet, car la modification de shared_preload_libraries nécessite un redémarrage du serveur.

En sélectionnant Enregistrer et redémarrer, votre serveur redémarre automatiquement et applique les modifications que vous venez d’apporter. Une fois que le serveur est de retour en ligne, l’extension PG Failover Slots est activée et opérationnelle sur votre instance de serveur flexible Azure Database pour PostgreSQL principale, prête à gérer les emplacements de réplication logique pendant les basculements.

pg_hint_plan

pg_hint_plan permet d’ajuster les plans d’exécution PostgreSQL à l’aide de ce que l’on appelle des « indicateurs » dans les commentaires SQL, comme

/*+ SeqScan(a) */

pg_hint_plan lit les expressions d’indication dans un commentaire de forme spéciale donnée avec l’instruction SQL cible. La forme spéciale commence par la séquence de caractères « /*+ » et se termine par « */ ». Les phrases indicatives se composent du nom de l’indicateur et des paramètres suivants entre parenthèses et délimités par des espaces. De nouvelles lignes peuvent délimiter chaque expression d’indicateur, pour plus de lisibilité.

Exemple :

  /*+
      HashJoin(a b)
      SeqScan(a)
    */
    SELECT *
      FROM pgbench_branches b
      JOIN pgbench_accounts an ON b.bid = a.bid
     ORDER BY a.aid;

L’exemple précédent oblige le planificateur à utiliser les résultats d’un seq scan sur la table a à combiner avec la table b en tant que hash join.

Pour installer pg_hint_plan, en plus de l’ajouter à la liste d’autorisation comme indiqué dans le guide pratique pour utiliser les extensions PostgreSQL, vous devez l’inclure dans les bibliothèques de préchargement partagées du serveur. Une modification apportée au paramètre shared_preload_libraries de Postgres nécessite un shared_preload_libraries pour prendre effet. Vous pouvez modifier les paramètres à l’aide du portail Azure ou d’Azure CLI.

À l’aide du Portail Azure :

  1. Sélectionnez votre instance de serveur flexible Azure Database pour PostgreSQL.
  2. Dans le menu des ressources, sous la section Paramètres, sélectionnez Paramètres du serveur.
  3. Recherchez le paramètre shared_preload_libraries et modifiez sa valeur pour inclure pg_hint_plan.
  4. Sélectionnez Enregistrer pour conserver vos modifications. Vous pouvez à présent Enregistrer et redémarrer. Choisissez cette option pour vérifier que les modifications prennent effet, car la modification de shared_preload_libraries nécessite un redémarrage du serveur. Vous pouvez maintenant activer pg_hint_plan dans votre base de données de serveur flexible Azure Database pour PostgreSQL. Connectez-vous à la base de données et exécutez la commande suivante :
CREATE EXTENSION pg_hint_plan;

pg_prewarm

L’extension pg_prewarm charge les données relationnelles dans le cache. Le préchauffage de vos caches signifie que vos requêtes ont de meilleurs temps de réponse lors de leur première exécution après un redémarrage. La fonctionnalité de préchauffage automatique n’est actuellement pas disponible dans le serveur flexible Azure Database pour PostgreSQL.

pg_repack

Une question qui revient fréquemment lors de la première utilisation de cette extension est la suivante : est-ce que pg_repack est une extension ou un exécutable côté client comme psql ou pg_dump ?

Il s’agit en fait des deux. pg_repack/lib contient le code de l’extension, y compris le schéma et les artefacts SQL qu’il crée, et la bibliothèque C implémentant le code de plusieurs de ces fonctions. D’un autre côté, pg_repack/bin conserve le code de l’application cliente, qui sait comment interagir avec les artefacts de programmabilité créés par l’extension. Cette application cliente vise à simplifier l’interaction avec les différentes interfaces exposées par l’extension côté serveur, en offrant à l’utilisateur des options de ligne de commande plus faciles à comprendre. L’application cliente sans l’extension créée sur la base de données vers laquelle elle pointe est inutilisable. L’extension côté serveur serait en soi entièrement fonctionnelle, mais elle exigerait que l’utilisateur comprenne un modèle d’interaction complexe consistant à exécuter des requêtes pour récupérer des données utilisées en entrée dans des fonctions implémentées par l’extension.

Autorisation refusée pour le schéma repack

Pour l’instant, compte tenu de la façon dont nous accordons les autorisations au schéma repack créé par cette extension, l’exécution de la fonctionnalité pg_repack n’est prise en charge qu’à partir du contexte de azure_pg_admin.

Vous remarquerez peut-être que si le propriétaire d’une table, qui n’est pas azure_pg_admin, tente d’exécuter pg_repack, il finit par recevoir une erreur semblable à la suivante :

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()

Pour éviter cette erreur, veillez à exécuter pg_repack à partir du contexte de azure_pg_admin.

pg_stat_statements

L’extension pg_stat_statements vous donne une vue de toutes les requêtes qui ont été exécutées sur votre base de données. C’est très utile pour se faire une idée du niveau de performance de votre charge de travail de requêtes sur un système de production.

L’extension pg_stat_statements est préchargée dans shared_preload_libraries sur chaque instance de serveur flexible Azure Database pour PostgreSQL pour vous fournir un moyen de suivre les statistiques d’exécution des instructions SQL. Toutefois, pour des raisons de sécurité, vous devez toujours établir une liste d’autorisation avec l’extension pg_stat_statements et installer celle-ci avec la commande CREATE EXTENSION. Le paramètre pg_stat_statements.track, qui contrôle quelles instructions sont comptées par l’extension, a la valeur par défaut top, ce qui signifie que toutes les instructions exécutées directement par les clients sont suivies. Les deux autres niveaux de suivi sont none et all. Ce paramètre peut être configuré en tant que paramètre de serveur.

Il y a un compromis entre les informations d’exécution des requêtes fournies par pg_stat_statements et l’impact sur les performances du serveur en raison de la journalisation de chaque instruction SQL. Si vous n’utilisez pas activement l’extension pg_stat_statements, nous vous recommandons de définir pg_stat_statements.track sur none. Certains services de supervision tiers peuvent s’appuyer sur pg_stat_statements pour fournir des insights sur les performances des requêtes. Vérifiez donc si c’est le cas pour vous ou non.

postgres_fdw

postgres_fdw vous permet de vous connecter d’une instance de serveur flexible Azure Database pour PostgreSQL à une autre, ou à une autre base de données dans le même serveur. Le serveur flexible Azure Database pour PostgreSQL prend en charge les connexions entrantes et sortantes vers n’importe quel serveur PostgreSQL. Le serveur d’envoi doit autoriser les connexions sortantes vers le serveur de réception. De même, le serveur de réception doit autoriser les connexions à partir du serveur d’envoi.

Nous vous recommandons de déployer vos serveurs avec intégration au réseau virtuel si vous envisagez d’utiliser cette extension. Par défaut, l’intégration au réseau virtuel autorise les connexions entre les serveurs du réseau virtuel. Vous pouvez également choisir d’utiliser des groupes de sécurité réseau de réseau virtuel pour personnaliser l’accès.

pgstattuple

Lorsque vous utilisez l’extension « pgstattuple » pour essayer d’obtenir des statistiques tuple à partir d’objets conservés dans le schéma pg_toast dans les versions de Postgres 11 à 13, vous recevrez une erreur « permission denied for schema pg_toast » (autorisation refusée pour le schéma pg_toast).

Autorisation refusée pour le schéma pg_toast

Les clients utilisant PostgreSQL versions 11 à 13 sur Azure Database pour serveur flexible ne peuvent pas utiliser l’extension pgstattuple sur les objets dans le schéma pg_toast.

Dans PostgreSQL 16 et 17, le rôle pg_read_all_data est automatiquement accordé à azure_pg_admin, ce qui permet à pgstattuple de fonctionner correctement. Dans PostgreSQL 14 et 15, les clients peuvent accorder manuellement le rôle pg_read_all_data à azure_pg_admin pour obtenir le même résultat. Toutefois, dans PostgreSQL 11 à 13, le rôle pg_read_all_data n’existe pas.

Les clients ne peuvent pas accorder directement les autorisations nécessaires. Si vous devez être en mesure d’exécuter pgstattuple pour accéder aux objets sous le schéma pg_toast, procédez à la création d’une demande de support Azure.

TimescaleDB

TimescaleDB est une base de données de séries chronologiques empaquetée en tant qu’extension pour PostgreSQL. TimescaleDB fournit des fonctions analytiques axées sur le temps et des optimisations et met à l’échelle PostgreSQL pour les charges de travail de série chronologique. En savoir plus sur TimescaleDB, marque déposée de Timescale, Inc. Le serveur flexible Azure Database pour PostgreSQL fournit l’édition Apache-2 de TimescaleDB.

Installer TimescaleDB

Pour installer TimescaleDB, en plus d’autoriser son référencement, comme indiqué ci-dessus, vous devez l’inclure dans les bibliothèques de préchargement partagées du serveur. Une modification apportée au paramètre shared_preload_libraries de Postgres nécessite un shared_preload_libraries pour prendre effet. Vous pouvez modifier les paramètres à l’aide du portail Azure ou d’Azure CLI.

À l’aide du Portail Azure :

  1. Sélectionnez votre instance de serveur flexible Azure Database pour PostgreSQL.
  2. Dans le menu des ressources, sous la section Paramètres, sélectionnez Paramètres du serveur.
  3. Recherchez le paramètre shared_preload_libraries et modifiez sa valeur pour inclure TimescaleDB.
  4. Sélectionnez Enregistrer pour conserver vos modifications. Vous pouvez à présent Enregistrer et redémarrer. Choisissez cette option pour vérifier que les modifications prennent effet, car la modification de shared_preload_libraries nécessite un redémarrage du serveur. Vous pouvez maintenant activer TimescaleDB dans votre base de données de serveur flexible Azure Database pour PostgreSQL. Connectez-vous à la base de données et exécutez la commande suivante :
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

Conseil

Si vous voyez une erreur, vérifiez que vous avez redémarré le serveur après l’enregistrement de shared_preload_libraries.

Vous pouvez maintenant créer une hypertable TimescaleDB à partir de zéro ou migrer des données de série chronologiques existantes dans PostgreSQL.

Restaurer une base de données d’échelle de temps à l’aide de pg_dump et pg_restore

Pour restaurer une base de données d’échelle de temps à l’aide de pg_dump et pg_restore, vous devez exécuter deux procédures d’assistance dans la base de données de destination : timescaledb_pre_restore() et timescaledb_post restore().

Préparez d’abord la base de données de destination :

--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();

Vous pouvez maintenant exécuter pg_dump sur la base de données d’origine, puis effectuer pg_restore. Après la restauration, veillez à exécuter la commande suivante dans la base de données restaurée :

SELECT timescaledb_post_restore();

Pour plus d’informations sur la méthode de restauration avec une base de données avec une échelle de temps, consultez la documentation relative à l’échelle de temps

Restaurer une base de données d’échelle de données à l’aide de timescaledb-backup

Lors de l’exécution de la procédure SELECT timescaledb_post_restore() indiquée ci-dessus, vous pourriez recevoir des erreurs d’autorisation refusée lors de la mise à jour de l’indicateur timescaledb.restoring. Cela est dû à l’autorisation ALTER DATABASE limitée dans les services de base de données cloud PaaS. Dans ce cas, vous pouvez utiliser une autre méthode à l’aide de l’outil timescaledb-backup pour sauvegarder et restaurer une base de données d’échelle de temps. Timescaledb-backup est un programme qui simplifie le vidage et la restauration d’une base de données TimescaleDB, moins susceptible d’engendrer des erreurs et plus performant.
Pour ce faire, vous devez procéder comme suit

  1. Installer les outils comme détaillé ici
    1. Créer une instance de serveur flexible Azure Database pour PostgreSQL cible et une base de données
    2. Activer l’extension d’échelle de temps comme indiqué ci-dessus
    3. Accorder le rôle azure_pg_admin à l’utilisateur qui sera utilisé par ts-restore
    4. Exécuter ts-restore pour restaurer la base de données

Des informations supplémentaires sur ces utilitaires sont disponibles ici.

Extensions et mise à niveau de version principale

Le serveur flexible Azure Database pour PostgreSQL a introduit une fonctionnalité de mise à niveau de version principale sur place qui effectue une mise à niveau sur place de l’instance de serveur flexible Azure Database pour PostgreSQL en un seul clic. La mise à niveau de version principale sur place simplifie le processus de mise à niveau de serveur flexible Azure Database pour PostgreSQL, ce qui réduit les interruptions pour les utilisateurs et les applications accédant au serveur. La mise à niveau de la version principale sur place ne prend pas en charge des extensions spécifiques et il existe certaines limitations à la mise à niveau de certaines extensions. Les extensions anon, Apache AGE, dblink, orafce, pgaudit, postgres_fdw et Timescaledb ne sont pas prises en charge pour toutes les versions d’Azure Database pour PostgreSQL – Serveur flexible lors de l’utilisation de la fonctionnalité de mise à jour d’une version majeure sur place.