2010-01-11 7 views
4

Comment procéder pour annuler l'exécution d'une instruction de requête à l'aide de pyscopg2 (le pilote python Postgres)?Annuler l'exécution de la requête dans pyscopg2

À titre d'exemple, disons que j'ai le code suivant:

import psycopg2 
cnx_string = "something_appropriate" 

conn = psycopg2.connect(cnx_string) 
cur = conn.cursor() 
cur.execute("long_running_query") 

Je veux annuler l'exécution de cette requête longue en cours d'exécution d'un autre thread - quelle méthode aurais-je faire appel à la connexion/objets curseur pour le faire?

Répondre

4

Vous pouvez annuler une requête en appelant la fonction PostgreSQL pg_cancel_backend(pid) dans une connexion distincte.

Vous pouvez connaître le PID du backend à annuler à partir de la méthode connection.get_backend_pid() de psycopg2 (disponible à partir de la version 2.0.8).

+1

Notez que l'utilisateur qui envoie 'pg_cancel_backend (pid)' doit être un super-utilisateur. – raphael

0

La prise en charge d'exécution asynchrone de psycopg2 a été removed.

Si vous pouvez utiliser py-postgresql et son transactions (c'est py3k), l'implémentation interne est asynchrone et supporte l'interruption.

+0

Merci beaucoup - pas la réponse que je voulais, mais utile néanmoins. – jwoolard

+0

votre lien est cassé – raphael