On 12/06/2015 06:56, Noah Misch wrote:
> On Thu, Jun 11, 2015 at 04:05:13PM -0500, Jim Nasby wrote:
>> On 6/11/15 4:55 AM, Andres Freund wrote:
>>> On 2015-06-11 09:41:17 +0000, Naoya Anzai wrote:
>>>> This is a so tiny patch but I think it is very useful for hackers and DBAs.
>>>> When we debug with psql, we frequently use "SELECT pg_backend_pid();".
>>>> This can change the input of the 24 characters to the only 4 characters!
>>>
>>> Not a big fan of that abbreviation itself. What I'd wondered about
>>> instead - and actually had patched into my psql at some point - is
>>> adding an appropriate escape to psql's PROMPT. I think that'd serve your
>>> purpose as well?
>>
>> +3.14159; that would be hugely helpful when using gdb.
> 

+1

> You can get that today.  In ~/.psqlrc:
> 
> SELECT pg_catalog.pg_backend_pid() AS backend_pid \gset
> \set PROMPT1 '%m %:backend_pid: %/%R%# '
> 
> It doesn't update after \connect, but the overlap between my use of \connect
> and my use of debuggers is tiny.
> 
> 

Tiny for me too, but I sometimes had the need.

I can't really see any good reason not to add a %p escape to psql's
PROMPT, so I'm attaching a simple patch to implement it. Unless someone
objects, I'll add it to the next commitfest.

-- 
Julien Rouhaud
http://dalibo.com - http://dalibo.org
*** a/doc/src/sgml/ref/psql-ref.sgml
--- b/doc/src/sgml/ref/psql-ref.sgml
***************
*** 3365,3370 **** testdb=&gt; <userinput>INSERT INTO my_table VALUES (:'content');</userinput>
--- 3365,3377 ----
        </varlistentry>
  
        <varlistentry>
+         <term><literal>%p</literal></term>
+         <listitem>
+          <para>The PID of the backend.</para>
+         </listitem>
+       </varlistentry>
+ 
+       <varlistentry>
          <term><literal>%&gt;</literal></term>
          <listitem><para>The port number at which the database server is listening.</para></listitem>
        </varlistentry>
*** a/src/bin/psql/prompt.c
--- b/src/bin/psql/prompt.c
***************
*** 34,39 ****
--- 34,40 ----
   * %M - database server "hostname.domainname", "[local]" for AF_UNIX
   *		sockets, "[local:/dir/name]" if not default
   * %m - like %M, but hostname only (before first dot), or always "[local]"
+  * %p - backend PID
   * %> - database server port number
   * %n - database user name
   * %/ - current database
***************
*** 161,166 **** get_prompt(promptStatus_t status)
--- 162,172 ----
  					if (pset.db)
  						strlcpy(buf, session_username(), sizeof(buf));
  					break;
+ 					/* backend PID */
+ 				case 'p':
+ 					if (pset.db)
+ 						snprintf(buf, sizeof(buf), "%d", PQbackendPID(pset.db));
+ 					break;
  
  				case '0':
  				case '1':
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to