pg_get_notify

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

pg_get_notifyПолучение SQL NOTIFY сообщения

Описание

array pg_get_notify ( resource $connection [, int $result_type ] )

pg_get_notify() получает уведомления, сгенерированные командой SQL NOTIFY. Для получения уведомлений используйте команду SQL LISTEN.

Список параметров

connection

Ресурс соединения с базой данных PostgreSQL.

result_type

Необязательный аргумент, указывающий, каким образом возвращаемый массив (array) будет проиндексирован.result_type - константа, и может принимать следующие значения: PGSQL_ASSOC, PGSQL_NUM или PGSQL_BOTH. При передаче PGSQL_ASSOC функция pg_get_notify() вернет ассоциативный массив, при передаче PGSQL_NUM - численно индексированный, в случае PGSQL_BOTH (по умолчанию) будут возвращены оба массива.

Возвращаемые значения

Массив(array), содержащий NOTIFY сообщение и PID сервера БД. Если никаких уведомлений не ожидается, функция вернет FALSE.

Примеры

Пример #1 PostgreSQL NOTIFY сообщение

<?php 
$conn 
pg_pconnect("dbname=publisher");
if (!
$conn) {
  echo 
"Произошла ошибка.\n";
  exit;
}

// Слушаем сообщение 'author_updated' из другого процесса
pg_query($conn'LISTEN author_updated;');
$notify pg_get_notify($conn);
if (!
$notify) {
  echo 
"Нет сообщений\n";
} else {
  
print_r($notify);
}
?>

Смотрите также

  • pg_get_pid() - Получает ID процесса сервера БД

Коментарии

Instant yet Simple PHP notification with HTML5 Server-Sent Events

sse.php
<?php
$dbconn 
= 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
$inc=0;

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

  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)
2017-06-17 23:12:24
http://php5.kiev.ua/manual/ru/function.pg-get-notify.html
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.
2020-10-22 16:52:28
http://php5.kiev.ua/manual/ru/function.pg-get-notify.html

    Поддержать сайт на родительском проекте КГБ