This is in response to a message posted here asking how to have PHP cancel an in-progress PostgreSQL query when the user hits STOP on their web browser, or clicks to another page. Here is my solution. This is not a complete script, just fragments, but it should help. To the original poster: you can't just check pg_connection_busy() once, then call pg_get_result(), because pg_get_result will block waiting for the query to finish, and the user abort won't be seen. You must loop as shown below. [P.S. Do you really have a "select count(*) from test" which takes 2 minutes? Wow. I had trouble coming up with a test case taking 20 seconds on a PII-350MHz.] ......................................... # Make a global flag to indicate query in progress: $in_progress = 0; # Register a function to be called at shutdown: function halted() { global $db, $in_progress; if ($in_progress) { pg_cancel_query($db); } } register_shutdown_function('halted'); # Connect to the database and check for errors (OMITTED): $db = pg_connect(...); # Issue the query and set the flag telling the shutdown function to cancel it: if (!pg_send_query($db, $query)) { ... error handling omitted ... } $in_progress = 1; # Now we loop waiting for the query to complete or the user to cancel. # Display a message to the user telling how long it has been. flush(); $base = time(); while (pg_connection_busy($db)) { sleep(2); $delta = time() - $base; echo "<br>... $delta seconds\n"; flush(); } # All done, and it took $delta seconds. # Don't let the shutdown handler try to cancel the query: $in_progress = 0; # Fetch the query result: $r = pg_get_result($db); # Check $r for errors (omitted), display results (omitted). .........................................