1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-04 20:11:56 +03:00

Add psql PROMPT variable for search_path.

The new %S substitution shows the current value of search_path.
Note that this only works when connected to Postgres v18 or newer,
since search_path was first marked as GUC_REPORT in commit
28a1121fd9.  On older versions that don't report search_path, %S is
replaced with a question mark.

Suggested-by: Lauri Siltanen <lauri.siltanen@gmail.com>
Author: Florents Tselai <florents.tselai@gmail.com>
Reviewed-by: Jelte Fennema-Nio <postgres@jeltef.nl>
Reviewed-by: Jim Jones <jim.jones@uni-muenster.de>
Reviewed-by: Chao Li <li.evan.chao@gmail.com>
Discussion: https://postgr.es/m/CANsM767JhTKCRagTaq5Lz52fVwLPVkhSpyD1C%2BOrridGv0SO0A%40mail.gmail.com
This commit is contained in:
Nathan Bossart
2025-10-28 14:08:38 -05:00
parent 03fbb0814c
commit b3ce55f413
2 changed files with 22 additions and 0 deletions

View File

@@ -4974,6 +4974,17 @@ testdb=&gt; <userinput>INSERT INTO my_table VALUES (:'content');</userinput>
</listitem>
</varlistentry>
<varlistentry id="app-psql-prompting-S">
<term><literal>%S</literal></term>
<listitem>
<para>
The current value of <xref linkend="guc-search-path"/>, or
<literal>?</literal> if connected to a server running
<productname>PostgreSQL</productname> 17 or older.
</para>
</listitem>
</varlistentry>
<varlistentry id="app-psql-prompting-s">
<term><literal>%s</literal></term>
<listitem><para>The name of the service.</para></listitem>

View File

@@ -34,6 +34,7 @@
* %P - pipeline status: on, off or abort
* %> - database server port number
* %n - database user name
* %S - search_path
* %s - service
* %/ - current database
* %~ - like %/ but "~" when database name equals user name
@@ -167,6 +168,16 @@ get_prompt(promptStatus_t status, ConditionalStack cstack)
if (pset.db)
strlcpy(buf, session_username(), sizeof(buf));
break;
/* search_path */
case 'S':
if (pset.db)
{
const char *sp = PQparameterStatus(pset.db, "search_path");
/* Use ? for versions that don't report search_path. */
strlcpy(buf, sp ? sp : "?", sizeof(buf));
}
break;
/* service name */
case 's':
{