pg_get_notify

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

pg_get_notifyObtém mensagem SQL NOTIFY

Descrição

pg_get_notify(PgSql\Connection $connection, int $mode = PGSQL_ASSOC): array|false

pg_get_notify() obtém notificações geradas por um comando SQL NOTIFY. Para receber notificações, o comando SQL LISTEN deve ser emitido.

Parâmetros

connection

Uma instância de PgSql\Connection.

mode

Um parâmetro opcional que controla como o array retornado será indexado. mode é uma constante e pode assumir os seguintes valores: PGSQL_ASSOC, PGSQL_NUM e PGSQL_BOTH. Usando PGSQL_NUM, a função retornará um array com índices numéricos, usando PGSQL_ASSOC ela retornará apenas índices associativos enquanto PGSQL_BOTH retornará índices numéricos e associativos.

Valor Retornado

Um array contendo o nome da mensagem NOTIFY e o PID de backend. Se for compatível com o servidor, o array também conterá a versão do servidor e a carga útil. Caso contrário, se nenhum NOTIFY estiver aguardando, então false é retornado.

Registro de Alterações

Versão Descrição
8.1.0 O parâmetro connection agora espera uma instância de PgSql\Connection; anteriormente, um resource era esperado.

Exemplos

Exemplo #1 Mensagem NOTIFY do PostgreSQL

<?php
$conn
= pg_pconnect("dbname=publisher");
if (!
$conn) {
echo
"Um erro ocorreu.\n";
exit;
}

// Ouve a mensagem 'author_updated' de outros processos
pg_query($conn, 'LISTEN author_updated;');
$notify = pg_get_notify($conn);
if (!
$notify) {
echo
"Sem mensagens\n";
} else {
print_r($notify);
}
?>

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 2 notes

up
5
glococo at gmail dot com
8 years ago
Instant yet Simple PHP notification with HTML5 Server-Sent Eventssse.php<?php$dbconn = new PDO("pgsql:host=localhost;dbname=mydb", "pduser", "userpass");$dbconn->exec('LISTEN "channel_name"');   // those doublequotes are very importantheader("X-Accel-Buffering: no"); // disable ngnix webServer bufferingheader("Content-Type: text/event-stream");header("Cache-Control: no-cache");ob_end_flush();  // close PHP output buffering$inc=0;while (1) {  $result = "";  // wait for one Notify 10seconds instead of using sleep(10)  $result = $dbconn->pgsqlGetNotify(PDO::FETCH_ASSOC, 10000);   if ( $result ) {         echo "id: $inc\ndata: ".stripslashes(json_encode($result))."\n\n";        $inc++;  }  flush();}?>Tested with HTML+JS sample file from Mozilla web site (ssedemo.php)
up
0
david at frankieandshadow dot com
4 years 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