PHPCon Poland 2024


(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

pg_connection_busy Vérifie si la connexion PostgreSQL est occupée


pg_connection_busy(PgSql\Connection $connection): bool

pg_connection_busy() détermine si la connexion est occupée. Si elle est occupée, une requête a déjà été lancée, et est en cours. Si pg_get_result() est utilisée, elle sera alors bloquée.

Liste de paramètres


Une instance PgSql\Connection.

Valeurs de retour

Retourne true si la connexion est occupée, sinon false.


Version Description
8.1.0 Le paramètre connection attend désormais une instance de PgSql\Connection ; auparavant, une ressource était attendu.


Exemple #1 Exemple avec pg_connection_busy()

= pg_connect("dbname=publisher") or die("Connexion impossible");
$bs = pg_connection_busy($dbconn);
if (
$bs) {
'La connexion est occupée';
} else {
'La connexion est libre';

Voir aussi

add a note

User Contributed Notes 2 notes

levi at alliancesoftware dot com dot au
14 years ago
pg_connection_busy() returning true does not necessarily mean that there are results waiting for pg_get_result(); it also stays true for some time after a query that causes any sort of postgres error. (See
5 years ago
There doesn't seem to be any documented way of using this function here, and I'm sore most people trying this are going to default to using a busy loop if there is nothing else to do while waiting (in which case pg_get_result would be better, since it just blocks until a result is ready) or a sleep loop if trying to cancel the query after a certain time.

The C documentation for libPq reccomends using PQisBusy (the C equivalent of pg_connection_busy) by waiting on a socket instead, which lets you timeout if the state doesn't change after a certain period but immediately react if it changes. If you want to cancel after a timeout, you would have something like this :

class SomeKindOfTimeoutException extends Exception { }

SomeKindOfSQLErrorException extends Exception { }

query_with_timeout($conn, $query, $timeout_seconds) {
assert(pg_get_result($conn) === false); // Ensure that nothing is running

$socket = [pg_socket($conn)];
$null = [];

$dispatch_ok = pg_send_query($conn, $query);

$still_running = pg_connection_busy($conn);

$still_running) {
// "A typical application using these functions will have a main loop that uses select() or poll() to wait for all the conditions that it must respond to."
// "One of the conditions will be input available from the server, which in terms of select() means readable data on the file descriptor identified by PQsocket."
// PQisBusy is mapped to pg_connection_busy
stream_select($socket, $null, $null, $timeout_seconds); // Will wait on that socket until that happens or the timeout is reached
$still_running = pg_connection_busy($conn); // False on timeout, true if complete

// You could keep polling like that, this just breaks and throws immediately on first loop
if ($still_running) {
$cancel_ok = pg_cancel_query($conn);
throw new

$res = pg_get_result($conn);

try {
$error_msg = pg_result_error($res);
if (
$error_msg) throw new SomeKindOfSQLErrorException($error_msg);

} finally {

$conn_string = "host=localhost port=5433 dbname=postgres";
$db = pg_connect($conn_string);

query_with_timeout($db, "SELECT pg_sleep(10)", 3); // Will throw
To Top