OSDN Git Service

Add more new pages.
authorThomas G. Lockhart <lockhart@fourpalms.org>
Wed, 2 Sep 1998 03:01:02 +0000 (03:01 +0000)
committerThomas G. Lockhart <lockhart@fourpalms.org>
Wed, 2 Sep 1998 03:01:02 +0000 (03:01 +0000)
doc/src/sgml/ref/commands.sgml
doc/src/sgml/ref/listen.sgml [new file with mode: 0644]
doc/src/sgml/ref/load.sgml [new file with mode: 0644]
doc/src/sgml/ref/lock.sgml [new file with mode: 0644]
doc/src/sgml/ref/move.sgml [new file with mode: 0644]
doc/src/sgml/ref/notify.sgml [new file with mode: 0644]

index d151fe0..ebf8091 100644 (file)
 &declare;
 &delete;
 &dropFunction;
+&listen;
+&load;
+&lock;
+&move;
+&notify;
 &reset;
 &revoke;
 &rollback;
diff --git a/doc/src/sgml/ref/listen.sgml b/doc/src/sgml/ref/listen.sgml
new file mode 100644 (file)
index 0000000..2ed7ab8
--- /dev/null
@@ -0,0 +1,148 @@
+<REFENTRY ID="SQL-LISTEN">
+<REFMETA>
+<REFENTRYTITLE>
+LISTEN
+</REFENTRYTITLE>
+<REFMISCINFO>SQL - Language Statements</REFMISCINFO>
+</REFMETA>
+<REFNAMEDIV>
+<REFNAME>
+LISTEN
+</REFNAME>
+<REFPURPOSE>
+Listen for notification on a relation
+</REFPURPOSE>
+
+<REFSYNOPSISDIV>
+<REFSYNOPSISDIVINFO>
+<DATE>1998-09-01</DATE>
+</REFSYNOPSISDIVINFO>
+<SYNOPSIS>
+LISTEN <REPLACEABLE CLASS="PARAMETER">classname</REPLACEABLE>
+</SYNOPSIS>
+
+<REFSECT2 ID="R2-SQL-LISTEN-1">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+Inputs
+</TITLE>
+<PARA>
+</PARA>
+<VARIABLELIST>
+<VARLISTENTRY>
+<TERM>
+<REPLACEABLE CLASS="PARAMETER">classname</REPLACEABLE>
+</TERM>
+<LISTITEM>
+<PARA>
+Table object used for notification.
+
+</VARIABLELIST>
+
+</REFSECT2>
+
+<REFSECT2 ID="R2-SQL-LISTEN-2">
+<REFSECT2INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT2INFO>
+<TITLE>
+Outputs
+</TITLE>
+<PARA>
+</PARA>
+<VARIABLELIST>
+<VARLISTENTRY>
+<TERM>
+LISTEN
+</TERM>
+<LISTITEM>
+<PARA>
+Message returned upon successful completion of registration.
+
+</VARIABLELIST>
+
+</REFSECT2>
+</REFSYNOPSISDIV>
+
+<REFSECT1 ID="R1-SQL-LISTEN-1">
+<REFSECT1INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT1INFO>
+<TITLE>
+Description
+</TITLE>
+<PARA>
+LISTEN is used to register the current backend as a listener on the relation
+<REPLACEABLE CLASS="PARAMETER">classname</REPLACEABLE>.
+When the command 
+<command>NOTIFY <REPLACEABLE CLASS="PARAMETER">classname</REPLACEABLE></command>
+is called either from within a rule or at the query level, the
+frontend applications corresponding to the listening backends
+are notified.  When the backend process exits, this registration
+is cleared.
+
+<para>
+This event notification is performed through the libpq protocol
+and frontend application interface.  The application program
+must call the routine
+<function>PQnotifies</function>
+in order to find out the name of the class to which a given
+notification corresponds.  If this code is not included in
+the application, the event notification will be queued and
+never be processed.
+
+<REFSECT2 ID="R2-SQL-LISTEN-3">
+<REFSECT2INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT2INFO>
+<TITLE>
+Notes
+</TITLE>
+<para>
+Note that <REPLACEABLE CLASS="PARAMETER">classname</REPLACEABLE>
+needs not to be a valid class name but can be any string valid as a name up to 32
+characters long.
+
+<para>
+A restriction in some previous releases of
+ <productname>Postgres</productname> that a
+<REPLACEABLE CLASS="PARAMETER">classname</REPLACEABLE>
+which does not correspond to an actual table must be enclosed in double-quotes
+is no longer present.
+
+</REFSECT2>
+
+<REFSECT1 ID="R1-SQL-LISTEN-2">
+<TITLE>
+Usage
+</TITLE>
+<PARA>
+<ProgramListing>
+postgres=> listen virtual;
+LISTEN
+postgres=> notify virtual;
+NOTIFY
+ASYNC NOTIFY of 'virtual' from backend pid '11239' received
+</ProgramListing>
+
+</REFSECT1>
+
+<REFSECT1 ID="R1-SQL-LISTEN-3">
+<TITLE>
+Compatibility
+</TITLE>
+<PARA>
+</PARA>
+
+<REFSECT2 ID="R2-SQL-LISTEN-4">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+SQL92
+</TITLE>
+<PARA>
+   There is no LISTEN statement in <acronym>SQL92</acronym>.
+</REFENTRY>
diff --git a/doc/src/sgml/ref/load.sgml b/doc/src/sgml/ref/load.sgml
new file mode 100644 (file)
index 0000000..a726751
--- /dev/null
@@ -0,0 +1,157 @@
+<REFENTRY ID="SQL-LOAD">
+<REFMETA>
+<REFENTRYTITLE>
+LOAD
+</REFENTRYTITLE>
+<REFMISCINFO>SQL - Language Statements</REFMISCINFO>
+</REFMETA>
+<REFNAMEDIV>
+<REFNAME>
+LOAD
+</REFNAME>
+<REFPURPOSE>
+Dynamically loads an object file
+</REFPURPOSE>
+
+<REFSYNOPSISDIV>
+<REFSYNOPSISDIVINFO>
+<DATE>1998-09-01</DATE>
+</REFSYNOPSISDIVINFO>
+<SYNOPSIS>
+<REPLACEABLE CLASS="PARAMETER">
+</REPLACEABLE>
+LOAD '<REPLACEABLE CLASS="PARAMETER">filename</REPLACEABLE>'
+</SYNOPSIS>
+
+<REFSECT2 ID="R2-SQL-LOAD-1">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+Inputs
+</TITLE>
+<PARA>
+</PARA>
+<VARIABLELIST>
+<VARLISTENTRY>
+<TERM>
+<REPLACEABLE CLASS="PARAMETER">filename</REPLACEABLE>
+</TERM>
+<LISTITEM>
+<PARA>
+Object file for dynamic loading.
+
+</VARIABLELIST>
+
+</REFSECT2>
+
+<REFSECT2 ID="R2-SQL-LOAD-2">
+<REFSECT2INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT2INFO>
+<TITLE>
+Outputs
+</TITLE>
+<PARA>
+</PARA>
+<VARIABLELIST>
+<VARLISTENTRY>
+<TERM>
+LOAD
+</TERM>
+<LISTITEM>
+<PARA>
+
+</VARIABLELIST>
+
+</REFSECT2>
+</REFSYNOPSISDIV>
+
+<REFSECT1 ID="R1-SQL-LOAD-1">
+<REFSECT1INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT1INFO>
+<TITLE>
+Description
+</TITLE>
+<PARA>
+Loads an object (or ".o") file into the 
+<productname>Postgres</productname> backend address space.  Once a
+file is loaded, all functions in that file can be accessed.  This
+function is used in support of ADT's.
+
+<para>
+If a file is not loaded using
+<command>LOAD</command>, 
+the file will be loaded automatically the first time the
+function is called by <productname>Postgres</productname>.
+<command>LOAD</command>
+can also be used to reload an object file if it has been edited and
+recompiled.  Only objects created from C language files are supported
+at this time.
+
+<REFSECT2 ID="R2-SQL-LOAD-3">
+<REFSECT2INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT2INFO>
+<TITLE>
+Notes
+</TITLE>
+<PARA>
+Functions in loaded object files should not call functions in other
+object files loaded through the
+<command>LOAD</command>
+command, meaning, for example, that all functions in file A should
+call each other, functions in the standard or math libraries, or in
+Postgres itself.  They should not call functions defined in a different
+loaded file B.  This is because if B is reloaded, the Postgres loader is
+not able to relocate the calls from the functions in A into
+the new address space of B.  If B is not reloaded, however, there will
+not be a problem.
+
+<para>
+Object files must be compiled to contain position independent code.
+For example, 
+on DECstations you must use
+<application>/bin/cc</application>
+with the "-G 0" option when compiling object files to be
+loaded.
+
+<para>
+Note that if you are porting <productname>Postgres</productname>
+ to a new platform, <command>LOAD</command>
+will have to work in order to support ADTs.
+
+</REFSECT2>
+
+<REFSECT1 ID="R1-SQL-LOAD-2">
+<TITLE>
+Usage
+</TITLE>
+<PARA>
+<ProgramListing>
+   --Load the file /usr/postgres/demo/circle.o
+   --
+   LOAD "/usr/postgres/demo/circle.o"
+</ProgramListing>
+        
+</REFSECT1>
+
+<REFSECT1 ID="R1-SQL-LOAD-3">
+<TITLE>
+Compatibility
+</TITLE>
+<PARA>
+</PARA>
+
+<REFSECT2 ID="R2-SQL-LOAD-4">
+<REFSECT2INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT2INFO>
+<TITLE>
+SQL92
+</TITLE>
+<PARA>
+There is no LOAD statement in <acronym>SQL92</acronym>.
+
+</REFENTRY>
diff --git a/doc/src/sgml/ref/lock.sgml b/doc/src/sgml/ref/lock.sgml
new file mode 100644 (file)
index 0000000..480ad84
--- /dev/null
@@ -0,0 +1,167 @@
+<REFENTRY ID="SQL-LOCK">
+<REFMETA>
+<REFENTRYTITLE>
+LOCK
+</REFENTRYTITLE>
+<REFMISCINFO>SQL - Language Statements</REFMISCINFO>
+</REFMETA>
+<REFNAMEDIV>
+<REFNAME>
+LOCK
+</REFNAME>
+<REFPURPOSE>
+Explicit lock of a table inside a transaction
+</REFPURPOSE>
+
+<REFSYNOPSISDIV>
+<REFSYNOPSISDIVINFO>
+<DATE>1998-09-01</DATE>
+</REFSYNOPSISDIVINFO>
+<SYNOPSIS>
+LOCK [TABLE] <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE>
+</SYNOPSIS>
+
+<REFSECT2 ID="R2-SQL-LOCK-1">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+Inputs
+</TITLE>
+<PARA>
+</PARA>
+<VARIABLELIST>
+<VARLISTENTRY>
+<TERM>
+<REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE>
+</TERM>
+<LISTITEM>
+<PARA>
+          The name of an existing table to lock.
+</VARIABLELIST>
+
+</REFSECT2>
+
+<REFSECT2 ID="R2-SQL-LOCK-2">
+<REFSECT2INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT2INFO>
+<TITLE>
+Outputs
+</TITLE>
+<PARA>
+</PARA>
+<VARIABLELIST>
+<VARLISTENTRY>
+<TERM>
+DELETE 0
+</TERM>
+<LISTITEM>
+<PARA>
+Message returned on a successful lock.
+<command>LOCK</command> is implemented as a 
+<command>DELETE FROM <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE></command>
+which is guaranteed to not delete any rows.
+
+<VARLISTENTRY>
+<TERM>
+ERROR <REPLACEABLE CLASS="PARAMETER">table</REPLACEABLE>: Table does not exist.
+</TERM>
+<LISTITEM>
+<PARA>
+Message returned if table don't exist.
+
+</VARIABLELIST>
+
+</REFSECT2>
+</REFSYNOPSISDIV>
+
+<REFSECT1 ID="R1-SQL-LOCK-1">
+<REFSECT1INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT1INFO>
+<TITLE>
+Description
+</TITLE>
+<PARA>
+   The LOCK statement locks in exclusive mode a table inside
+   a transaction. The classic use for this is
+   the case where you want to select some data, then
+   update it inside a transaction.
+   If you don't explicit lock a table using LOCK statement, it will be
+   implicit locked only at first UPDATE, INSERT or DELETE operation.
+   If you don't exclusive lock the table before the select, some
+   other user may also read the selected data, and try and do
+   their own update, causing a deadlock while you both wait
+   for the other to release the select-induced shared lock so
+   you can get an exclusive lock to do the update.
+
+<para>
+   Another example of deadlock is where one user locks one
+   table, and another user locks a second table. While both
+   keep their existing locks, the first user tries to lock
+   the second user's table, and the second user tries to lock
+   the first user's table. Both users deadlock waiting for
+   the tables to become available. The only solution to this
+   is for both users to lock tables in the same order, so
+   user's lock acquisitions and requests to not form a deadlock.
+        
+<REFSECT2 ID="R2-SQL-LOCK-3">
+<REFSECT2INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT2INFO>
+<TITLE>
+Notes
+</TITLE>
+<PARA>
+LOCK is a PostgreSQL language extension.
+<para>
+LOCK works only inside transactions.
+
+<note>
+<title>Bug</title>
+<para>
+If the locked table is dropped then it will be automatically
+            unlocked even if a transaction is still in progress.
+</note>
+
+</REFSECT2>
+
+<REFSECT1 ID="R1-SQL-LOCK-2">
+<TITLE>
+Usage
+</TITLE>
+<PARA>
+</PARA>
+<ProgramListing>
+   --Explicit locking to prevent deadlock:
+   --
+   BEGIN WORK;
+     LOCK films;
+     SELECT * FROM films;
+     UPDATE films SET len = INTERVAL '100 minute'
+                WHERE len = INTERVAL '117 minute';
+   COMMIT WORK;
+</ProgramListing>
+        
+</REFSECT1>
+
+<REFSECT1 ID="R1-SQL-LOCK-3">
+<TITLE>
+Compatibility
+</TITLE>
+<PARA>
+</PARA>
+
+<REFSECT2 ID="R2-SQL-LOCK-4">
+<REFSECT2INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT2INFO>
+<TITLE>
+SQL92
+</TITLE>
+<PARA>
+   There is no <command>LOCK TABLE</command> in <acronym>SQL92</acronym>,
+ it uses SET TRANSACTION to specify
+   concurrency level on transactions.
+</REFENTRY>
diff --git a/doc/src/sgml/ref/move.sgml b/doc/src/sgml/ref/move.sgml
new file mode 100644 (file)
index 0000000..af81ac2
--- /dev/null
@@ -0,0 +1,199 @@
+<REFENTRY ID="SQL-MOVE">
+<REFMETA>
+<REFENTRYTITLE>
+MOVE
+</REFENTRYTITLE>
+<REFMISCINFO>SQL - Language Statements</REFMISCINFO>
+</REFMETA>
+<REFNAMEDIV>
+<REFNAME>
+MOVE
+</REFNAME>
+<REFPURPOSE>
+Moves cursor position
+</REFPURPOSE>
+                
+<REFSYNOPSISDIV>
+<REFSYNOPSISDIVINFO>
+<DATE>1998-09-01</DATE>
+</REFSYNOPSISDIVINFO>
+<SYNOPSIS>
+MOVE [ <REPLACEABLE CLASS="PARAMETER">selector</REPLACEABLE> ] { [ <REPLACEABLE CLASS="PARAMETER">#</REPLACEABLE> | ALL ] } IN <REPLACEABLE CLASS="PARAMETER">cursor</REPLACEABLE>
+</SYNOPSIS>
+
+<REFSECT2 ID="R2-SQL-MOVE-1">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+Inputs
+</TITLE>
+<PARA>
+</PARA>
+<VARIABLELIST>
+<VARLISTENTRY>
+<TERM>
+<REPLACEABLE CLASS="PARAMETER">selector</REPLACEABLE>
+</TERM>
+<LISTITEM>
+<PARA>
+
+<variablelist>
+<varlistentry>
+<term>
+FORWARD
+</term>
+<listitem>
+<para>
+Skip next row(s), it is assumed by default
+                       if selector is omitted.
+
+<varlistentry>
+<term>
+BACKWARD
+</term>
+<listitem>
+<para>
+Skip previous row(s).
+
+</variablelist>
+
+<VARLISTENTRY>
+<TERM>
+<REPLACEABLE CLASS="PARAMETER">#</REPLACEABLE>
+</TERM>
+<LISTITEM>
+<PARA>
+         An unsigned integer that specify how many rows to skip.
+
+<VARLISTENTRY>
+<TERM>
+ALL
+</TERM>
+<LISTITEM>
+<PARA>
+Skip all remaining rows.
+
+<VARLISTENTRY>
+<TERM>
+<REPLACEABLE CLASS="PARAMETER">cursor</REPLACEABLE>
+</TERM>
+<LISTITEM>
+<PARA>
+         An open cursor's name.
+
+</VARIABLELIST>
+
+</REFSECT2>
+
+<REFSECT2 ID="R2-SQL-MOVE-2">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+Outputs
+</TITLE>
+<PARA>
+</PARA>
+<VARIABLELIST>
+<VARLISTENTRY>
+<TERM>
+MOVE
+</TERM>
+<LISTITEM>
+<PARA>
+         Message returned if successfully. 
+
+<VARLISTENTRY>
+<TERM>
+NOTICE:  PerformPortalFetch: portal <REPLACEABLE CLASS="PARAMETER">cursor</REPLACEABLE> not found.
+</TERM>
+<LISTITEM>
+<PARA>
+         If cursor is not declared.
+
+</VARIABLELIST>
+
+</REFSECT2>
+</REFSYNOPSISDIV>
+
+<REFSECT1 ID="R1-SQL-MOVE-1">
+<REFSECT1INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT1INFO>
+<TITLE>
+Description
+</TITLE>
+<PARA>
+   MOVE allows a user to move cursor position for specified
+   number of rows. MOVE works like fetch command: it
+   fetches rows, but put them nowhere.
+
+<REFSECT2 ID="R2-SQL-MOVE-3">
+<REFSECT2INFO>
+<DATE>1998-04-15</DATE>
+</REFSECT2INFO>
+<TITLE>
+Notes
+</TITLE>
+<PARA>
+MOVE is a <productname>Postgres</productname> language extension.
+
+<para>
+   Refer to FETCH statements for further description
+     of valid arguments.
+   Refer to DECLARE statements to declare a cursor.
+   Refer to BEGIN WORK, COMMIT WORK, ROLLBACK WORK statements
+     for further information about transactions.
+
+</REFSECT2>
+
+<REFSECT1 ID="R1-SQL-MOVE-2">
+<TITLE>
+Usage
+</TITLE>
+<PARA>
+<ProgramListing>
+   --set up and use a cursor:
+   --
+   BEGIN WORK;
+     DECLARE liahona CURSOR 
+         FOR SELECT * FROM films;
+   
+   --Skip first 5 rows:
+   --
+     MOVE FORWARD 5 IN liahona;
+   
+   --Fetch 6th row in the cursor liahona:
+   --
+     FETCH 1 IN liahona;
+
+     code |title |did| date_prod|kind      |len
+     -----+------+---+----------+----------+------
+     P_303|48 Hrs|103|1982-10-22|Action    | 01:37
+
+   -- close the cursor liahona and commit work:
+   --
+     CLOSE liahona;
+   COMMIT WORK;
+</ProgramListing>
+</REFSECT1>
+
+<REFSECT1 ID="R1-SQL-MOVE-3">
+<TITLE>
+Compatibility
+</TITLE>
+<PARA>
+</PARA>
+
+<REFSECT2 ID="R2-SQL-MOVE-4">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+SQL92
+</TITLE>
+<PARA>
+   There is no SQL92 MOVE statement.
+</REFENTRY>
diff --git a/doc/src/sgml/ref/notify.sgml b/doc/src/sgml/ref/notify.sgml
new file mode 100644 (file)
index 0000000..a9a3e8f
--- /dev/null
@@ -0,0 +1,161 @@
+<REFENTRY ID="SQL-NOTIFY">
+<REFMETA>
+<REFENTRYTITLE>
+NOTIFY
+</REFENTRYTITLE>
+<REFMISCINFO>SQL - Language Statements</REFMISCINFO>
+</REFMETA>
+<REFNAMEDIV>
+<REFNAME>
+NOTIFY
+</REFNAME>
+<REFPURPOSE>
+Signals all frontends and backends listening on a class
+</REFPURPOSE>
+
+<REFSYNOPSISDIV>
+<REFSYNOPSISDIVINFO>
+<DATE>1998-09-01</DATE>
+</REFSYNOPSISDIVINFO>
+<SYNOPSIS>
+<REPLACEABLE CLASS="PARAMETER">
+</REPLACEABLE>
+NOTIFY <REPLACEABLE CLASS="PARAMETER">classname</REPLACEABLE>        
+</SYNOPSIS>
+
+<REFSECT2 ID="R2-SQL-NOTIFY-1">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+Inputs
+</TITLE>
+<PARA>
+</PARA>
+<VARIABLELIST>
+<VARLISTENTRY>
+<TERM>
+<REPLACEABLE CLASS="PARAMETER">classname</REPLACEABLE>        
+</TERM>
+<LISTITEM>
+<PARA>
+Table or arbitrary relation class used for notification.
+
+</VARIABLELIST>
+
+</REFSECT2>
+
+<REFSECT2 ID="R2-SQL-NOTIFY-2">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+Outputs
+</TITLE>
+<PARA>
+</PARA>
+<VARIABLELIST>
+<VARLISTENTRY>
+<TERM>
+NOTIFY
+</TERM>
+<LISTITEM>
+<PARA>
+Notification message from backend.
+
+</VARIABLELIST>
+
+</REFSECT2>
+</REFSYNOPSISDIV>
+
+<REFSECT1 ID="R1-SQL-NOTIFY-1">
+<REFSECT1INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT1INFO>
+<TITLE>
+Description
+</TITLE>
+<PARA>
+   NOTIFY is used to awaken all backends and consequently all
+   frontends that have executed <command>LISTEN</command>  on 
+<replaceable class="parameter">classname</replaceable>.
+ This can be used either within an instance-level rule 
+as part of the action body or from a  normal query.
+
+<para>
+ When used from within a normal query, 
+this can be thought of as interprocess communication (IPC).  When
+used from within a rule, this can be thought of as an alerter mechanism.
+<para>
+       Notice that the mere fact that a notify has been
+ executed does not imply anything in particular about the state
+       of  the class (e.g., that it has been updated),
+ nor does the notification protocol transmit any useful information
+ other than the class name.  
+Therefore, all notify does is indicate that some backend wishes its  peers  to
+       examine <replaceable class="parameter">classname</replaceable>
+ in some application-specific way.
+<para>
+       In  fact,  <replaceable class="parameter">classname</replaceable>
+  need  not be the name of an SQL class at all.
+  It is best thought of as a condition name
+       that the application programmer selects.
+<para>
+       This event notification is performed through the libpq protocol
+ and frontend application interface.  The application  program
+  must  call  the routine <function>PQnotifies</function> in order to find out the 
+name of the class to which a given
+       notification corresponds.  
+If this code is not included in the application,  
+the  event  notification  will  be
+       queued and never be processed.
+<REFSECT2 ID="R2-SQL-NOTIFY-3">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+Notes
+</TITLE>
+<PARA>
+</PARA>
+
+</REFSECT2>
+
+<REFSECT1 ID="R1-SQL-NOTIFY-2">
+<TITLE>
+Usage
+</TITLE>
+<PARA>
+</PARA>
+<ProgramListing>
+-- Configure and execute a listen/notify sequence
+-- from psql
+postgres=> create table t (i int4);
+postgres=> listen t;
+LISTEN
+postgres=> notify t;
+NOTIFY
+ASYNC NOTIFY of 't' from backend pid '10949' received
+</ProgramListing>
+
+</REFSECT1>
+
+<REFSECT1 ID="R1-SQL-NOTIFY-3">
+<TITLE>
+Compatibility
+</TITLE>
+<PARA>
+</PARA>
+
+<REFSECT2 ID="R2-SQL-NOTIFY-4">
+<REFSECT2INFO>
+<DATE>1998-09-01</DATE>
+</REFSECT2INFO>
+<TITLE>
+SQL92
+</TITLE>
+<PARA>
+There is no NOTIFY statement in <acronym>SQL92</acronym>.
+
+</REFENTRY>