Tous les produits
Search
Centre de documentation

ApsaraDB RDS:Utiliser l'extension pg_cron

Dernière mise à jour :Aug 08, 2026

ApsaraDB RDS for PostgreSQL prend en charge l'extension pg_cron, qui adopte la même syntaxe et le même mécanisme de planification des tâches que cron. Vous pouvez utiliser cette extension pour configurer des tâches planifiées dans les bases de données en exécutant des commandes SQL.

Présentation

pg_cron est un planificateur basé sur cron qui utilise la même syntaxe que cron. Vous pouvez exécuter des commandes SQL pour configurer des tâches planifiées. Pour plus d'informations, consultez pg_cron.

Une tâche planifiée se compose d'une planification et d'une action. Cette section utilise une tâche planifiée comme exemple pour décrire ces deux parties. La tâche planifiée est configurée en exécutant la commande suivante : SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);.

  • Planification

    Cette partie spécifie la planification selon laquelle le système utilise l'extension pg_cron pour exécuter la tâche. Vous pouvez définir une planification en suivant la même syntaxe que les expressions cron standard. Dans cette syntaxe, un astérisque (**) dans un champ indique que la tâche s'exécute à tout moment spécifié par ce champ, tandis qu'une valeur numérique dans un champ indique que la tâche s'exécute uniquement au moment spécifié par cette valeur. Dans l'exemple de tâche planifiée, la planification est 30 3 * * 6, ce qui signifie que la tâche s'exécute tous les samedis à 03:30:00 (UTC).

     ┌───────────── Minute: 0 to 59
     │ ┌────────────── Hour: 0 to 23
     │ │ ┌─────────────── Date: 1 to 31
     │ │ │ ┌──────────────── Month: 1 to 12
     │ │ │ │ ┌───────────────── Day of the week: 0 to 6 (The value 0 indicates Sunday.)
     │ │ │ │ │                  
     │ │ │ │ │
     │ │ │ │ │
     * * * * *

    Vous pouvez créer et résoudre la planification d'une tâche pg_cron sur crontab.guru.

  • Action

    Cette partie spécifie l'action que vous souhaitez effectuer en exécutant la tâche. Dans l'exemple de tâche planifiée, l'action est $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$, ce qui signifie que la tâche planifiée s'exécute pour supprimer les données expirées d'une table nommée events.

Prérequis

  • Votre instance RDS exécute PostgreSQL 10 ou une version ultérieure.

  • Votre instance RDS exécute une version mineure du moteur 20250430 ou ultérieure.

    Important

    Cette extension est prise en charge dans certaines versions mineures du moteur antérieures à 20250430. Toutefois, ApsaraDB RDS prévoit d'optimiser les extensions prises en charge lors des mises à jour des versions mineures du moteur afin de normaliser la gestion des extensions et de renforcer la sécurité contre les vulnérabilités. Par conséquent, vous ne pouvez pas créer cette extension pour les instances RDS exécutant une version mineure du moteur antérieure à 20250430. Pour plus d'informations, consultez Restrictions sur la création d'extensions pour RDS for PostgreSQL.

    • Si vous avez déjà créé cette extension pour votre instance RDS exécutant une version mineure du moteur antérieure à 20250430, vous pouvez continuer à l'utiliser.

    • Si vous créez cette extension pour la première fois ou si vous devez recréer l'extension pour votre instance RDS, vous devez mettre à jour la version mineure du moteur de l'instance RDS vers la dernière version. Pour plus d'informations, consultez Mettre à jour la version mineure du moteur.

  • Un compte privilégié a été créé. Pour plus d'informations, consultez Créer un compte.

Remarques d'utilisation

  • L'heure spécifiée dans la planification d'une tâche planifiée suit l'UTC par défaut. Convertissez l'heure en fonction du paramètre TIMEZONE de la base de données si nécessaire. Si la tâche planifiée ne peut pas être déclenchée, exécutez la commande suivante pour configurer une tâche exécutée chaque minute afin de vérifier que l'extension fonctionne correctement.

    SELECT cron.schedule('* * * * *', 'SELECT 1;');
  • Les tâches planifiées configurées sont stockées dans une base de données par défaut nommée postgres. Vous pouvez interroger ces tâches planifiées dans d'autres bases de données.

  • L'extension pg_cron est installée dans la base de données spécifiée par le paramètre cron.database_name, dont la valeur par défaut est postgres. Si vous souhaitez installer l'extension pg_cron dans une autre base de données, modifiez la valeur du paramètre cron.database_name. Pour plus d'informations, consultez Définir les paramètres de l'instance. L'installation de l'extension pg_cron redémarre l'instance. Installez l'extension pendant les heures creuses.

  • L'extension pg_cron d'origine est prise en charge pour une instance RDS exécutant PostgreSQL 10, PostgreSQL 11 ou PostgreSQL 12 avec une version mineure du moteur antérieure à 20201130. Toutefois, nous vous recommandons de mettre à jour la version mineure du moteur de votre instance RDS vers la dernière version pour utiliser la version améliorée de pg_cron. Pour plus d'informations, consultez Mettre à jour la version mineure du moteur. Si vous utilisiez pg_cron avant la mise à jour de la version mineure du moteur, recréez pg_cron pour profiter de ses nouvelles fonctionnalités. Notez que les tâches planifiées que vous avez configurées à l'aide de pg_cron sont perdues après la recréation de l'extension.

  • Vous devez utiliser un compte privilégié pour créer ou supprimer l'extension pg_cron. Pour plus d'informations sur la création d'un compte privilégié, consultez Créer un compte.

Utiliser l'extension

Important

Les commandes prises en charge par pg_cron peuvent être exécutées uniquement dans la base de données spécifiée par le paramètre cron.database_name, dont la valeur par défaut est postgres. Pour plus d'informations sur l'utilisation de pg_cron, consultez pg_cron.

  • Créer l'extension

    • Utiliser la fonctionnalité de gestion des extensions pour installer l'extension

      1. Connectez-vous à la console ApsaraDB RDS et accédez à la page Instances. Dans la barre de navigation supérieure, sélectionnez la région où réside votre instance RDS. Ensuite, recherchez l'instance RDS et cliquez sur son ID.

      2. Dans le volet de navigation de gauche, cliquez sur Plug-ins.

      3. Sur la page qui s'affiche, cliquez sur l'onglet Extension Management, puis sur l'onglet Uninstalled Extensions. Recherchez ensuite l'extension pg_cron, sélectionnez la base de données sur laquelle vous souhaitez installer l'extension, puis cliquez sur Install dans la colonne Actions.

      4. Dans la boîte de dialogue qui s'affiche, sélectionnez un compte privilégié et cliquez sur OK pour installer l'extension sur la base de données requise.

        Pendant l'installation de l'extension, l'état de l'instance RDS passe à Maintaining Instance. Si l'état de l'instance RDS passe à Running, l'extension est installée.

    • Exécuter l'instruction SQL requise pour installer l'extension

      1. Modifiez le paramètre requis pour ajouter pg_cron à la Running Value du paramètre shared_preload_libraries dans la console ApsaraDB RDS. Par exemple, vous pouvez modifier la Running Value de ce paramètre en « pg_stat_statements,auto_explain,pg_cron ». Pour plus d'informations, consultez Définir les paramètres de l'instance.

      2. Utilisez un compte privilégié pour vous connecter à la base de données requise et exécutez l'instruction suivante :

        CREATE EXTENSION pg_cron;
        Remarque

        Vous pouvez exécuter l'instruction SELECT * FROM pg_extension pour afficher les extensions installées.

  • Configurer une tâche planifiée

    SELECT cron.schedule('<Scheduled Task Name>','<Schedule>', '<Action>');
    Remarque

    Vous pouvez laisser le nom de la tâche planifiée non spécifié. Une fois la tâche planifiée configurée, l'ID de la tâche est renvoyé.

    Exemple :

    -- Delete expired data at 3:30 AM (GMT) every Saturday. 
    SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
    
    ----------
    
    -- Clear the disk at 10:00 AM (GMT) every day.
    SELECT cron.schedule('0 10 * * *', 'VACUUM');
  • Configurer une tâche planifiée dans une base de données spécifique

    SELECT cron.schedule_in_database('<Scheduled Task Name>', '<Schedule>', '<Action>', '<Specified Database>');
    Important

    Vous devez spécifier un nom de tâche planifiée. Sinon, la création de la tâche échouera.

    Si votre instance RDS for PostgreSQL exécute une version mineure du moteur antérieure à 20230530, utilisez la commande suivante pour exécuter une tâche planifiée. Si vous ne spécifiez pas de base de données, la tâche s'exécute dans la base de données spécifiée par le paramètre cron.database_name. Par défaut, cette base de données est postgres.

    SELECT cron.schedule('<Schedule>', '<Action>', '<Specified Database>')

    Exemple :

    SELECT cron.schedule_in_database('weekly-vacuum', '0 4 * * 0', 'VACUUM', 'some_other_database');
  • Afficher les tâches planifiées configurées

    SELECT * FROM cron.job;
  • Supprimer une tâche planifiée

    SELECT cron.unschedule(<Scheduled Task ID>);

    Si un nom est spécifié pour une tâche planifiée, vous pouvez également supprimer la tâche en spécifiant son nom.

    SELECT cron.unschedule('<Scheduled Task Name>');

    Exemple :

    -- Delete a scheduled task by its ID.
    SELECT cron.unschedule(43);
    -- Delete a scheduled task by its name.
    SELECT cron.unschedule('test01');
  • Supprimer l'extension

    DROP EXTENSION pg_cron;
    Remarque
    • Seuls les comptes privilégiés ont l'autorisation d'exécuter la commande précédente.

    • Dans l'onglet Installed Extensions de l'onglet Extension Management, vous pouvez désinstaller une extension.