On 2024-09-23 14:22 +0200, Asad Ali wrote:
> There is no direct prompt escape sequence like %n for displaying the
> current_role in the psql prompt. However, you can work around this by using
> a \set command to define a custom prompt that includes the result of
> current_role.
> You can use the following command to set your psql PROMPT1 to include both
> the session_user and current_role:
> 
> Here’s how you can achieve this:
> 
> You can define a function in your psqlrc file that captures the current
> role.
> 
> Use \set to set a custom prompt that includes both the session user (%n)
> and the current_role.
> Here's an example of how you can do it:
> 
> Edit your .psqlrc file to include a custom query and set a prompt:
> 
> -- Query to set the current role into a psql variable
> \set current_role 'SELECT current_role;'
> 
> -- Define a custom prompt with both the session user and the current role
> \set PROMPT1 '%n@%/ (%`current_role`)=%# '
> 
> Load the .psqlrc or start a new psql session, and your prompt will now show
> the session user and current role.
> 
> The key here is that \set allows you to run SQL commands within the prompt,
> which can be used to extract the current_role.

This is wrong.  First of all, \set does not run any SQL commands.
Secondly, %`current_role` will be sent to the shell and execute command
current_role.

You could instead use this:

    SELECT current_role \gset
    \set PROMPT1 '%n@%/ (%:current_role:)=%# '

But that won't work with subsequent SET ROLE commands.

> This approach requires you to execute it manually or include it in your
> .psqlrc file for automatic loading with each session.
> 
> On Mon, Sep 23, 2024 at 2:31 PM Dominique Devienne <ddevie...@gmail.com>
> wrote:
> 
> > Hi. I've successfully customized my psql PROMPT1,
> > using %n for session_user, but I'd like to see
> > current_role as well. And I can't seem to find a way.
> >
> > I didn't find a direct \x for it.
> > I didn't find a %'X' variable for it.
> > I didn't find a command to %`X` either.
> > (and X = `select current_role` does not work).
> >
> > Surely there's a way, no? Thanks, --DD

-- 
Erik


Reply via email to