Arrêter une requête
Normalement vous devriez pour la mise au point des requêtes faire des essais sur des jeux limités, par exemple avec utilisation de LIMIT 10.
Il vaut mieux également avant de lancer une requête exécuter un EXPLAIN qui vous indiquera le temps estimé de la requête.
Il faut peut-être rajouter des index, peut-être revoir la requête, peut-être même si elle est trop complexe la décomposer pour la mettre dans une fonction.
Si toutefois vous souhaitez arrêter une requête trop longue. Il existe une table système qui recense toutes les requêtes en cous dans la base. C'est la table pg_stat_activity.
select * from pg_stat_activity;
va renvoyer un tableau avec une ligne par processus serveur, montrant les informations liées à l'activité courante du processus, comme l'état et la requête en cours
Extrait :
Le détail des colonnes est donné ici :
pid nous permet d'identifier le processus serveur. La colonne query permet de vérifier la requête.
La colonne client_addr renvoi l'adresse IP des clients connectés (::1 signifie qu'il s'agit du poste local).
Il est possible d'avoir un sous-ensemble de ces informations, par exemple :
SELECT pg_stat_get_backend_pid(s.backendid) AS pid,
pg_stat_get_backend_activity(s.backendid) AS query
FROM (SELECT pg_stat_get_backend_idset() AS backendid) AS s;
va renvoyer quelque chose qui peut ressembler à :
La fonction pg_cancel_backend()
nous permet de tuer un processus serveur.
select pg_cancel_backend(6520) ;
Cette commande devrait retourner t (true). Si c'est bien le cas, dans quelques secondes, si vous relancez le select * from pg_stat_activity;
, elle devrait avoir disparu. Si ce n'est pas le cas, c'est peut être parce qu'elle est déjà terminée, parce qu'elle a déjà été tuée par ailleurs, ou que vous n'avez pas les droits pour terminer une requête.
Complément : Utilisation de l'outil 'Etat du serveur' de PgAdmin
PgAdmin propose l'outil tableau de bord. Le cas échéant l'ajouter en avec un clic droit dans la barre des onglets
Les icône à gauche permettent :
Terminer la session : Tue le processus serveur sélectionné
Annuler la requête : annule une requête en cours
Utiliser ces fonctions avec précaution car elles peuvent conduire à perturber le fonctionnement du serveur et à devoir le redémarrer.
Complément :
On trouve sur Internet des exemple de requêtes sur les tables systèmes qui peuvent être intéressantes pour un administrateur :
exemples :
Lister tous les index de toutes les tables :
Ce type de requête permet de procéder à des vérification après import de données en masse par exemple.