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

pg_get_notifyOttiene il messaggio SQL NOTIFY


pg_get_notify(resource $connection, int $result_type = ?): array

pg_get_notify() riceve notifiche generate da un comando SQL NOTIFY. Per ricevere le notifiche, è necessario eseguire il comando SQL LISTEN.

Elenco dei parametri


Risorsa di connessione al database PostgreSQL.


Un parametro facoltativo che controlla come viene indicizzato l'array restituito. result_type è una costante e può assumere i seguenti valori: PGSQL_ASSOC, PGSQL_NUM e PGSQL_BOTH. Usando PGSQL_NUM, pg_get_notify() restituirà un array con indici numerici, usando PGSQL_ASSOC restituirà solo indici associativi mentre PGSQL_BOTH, l'impostazione predefinita, restituirà indici sia numerici che associativi.

Valori restituiti

Un array contenente il nome del messaggio NOTIFY e il PID di backend. A partire da PHP 5.4.0 e se supportato dal server, l'array contiene anche la versione del server e il payload. Altrimenti se non è in attesa alcuna NOTIFY, allora viene restituito false.


Example #1 Messaggio NOTIFY di PostgreSQL

if (!
$conn) {
"Si è verificato un errore.\n";

// Ascolta il messaggio 'author_updated' da altri processi
pg_query($conn'LISTEN author_updated;');
$notify pg_get_notify($conn);
if (!
$notify) {
"Nessun messaggio\n";
} else {

Vedere anche:

add a note add a note

User Contributed Notes 2 notes

glococo at gmail dot com
5 years ago
Instant yet Simple PHP notification with HTML5 Server-Sent Events

= new PDO("pgsql:host=localhost;dbname=mydb", "pduser", "userpass");
$dbconn->exec('LISTEN "channel_name"');   // those doublequotes are very important

header("X-Accel-Buffering: no"); // disable ngnix webServer buffering
header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");
ob_end_flush();  // close PHP output buffering

while (
1) {
$result = "";
// wait for one Notify 10seconds instead of using sleep(10)
$result = $dbconn->pgsqlGetNotify(PDO::FETCH_ASSOC, 10000);

  if (
$result ) {
"id: $inc\ndata: ".stripslashes(json_encode($result))."\n\n";


Tested with HTML+JS sample file from Mozilla web site (ssedemo.php)
david at frankieandshadow dot com
1 year ago
It appears that pg_get_notify does not distinguish between no message waiting and a failure when checking - both seem to return FALSE.

I had to add a pg_check_connection(...) before pg_get_notify to check the connection is still alive (it's quite likely to be a long-standing connection with pg_get_notify as you'll be polling waiting for something to happen). In my case the remote database server had a hiccup, and without pg_check_connection the listeners failed to notice, so never saw later notifications.
To Top