views:

107

answers:

2

Hi,

How would one go about cancelling execution of a query statement using pyscopg2 (the python Postgres driver)?

As an example, let's say I have the following code:

import psycopg2
cnx_string = "something_appropriate"

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

Then I want to cancel the execution of that long running query from another thread - what method would I have to call on the connection/cursor objects to do this?

+1  A: 

psycopg2's async execution support has been removed.

If you can use py-postgresql and its transactions (it's py3k), the internal implementation is asynchronous and supports being interrupted.

Tobu
Many thanks - not the answer I wanted, but useful nonetheless.
jwoolard
+1  A: 

You can cancel a query by calling the pg_cancel_backend(pid) PostgreSQL function in a separate connection.

You can know the PID of the backend to cancel from the connection.get_backend_pid() method of psycopg2 (available from version 2.0.8).

piro
Neat - many thanks
jwoolard