diff --git a/doc/src/sgml/runtime.sgml b/doc/src/sgml/runtime.sgml
index 2ca5e38018ae839ed98f89592a2aaa0032c6113a..831bd1accec4fc70fa19dbfeb4be056b7dd118e9 100644
--- a/doc/src/sgml/runtime.sgml
+++ b/doc/src/sgml/runtime.sgml
@@ -1,5 +1,5 @@
 <!--
-$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.281 2004/09/17 22:40:46 tgl Exp $
+$PostgreSQL: pgsql/doc/src/sgml/runtime.sgml,v 1.282 2004/09/22 03:55:24 neilc Exp $
 -->
 
 <Chapter Id="runtime">
@@ -2394,6 +2394,11 @@ archive_command = 'copy "%p" /mnt/server/archivedir/"%f"'  # Win32
             </row>
             <row>
              <entry><literal>%x</literal></entry>
+             <entry>Transaction ID</entry>
+             <entry>Yes</entry>
+            </row>
+            <row>
+             <entry><literal>%q</literal></entry>
              <entry>Does not produce any output, but tells non-session
              processes to stop at this point in the string. Ignored by
              session processes.</entry>
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index ded96313c330cd71c8ba229a88fca2bb56be32d4..20ff94d7dda35654bf243f4ea54721744fc91f29 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -42,7 +42,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.150 2004/09/05 03:42:11 tgl Exp $
+ *	  $PostgreSQL: pgsql/src/backend/utils/error/elog.c,v 1.151 2004/09/22 03:55:26 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1421,12 +1421,21 @@ log_line_prefix(StringInfo buf)
 										 MyProcPort->remote_port);
 				}
 				break;
-			case 'x':
-				/* in postmaster and friends, stop if %x is seen */
+			case 'q':
+				/* in postmaster and friends, stop if %q is seen */
 				/* in a backend, just ignore */
 				if (MyProcPort == NULL)
 					i = format_len;
 				break;
+			case 'x':
+				if (MyProcPort)
+				{
+					if (IsTransactionState())
+						appendStringInfo(buf, "%u", GetTopTransactionId());
+					else
+						appendStringInfo(buf, "%u", InvalidTransactionId);
+				}
+				break;
 			case '%':
 				appendStringInfoChar(buf, '%');
 				break;
diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample
index 749fa19beb0a8c6f2b6a613c4c78afe37a4830bd..5f83db9bd3998388274c9df1515f69b01e454491 100644
--- a/src/backend/utils/misc/postgresql.conf.sample
+++ b/src/backend/utils/misc/postgresql.conf.sample
@@ -231,8 +231,8 @@
 				# %r=remote host and port
 				# %p=PID %t=timestamp %i=command tag
 				# %c=session id %l=session line number
-				# %s=session start timestamp
-				# %x=stop here in non-session processes
+				# %s=session start timestamp %x=transaction id
+				# %q=stop here in non-session processes
 				# %%='%'
 #log_statement = 'none'		# none, mod, ddl, all
 #log_hostname = false