diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/src/sgml/catalogs.sgml | 69 | ||||
-rw-r--r-- | doc/src/sgml/func.sgml | 18 | ||||
-rw-r--r-- | doc/src/sgml/libpq.sgml | 52 | ||||
-rw-r--r-- | doc/src/sgml/protocol.sgml | 23 | ||||
-rw-r--r-- | doc/src/sgml/ref/listen.sgml | 38 | ||||
-rw-r--r-- | doc/src/sgml/ref/notify.sgml | 121 | ||||
-rw-r--r-- | doc/src/sgml/ref/unlisten.sgml | 19 | ||||
-rw-r--r-- | doc/src/sgml/storage.sgml | 7 |
8 files changed, 184 insertions, 163 deletions
diff --git a/doc/src/sgml/catalogs.sgml b/doc/src/sgml/catalogs.sgml index 3503bc852cd..e5bef18d7d8 100644 --- a/doc/src/sgml/catalogs.sgml +++ b/doc/src/sgml/catalogs.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.221 2010/02/07 20:48:09 tgl Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/catalogs.sgml,v 2.222 2010/02/16 22:34:41 tgl Exp $ --> <!-- Documentation of the system catalogs, directed toward PostgreSQL developers --> @@ -169,11 +169,6 @@ </row> <row> - <entry><link linkend="catalog-pg-listener"><structname>pg_listener</structname></link></entry> - <entry>asynchronous notification support</entry> - </row> - - <row> <entry><link linkend="catalog-pg-namespace"><structname>pg_namespace</structname></link></entry> <entry>schemas</entry> </row> @@ -3253,68 +3248,6 @@ </table> </sect1> - <sect1 id="catalog-pg-listener"> - <title><structname>pg_listener</structname></title> - - <indexterm zone="catalog-pg-listener"> - <primary>pg_listener</primary> - </indexterm> - - <para> - The catalog <structname>pg_listener</structname> supports the - <xref linkend="sql-listen" endterm="sql-listen-title"> and - <xref linkend="sql-notify" endterm="sql-notify-title"> - commands. A listener creates an entry in - <structname>pg_listener</structname> for each notification name - it is listening for. A notifier scans <structname>pg_listener</structname> - and updates each matching entry to show that a notification has occurred. - The notifier also sends a signal (using the PID recorded in the table) - to awaken the listener from sleep. - </para> - - <table> - <title><structname>pg_listener</> Columns</title> - - <tgroup cols="3"> - <thead> - <row> - <entry>Name</entry> - <entry>Type</entry> - <entry>Description</entry> - </row> - </thead> - - <tbody> - <row> - <entry><structfield>relname</structfield></entry> - <entry><type>name</type></entry> - <entry> - Notify condition name. (The name need not match any actual - relation in the database; the name <structfield>relname</> is historical.) - </entry> - </row> - - <row> - <entry><structfield>listenerpid</structfield></entry> - <entry><type>int4</type></entry> - <entry>PID of the server process that created this entry</entry> - </row> - - <row> - <entry><structfield>notification</structfield></entry> - <entry><type>int4</type></entry> - <entry> - Zero if no event is pending for this listener. If an event is - pending, the PID of the server process that sent the notification - </entry> - </row> - </tbody> - </tgroup> - </table> - - </sect1> - - <sect1 id="catalog-pg-namespace"> <title><structname>pg_namespace</structname></title> diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml index 71952ee1fc4..54369711155 100644 --- a/doc/src/sgml/func.sgml +++ b/doc/src/sgml/func.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.503 2010/02/16 21:18:01 momjian Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/func.sgml,v 1.504 2010/02/16 22:34:42 tgl Exp $ --> <chapter id="functions"> <title>Functions and Operators</title> @@ -11530,6 +11530,12 @@ postgres=# select * from unnest2(array[[1,2],[3,4]]); </row> <row> + <entry><literal><function>pg_listening_channels</function>()</literal></entry> + <entry><type>setof text</type></entry> + <entry>channel names that the session is currently listening on</entry> + </row> + + <row> <entry><literal><function>inet_client_addr</function>()</literal></entry> <entry><type>inet</type></entry> <entry>address of the remote connection</entry> @@ -11675,6 +11681,16 @@ SET search_path TO <replaceable>schema</> <optional>, <replaceable>schema</>, .. </note> <indexterm> + <primary>pg_listening_channels</primary> + </indexterm> + + <para> + <function>pg_listening_channels</function> returns a set of names of + channels that the current session is listening to. See <xref + linkend="sql-listen" endterm="sql-listen-title"> for more information. + </para> + + <indexterm> <primary>inet_client_addr</primary> </indexterm> diff --git a/doc/src/sgml/libpq.sgml b/doc/src/sgml/libpq.sgml index 4972a8c2592..0bdb6401c34 100644 --- a/doc/src/sgml/libpq.sgml +++ b/doc/src/sgml/libpq.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.298 2010/02/16 20:58:13 momjian Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/libpq.sgml,v 1.299 2010/02/16 22:34:42 tgl Exp $ --> <chapter id="libpq"> <title><application>libpq</application> - C Library</title> @@ -307,28 +307,28 @@ <entry>Description</entry> </row> </thead> - + <tbody> - + <row> <entry><literal>disable</></entry> <entry>only try a non-<acronym>SSL</> connection</entry> </row> - + <row> <entry><literal>allow</></entry> <entry>first try a non-<acronym>SSL</> connection; if that fails, try an <acronym>SSL</> connection</entry> </row> - + <row> <entry><literal>prefer</> (default)</entry> <entry>first try an <acronym>SSL</> connection; if that fails, try a non-<acronym>SSL</> connection</entry> </row> - + <row> <entry><literal>require</></entry> <entry>only try an <acronym>SSL</> connection</entry> @@ -481,7 +481,7 @@ </para> <para> - If <literal>expand_dbname</literal> is non-zero and + If <literal>expand_dbname</literal> is non-zero and <parameter>dbname</parameter> contains an <symbol>=</symbol> sign, it is taken as a <parameter>conninfo</parameter> string in exactly the same way as if it had been passed to <function>PQconnectdb</function>(see below). Previously @@ -4111,50 +4111,48 @@ typedef struct { <productname>PostgreSQL</productname> offers asynchronous notification via the <command>LISTEN</command> and <command>NOTIFY</command> commands. A client session registers its interest in a particular - notification condition with the <command>LISTEN</command> command (and + notification channel with the <command>LISTEN</command> command (and can stop listening with the <command>UNLISTEN</command> command). All - sessions listening on a particular condition will be notified + sessions listening on a particular channel will be notified asynchronously when a <command>NOTIFY</command> command with that - condition name is executed by any session. No additional information - is passed from the notifier to the listener. Thus, typically, any - actual data that needs to be communicated is transferred through a - database table. Commonly, the condition name is the same as the - associated table, but it is not necessary for there to be any associated - table. + channel name is executed by any session. A <quote>payload</> string can + be passed to communicate additional data to the listeners. </para> <para> <application>libpq</application> applications submit - <command>LISTEN</command> and <command>UNLISTEN</command> commands as + <command>LISTEN</command>, <command>UNLISTEN</command>, + and <command>NOTIFY</command> commands as ordinary SQL commands. The arrival of <command>NOTIFY</command> messages can subsequently be detected by calling <function>PQnotifies</function>.<indexterm><primary>PQnotifies</></> </para> <para> - The function <function>PQnotifies</function> - returns the next notification from a list of unhandled - notification messages received from the server. It returns a null pointer if - there are no pending notifications. Once a notification is - returned from <function>PQnotifies</>, it is considered handled and will be - removed from the list of notifications. + The function <function>PQnotifies</function> returns the next notification + from a list of unhandled notification messages received from the server. + It returns a null pointer if there are no pending notifications. Once a + notification is returned from <function>PQnotifies</>, it is considered + handled and will be removed from the list of notifications. + <synopsis> PGnotify *PQnotifies(PGconn *conn); typedef struct pgNotify { - char *relname; /* notification condition name */ + char *relname; /* notification channel name */ int be_pid; /* process ID of notifying server process */ - char *extra; /* notification parameter */ + char *extra; /* notification payload string */ } PGnotify; </synopsis> + After processing a <structname>PGnotify</structname> object returned by <function>PQnotifies</function>, be sure to free it with <function>PQfreemem</function>. It is sufficient to free the <structname>PGnotify</structname> pointer; the <structfield>relname</structfield> and <structfield>extra</structfield> - fields do not represent separate allocations. (At present, the - <structfield>extra</structfield> field is unused and will always point - to an empty string.) + fields do not represent separate allocations. (The names of these fields + are historical; in particular, channel names need not have anything to + do with relation names.) </para> <para> diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml index e4364ec305f..f0a2aeba03a 100644 --- a/doc/src/sgml/protocol.sgml +++ b/doc/src/sgml/protocol.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/protocol.sgml,v 1.80 2010/02/16 20:58:14 momjian Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/protocol.sgml,v 1.81 2010/02/16 22:34:43 tgl Exp $ --> <chapter id="protocol"> <title>Frontend/Backend Protocol</title> @@ -354,7 +354,7 @@ <para> This message contains the response data from the previous step of GSSAPI or SSPI negotiation (AuthenticationGSS, AuthenticationSSPI - or a previous AuthenticationGSSContinue). If the GSSAPI + or a previous AuthenticationGSSContinue). If the GSSAPI or SSPI data in this message indicates more data is needed to complete the authentication, the frontend must send that data as another PasswordMessage. If @@ -992,7 +992,7 @@ <para> In the event of a backend-detected error during copy-in mode (including - receipt of a CopyFail message), the backend will issue an ErrorResponse + receipt of a CopyFail message), the backend will issue an ErrorResponse message. If the <command>COPY</> command was issued via an extended-query message, the backend will now discard frontend messages until a Sync message is received, then it will issue ReadyForQuery and return to normal @@ -1117,7 +1117,7 @@ backend will send a NotificationResponse message (not to be confused with NoticeResponse!) whenever a <command>NOTIFY</command> command is executed for the same - notification name. + channel name. </para> <note> @@ -1340,7 +1340,7 @@ This section describes the base data types used in messages. value that will appear, otherwise the value is variable. Eg. String, String("user"). </para> - + <note> <para> <emphasis>There is no predefined limit</emphasis> on the length of a string @@ -1951,7 +1951,7 @@ Bind (F) (denoted <replaceable>R</> below). This can be zero to indicate that there are no result columns or that the result columns should all use the default format - (text); + (text); or one, in which case the specified format code is applied to all result columns (if any); or it can equal the actual number of result columns of the query. @@ -2500,7 +2500,7 @@ CopyOutResponse (B) separated by separator characters, etc). 1 indicates the overall copy format is binary (similar to DataRow format). See <xref linkend="sql-copy" - endterm="sql-copy-title"> for more information. + endterm="sql-copy-title"> for more information. </para> </listitem> </varlistentry> @@ -3187,7 +3187,7 @@ NotificationResponse (B) </term> <listitem> <para> - The name of the condition that the notify has been raised on. + The name of the channel that the notify has been raised on. </para> </listitem> </varlistentry> @@ -3197,9 +3197,7 @@ NotificationResponse (B) </term> <listitem> <para> - Additional information passed from the notifying process. - (Currently, this feature is unimplemented so the field - is always an empty string.) + The <quote>payload</> string passed from the notifying process. </para> </listitem> </varlistentry> @@ -4353,7 +4351,7 @@ the backend. <para> The NotificationResponse ('<literal>A</>') message has an additional string -field, which is presently empty but might someday carry additional data passed +field, which can carry a <quote>payload</> string passed from the <command>NOTIFY</command> event sender. </para> @@ -4364,5 +4362,4 @@ string parameter; this has been removed. </sect1> - </chapter> diff --git a/doc/src/sgml/ref/listen.sgml b/doc/src/sgml/ref/listen.sgml index 93ca74c5722..57577c1f6ac 100644 --- a/doc/src/sgml/ref/listen.sgml +++ b/doc/src/sgml/ref/listen.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/ref/listen.sgml,v 1.23 2008/11/14 10:22:47 petere Exp $ +$PostgreSQL: pgsql/doc/src/sgml/ref/listen.sgml,v 1.24 2010/02/16 22:34:43 tgl Exp $ PostgreSQL documentation --> @@ -21,7 +21,7 @@ PostgreSQL documentation <refsynopsisdiv> <synopsis> -LISTEN <replaceable class="PARAMETER">name</replaceable> +LISTEN <replaceable class="PARAMETER">channel</replaceable> </synopsis> </refsynopsisdiv> @@ -30,24 +30,23 @@ LISTEN <replaceable class="PARAMETER">name</replaceable> <para> <command>LISTEN</command> registers the current session as a - listener on the notification condition <replaceable - class="PARAMETER">name</replaceable>. + listener on the notification channel named <replaceable + class="PARAMETER">channel</replaceable>. If the current session is already registered as a listener for - this notification condition, nothing is done. + this notification channel, nothing is done. </para> <para> Whenever the command <command>NOTIFY <replaceable - class="PARAMETER">name</replaceable></command> is invoked, either + class="PARAMETER">channel</replaceable></command> is invoked, either by this session or another one connected to the same database, all - the sessions currently listening on that notification condition are + the sessions currently listening on that notification channel are notified, and each will in turn notify its connected client - application. See the discussion of <command>NOTIFY</command> for - more information. + application. </para> <para> - A session can be unregistered for a given notify condition with the + A session can be unregistered for a given notification channel with the <command>UNLISTEN</command> command. A session's listen registrations are automatically cleared when the session ends. </para> @@ -78,10 +77,10 @@ LISTEN <replaceable class="PARAMETER">name</replaceable> <variablelist> <varlistentry> - <term><replaceable class="PARAMETER">name</replaceable></term> + <term><replaceable class="PARAMETER">channel</replaceable></term> <listitem> <para> - Name of a notify condition (any identifier). + Name of a notification channel (any identifier). </para> </listitem> </varlistentry> @@ -89,6 +88,21 @@ LISTEN <replaceable class="PARAMETER">name</replaceable> </refsect1> <refsect1> + <title>Notes</title> + + <para> + <command>LISTEN</command> takes effect at transaction commit. + If <command>LISTEN</command> or <command>UNLISTEN</command> is executed + within a transaction that later rolls back, the set of notification + channels being listened to is unchanged. + </para> + <para> + A transaction that has executed <command>LISTEN</command> cannot be + prepared for two-phase commit. + </para> + </refsect1> + + <refsect1> <title>Examples</title> <para> diff --git a/doc/src/sgml/ref/notify.sgml b/doc/src/sgml/ref/notify.sgml index 563fbbe9638..b612bb4cb2a 100644 --- a/doc/src/sgml/ref/notify.sgml +++ b/doc/src/sgml/ref/notify.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/ref/notify.sgml,v 1.31 2008/11/14 10:22:47 petere Exp $ +$PostgreSQL: pgsql/doc/src/sgml/ref/notify.sgml,v 1.32 2010/02/16 22:34:43 tgl Exp $ PostgreSQL documentation --> @@ -21,7 +21,7 @@ PostgreSQL documentation <refsynopsisdiv> <synopsis> -NOTIFY <replaceable class="PARAMETER">name</replaceable> +NOTIFY <replaceable class="PARAMETER">channel</replaceable> [ , <replaceable class="PARAMETER">payload</replaceable> ] </synopsis> </refsynopsisdiv> @@ -29,35 +29,39 @@ NOTIFY <replaceable class="PARAMETER">name</replaceable> <title>Description</title> <para> - The <command>NOTIFY</command> command sends a notification event to each - client application that has previously executed - <command>LISTEN <replaceable class="parameter">name</replaceable></command> - for the specified notification name in the current database. + The <command>NOTIFY</command> command sends a notification event together + with an optional <quote>payload</> string to each client application that + has previously executed + <command>LISTEN <replaceable class="parameter">channel</></command> + for the specified channel name in the current database. </para> <para> - <command>NOTIFY</command> provides a simple form of signal or + <command>NOTIFY</command> provides a simple interprocess communication mechanism for a collection of processes accessing the same <productname>PostgreSQL</productname> 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). + A payload string can be sent along with the notification, and + higher-level mechanisms for passing structured data can be built by using + tables in the database to pass additional data from notifier to listener(s). </para> <para> - The information passed to the client for a notification event includes the notification - name and the notifying session's server process <acronym>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. + The information passed to the client for a notification event includes the + notification channel + name, the notifying session's server process <acronym>PID</>, and the + payload string, which is an empty string if it has not been specified. </para> <para> - Commonly, the notification name is the same as the name of some table in + It is up to the database designer to define the channel names that will + be used in a given database and what each one means. + Commonly, the channel name is the same as the name of some table in the database, and the notify event essentially means, <quote>I changed this table, take a look at it to see what's new</quote>. But no such association is enforced by the <command>NOTIFY</command> and <command>LISTEN</command> commands. For - example, a database designer could use several different notification names - to signal different sorts of changes to a single table. + example, a database designer could use several different channel names + to signal different sorts of changes to a single table. Alternatively, + the payload string could be used to differentiate various cases. </para> <para> @@ -89,19 +93,22 @@ NOTIFY <replaceable class="PARAMETER">name</replaceable> </para> <para> - <command>NOTIFY</command> behaves like Unix signals in one important - respect: if the same notification name is signaled multiple times in quick - succession, recipients might get only one notification event for several executions - of <command>NOTIFY</command>. So it is a bad idea to depend on the number - of notifications received. Instead, use <command>NOTIFY</command> 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. + If the same channel name is signaled multiple times from the same + transaction with identical payload strings, the + database server can decide to deliver a single notification only. + On the other hand, notifications with distinct payload strings will + always be delivered as distinct notifications. Similarly, notifications from + different transactions will never get folded into one notification. + Except for dropping later instances of duplicate notifications, + <command>NOTIFY</command> guarantees that notifications from the same + transaction get delivered in the order they were sent. It is also + guaranteed that messages from different transactions are delivered in + the order in which the transactions committed. </para> <para> It is common for a client that executes <command>NOTIFY</command> - to be listening on the same notification name itself. In that case + to be listening on the same notification channel 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 @@ -111,12 +118,7 @@ NOTIFY <replaceable class="PARAMETER">name</replaceable> notification event message) is the same as one's own session's <acronym>PID</> (available from <application>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. - <productname>PostgreSQL</productname> keeps self-notifications - separate from notifications arriving from other sessions, so you - cannot miss an outside notification by ignoring your own - notifications.) + back, and can be ignored. </para> </refsect1> @@ -125,10 +127,22 @@ NOTIFY <replaceable class="PARAMETER">name</replaceable> <variablelist> <varlistentry> - <term><replaceable class="PARAMETER">name</replaceable></term> + <term><replaceable class="PARAMETER">channel</replaceable></term> <listitem> <para> - Name of the notification to be signaled (any identifier). + Name of the notification channel to be signaled (any identifier). + </para> + </listitem> + </varlistentry> + <varlistentry> + <term><replaceable class="PARAMETER">payload</replaceable></term> + <listitem> + <para> + The <quote>payload</> string to be communicated along with the + notification. This string must be shorter than 8000 bytes, and + is treated as text. + (If binary data or large amounts of information need to be communicated, + it's best to put it in a database table and send the key of the record.) </para> </listitem> </varlistentry> @@ -136,6 +150,39 @@ NOTIFY <replaceable class="PARAMETER">name</replaceable> </refsect1> <refsect1> + <title>Notes</title> + + <indexterm> + <primary>pg_notify</primary> + </indexterm> + + <para> + To send a notification you can also use the function + <literal><function>pg_notify</function>(<type>text</type>, + <type>text</type>)</literal>. The function takes the channel name as the + first argument and the payload as the second. The function is much easier + to use than the <command>NOTIFY</command> command if you need to work with + non-constant channel names and payloads. + </para> + <para> + There is a queue that holds notifications that have been sent but not + yet processed by all listening sessions. If this queue becomes full, + transactions calling <command>NOTIFY</command> will fail at commit. + The queue is quite large (8GB in a standard installation) and should be + sufficiently sized for almost every use case. However, no cleanup can take + place if a session executes <command>LISTEN</command> and then enters a + transaction for a very long time. Once the queue is half full you will see + warnings in the log file pointing you to the session that is preventing + cleanup. In this case you should make sure that this session ends its + current transaction so that cleanup can proceed. + </para> + <para> + A transaction that has executed <command>NOTIFY</command> cannot be + prepared for two-phase commit. + </para> + </refsect1> + + <refsect1> <title>Examples</title> <para> @@ -146,6 +193,12 @@ NOTIFY <replaceable class="PARAMETER">name</replaceable> LISTEN virtual; NOTIFY virtual; Asynchronous notification "virtual" received from server process with PID 8448. +NOTIFY virtual, 'This is the payload'; +Asynchronous notification "virtual" with payload "This is the payload" received from server process with PID 8448. + +LISTEN foo; +SELECT pg_notify('fo' || 'o', 'pay' || 'load'); +Asynchronous notification "foo" with payload "payload" received from server process with PID 14728. </programlisting> </para> </refsect1> diff --git a/doc/src/sgml/ref/unlisten.sgml b/doc/src/sgml/ref/unlisten.sgml index 7cdd7394cb9..9e22ea4edc4 100644 --- a/doc/src/sgml/ref/unlisten.sgml +++ b/doc/src/sgml/ref/unlisten.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/ref/unlisten.sgml,v 1.30 2008/11/14 10:22:47 petere Exp $ +$PostgreSQL: pgsql/doc/src/sgml/ref/unlisten.sgml,v 1.31 2010/02/16 22:34:43 tgl Exp $ PostgreSQL documentation --> @@ -21,7 +21,7 @@ PostgreSQL documentation <refsynopsisdiv> <synopsis> -UNLISTEN { <replaceable class="PARAMETER">name</replaceable> | * } +UNLISTEN { <replaceable class="PARAMETER">channel</replaceable> | * } </synopsis> </refsynopsisdiv> @@ -33,8 +33,8 @@ UNLISTEN { <replaceable class="PARAMETER">name</replaceable> | * } registration for <command>NOTIFY</command> events. <command>UNLISTEN</command> cancels any existing registration of the current <productname>PostgreSQL</productname> session as a - listener on the notification <replaceable - class="PARAMETER">name</replaceable>. The special wildcard + listener on the notification channel named <replaceable + class="PARAMETER">channel</replaceable>. The special wildcard <literal>*</literal> cancels all listener registrations for the current session. </para> @@ -52,10 +52,10 @@ UNLISTEN { <replaceable class="PARAMETER">name</replaceable> | * } <variablelist> <varlistentry> - <term><replaceable class="PARAMETER">name</replaceable></term> + <term><replaceable class="PARAMETER">channel</replaceable></term> <listitem> <para> - Name of a notification (any identifier). + Name of a notification channel (any identifier). </para> </listitem> </varlistentry> @@ -83,6 +83,11 @@ UNLISTEN { <replaceable class="PARAMETER">name</replaceable> | * } At the end of each session, <command>UNLISTEN *</command> is automatically executed. </para> + + <para> + A transaction that has executed <command>UNLISTEN</command> cannot be + prepared for two-phase commit. + </para> </refsect1> <refsect1> @@ -100,7 +105,7 @@ Asynchronous notification "virtual" received from server process with PID 8448. <para> Once <command>UNLISTEN</> has been executed, further <command>NOTIFY</> - commands will be ignored: + messages will be ignored: <programlisting> UNLISTEN virtual; diff --git a/doc/src/sgml/storage.sgml b/doc/src/sgml/storage.sgml index e0cef7dd7b0..c4b38ddb6c8 100644 --- a/doc/src/sgml/storage.sgml +++ b/doc/src/sgml/storage.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/storage.sgml,v 1.31 2010/02/07 20:48:09 tgl Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/storage.sgml,v 1.32 2010/02/16 22:34:43 tgl Exp $ --> <chapter id="storage"> @@ -78,6 +78,11 @@ Item </row> <row> + <entry><filename>pg_notify</></entry> + <entry>Subdirectory containing LISTEN/NOTIFY status data</entry> +</row> + +<row> <entry><filename>pg_stat_tmp</></entry> <entry>Subdirectory containing temporary files for the statistics subsystem</entry> |