🧚 Écoute ! Beekeeper Studio est une interface de base de données rapide, moderne et open source Télécharger
17 juillet 2024 Par Matthew Rathbone

Tu peux mettre fin à une session problématique avec la fonction pg_terminate_backend.

SELECT pg_terminate_backend(PID);

Identifier les requêtes longues

Avant de mettre fin à une session dans PostgreSQL, tu dois savoir quelle session cibler. Pour trouver les requêtes longues, tu peux utiliser la vue pg_stat_activity et filtrer sur les colonnes state et query_start.

SELECT pid, usename, state, query, now() - query_start AS duration
FROM pg_stat_activity
WHERE state = 'active'
ORDER BY duration DESC;

Résultat attendu :

pid usename state query duration
1236 appuser active UPDATE orders SET status=’paid’; 00:20:34
1234 postgres active SELECT * FROM users; 00:05:12

Mettre fin à une session

Une fois la session problématique identifiée, tu peux y mettre fin avec la fonction pg_terminate_backend.

SELECT pg_terminate_backend(1236);

Cette commande coupe de force la connexion au backend. Elle envoie un signal SIGTERM au processus et lui permet de s’arrêter proprement, en lui laissant une dernière chance de faire le ménage avant de se terminer. Avant d’exécuter cette commande, vérifie bien la nature des requêtes en cours et examine le résultat.

Automatiser l’arrêt des sessions

Dans les environnements où les problèmes de session sont fréquents, tu peux automatiser l’arrêt des sessions avec un script. Voici un exemple de script simple pour mettre fin aux requêtes longues :

DO $$ 
DECLARE
    r RECORD;
BEGIN
    FOR r IN
        SELECT pid 
        FROM pg_stat_activity 
        WHERE state = 'active' 
        AND now() - query_start > interval '10 minutes'
    LOOP
        PERFORM pg_terminate_backend(r.pid);
    END LOOP;
END $$;

Ce script met fin à toute session active qui tourne depuis plus de 10 minutes.

Utiliser la fonction pg_cancel_backend

Parfois, tu ne veux pas tuer une session mais simplement annuler la requête qu’elle exécute. Dans ce cas, tu peux utiliser la fonction pg_cancel_backend.

SELECT pg_cancel_backend(PID);

Remplace PID par l’identifiant du processus de la session dont tu veux annuler la requête.

Cette commande envoie un SIGINT au processus pour annuler la requête. C’est moins brutal que pg_terminate_backend, et la session elle-même reste active, même si la requête en cours est annulée.

N’oublie pas que pg_cancel_backend et pg_terminate_backend exigent tous deux un accès superutilisateur. Si la session que tu essaies d’arrêter ou d’annuler appartient à un superutilisateur, il te faudra les privilèges superutilisateur pour exécuter ces commandes.

Conclusion

Tu sais maintenant comment tuer des sessions dans PostgreSQL. Gérer les sessions dans PostgreSQL est une compétence importante pour les administrateurs de bases de données. En identifiant et en arrêtant efficacement les sessions problématiques, tu peux mieux préserver les performances et la fiabilité de tes bases de données PostgreSQL. Utilise ces commandes avec discernement : mal employées, elles peuvent interrompre des traitements de données importants et compromettre l’intégrité de tes bases de données PostgreSQL.

D’autres articles qui pourraient te plaire :

Beekeeper Studio est une interface de base de données gratuite & open source

Le meilleur outil de requêtes & éditeur SQL que j’aie jamais utilisé. Il m’offre tout ce dont j’ai besoin pour gérer ma base de données. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio est rapide, intuitif et facile à utiliser. Beekeeper prend en charge plein de bases de données et fonctionne parfaitement sous Windows, Mac et Linux.

La version Linux de Beekeeper est 100% complète : rien de bâclé, aucun compromis sur les fonctionnalités.

Ce que les utilisateurs disent de Beekeeper Studio

★★★★★
« Beekeeper Studio a complètement remplacé mon ancien workflow SQL. C’est rapide, intuitif, et ça rend le travail sur les bases de données à nouveau agréable. »
— Alex K., développeur de bases de données
★★★★★
« J’ai essayé beaucoup d’interfaces de base de données, mais Beekeeper trouve l’équilibre parfait entre fonctionnalités et simplicité. Ça marche, tout simplement. »
— Sarah M., ingénieure full stack