DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

notify(5)





NAME

       NOTIFY - generate a notification


SYNOPSIS

       NOTIFY name


DESCRIPTION

       The  NOTIFY  command  sends  a  notification event to each
       client application that  has  previously  executed  LISTEN
       name  for  the  specified notification name in the current
       database.

       NOTIFY provides a simple form of  signal  or  interprocess
       communication  mechanism  for  a  collection  of processes
       accessing  the  same  PostgreSQL  database.   Higher-level
       mechanisms can be built by using tables in the database to
       pass additional data (beyond  a  mere  notification  name)
       from notifier to listener(s).

       The  information  passed  to the client for a notification
       event includes the notification  name  and  the  notifying
       session's  server  process  PID.  It is up to the database
       designer to define the notification  names  that  will  be
       used in a given database and what each one means.

       Commonly, the notification name is the same as the name of
       some table in the database, and the  notify  event  essen-
       tially means, ``I changed this table, take a look at it to
       see what's new''. But no such association is  enforced  by
       the  NOTIFY  and  LISTEN commands. For example, a database
       designer could use several different notification names to
       signal different sorts of changes to a single table.

       When NOTIFY is used to signal the occurrence of changes to
       a particular table, a useful programming technique  is  to
       put  the  NOTIFY  in  a  rule  that  is triggered by table
       updates.  In this way, notification happens  automatically
       when  the table is changed, and the application programmer
       can't accidentally forget to do it.

       NOTIFY interacts with SQL transactions in  some  important
       ways.  Firstly,  if a NOTIFY is executed inside a transac-
       tion, the notify events are not delivered until and unless
       the  transaction  is committed. This is appropriate, since
       if the transaction is aborted, all the commands within  it
       have  had  no effect, including NOTIFY. But it can be dis-
       concerting if one is expecting the notification events  to
       be delivered immediately. Secondly, if a listening session
       receives a notification signal while it is within a trans-
       action,  the  notification  event will not be delivered to
       its connected client until just after the  transaction  is
       completed  (either  committed or aborted). Again, the rea-
       soning is that if a notification were delivered  within  a
       transaction  that  was  later  aborted, one would want the
       notification to be undone somehow -- but the server cannot
       ``take  back''  a  notification once it has sent it to the
       client.  So notification events are only delivered between
       transactions.  The  upshot  of  this  is that applications
       using NOTIFY for real-time signaling should  try  to  keep
       their transactions short.

       NOTIFY behaves like Unix signals in one important respect:
       if the same notification name is signaled  multiple  times
       in quick succession, recipients may get only one notifica-
       tion event for several executions of NOTIFY. So  it  is  a
       bad   idea  to  depend  on  the  number  of  notifications
       received. Instead, use NOTIFY to wake up applications that
       need  to  pay  attention  to something, and use a database
       object (such as a sequence) to keep track of what happened
       or how many times it happened.

       It  is common for a client that executes NOTIFY to be lis-
       tening on the same notification name itself. In that  case
       it  will  get back a notification event, just like all the
       other listening sessions.  Depending  on  the  application
       logic,  this  could  result  in useless work, for example,
       reading a database table to find  the  same  updates  that
       that  session just wrote out. It is possible to avoid such
       extra work by noticing  whether  the  notifying  session's
       server  process  PID  (supplied  in the notification event
       message) is the same as one's own session's PID (available
       from  libpq).  When  they  are  the same, the notification
       event is one's own work bouncing back, and can be ignored.
       (Despite what was said in the preceding paragraph, this is
       a safe  technique.   PostgreSQL  keeps  self-notifications
       separate  from notifications arriving from other sessions,
       so you cannot miss an  outside  notification  by  ignoring
       your own notifications.)


PARAMETERS

       name   Name  of the notification to be signaled (any iden-
              tifier).


EXAMPLES

       Configure and execute a listen/notify sequence from psql:

       LISTEN virtual;
       NOTIFY virtual;
       Asynchronous notification "virtual" received from server process with PID 8448.


COMPATIBILITY

       There is no NOTIFY statement in the SQL standard.


SEE ALSO

       LISTEN [listen(5)], UNLISTEN [unlisten(l)]

SQL - Language Statements   2008-01-03                   NOTIFY()

Man(1) output converted with man2html