Re: Server name in psql prompt

From: Mark Morgan Lloyd <markMLl(dot)pgsql-general(at)telemetry(dot)co(dot)uk>
To: pgsql-general(at)PostgreSQL(dot)org
Subject: Re: Server name in psql prompt
Date: 2010-01-08 17:57:31
Message-ID: hi7rmc$rk9$1@pye-srv-01.telemetry.co.uk
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Adrian Klaver wrote:

> In the case you describe the below might work:
> http://www.postgresql.org/docs/8.4/interactive/app-psql.html
> "Before starting up, psql attempts to read and execute commands from the
> system-wide psqlrc file and the user's ~/.psqlrc file. (On Windows, the
> user's startup file is named %APPDATA%\postgresql\psqlrc.conf.) See
> PREFIX/share/psqlrc.sample for information on setting up the system-wide
> file. It could be used to set up the client or the server to taste
> (using the \set and SET commands). "

Thanks Adrian, link noted.

> Set up a system psqlrc. I have done this when working with multiple
> versions/multiple database clusters of Postgres on one machine to keep
> track.

I've gone round a number of machines setting up a basic psqlrc file, and
will mail the most obnox^H^H^H^H^H demanding users warning them of the
issues.

>> ii) Getting the prompt to display the actual hostname of the server,
>> rather than what was put on the command line which might be an alias or
>> dotted-quad address.
>
>
> Same link as above.
> %M
>
> The full host name (with domain name) of the database server, or
> [local] if the connection is over a Unix domain socket, or
> [local:/dir/name], if the Unix domain socket is not at the compiled in
> default location.

I've just checked that and if I do psql -h postgres where postgres is
a DNS alias to postgres1 then the expansion of %M is "postgres" not
"postgres1".

>> iii) Getting the prompt to display some other identifier from the server
>> to identify the disc set
>
>
> Make either one of these different for each server.
>
> %:name:
>
> The value of the psql variable name. See the section Variables for
> details.
>
> %[ ... %]

OK but if I understand you (and the docs) correctly I'd still need to
find a way to set the variable on the client rather than having
something fetched from the server.

I thought earlier that I could use finger as a hack for querying the
server, i.e. I could put e.g. a disc set name in /home/postgres/.plan.
However I then realised that I'd need %M to be expanded before %`, so
that I could do something like

\set PROMPT1 '`finger postgres(at)%M|filter`: %/%R%# '

where filter only returned the bit that was needed. I've not tried this
due to the ordering issue.

> Prompts can contain terminal control characters which, for example,
> change the color, background, or style of the prompt text, or change the
> title of the terminal window. In order for the line editing features of
> Readline to work properly, these non-printing control characters must be
> designated as invisible by surrounding them with %[ and %]. Multiple
> pairs of these can occur within the prompt. For example:
>
> testdb=> \set PROMPT1 '%[%033[1;33;40m%]%n(at)%/%R%[%033[0m%]%# '
>
> results in a boldfaced (1;) yellow-on-black (33;40) prompt on
> VT100-compatible, color-capable terminals.

Thanks, noted.

--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2010-01-08 17:58:37 Re: Table appears on listing but can't drop it
Previous Message Fernando Morgenstern 2010-01-08 17:53:38 Re: Table appears on listing but can't drop it