psql profiles?

Started by Matt Zagrabelnyover 7 years ago6 messagesgeneral
Jump to latest
#1Matt Zagrabelny
mzagrabe@d.umn.edu

Greetings,

I'm setting up my workstation to use "gss" for auth to a variety of Pg
systems on different hosts.

I'd rather not have to specify the "-h" for a connection:

psql -h db-host-1.example.com foo

I'd rather do:

psql foo

and have it know that I connect to foo on host db-host-1.example.com.

Is this possible with psql or do I hack together some wrapper script?

Thanks for any input!

-m

#2Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Matt Zagrabelny (#1)
Re: psql profiles?

On 2018-Dec-06, Matt Zagrabelny wrote:

I'd rather do:

psql foo

and have it know that I connect to foo on host db-host-1.example.com.

Is this possible with psql or do I hack together some wrapper script?

Sure, just define a pg_service.conf file.
https://www.postgresql.org/docs/11/libpq-pgservice.html

--
�lvaro Herrera https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#3Matt Zagrabelny
mzagrabe@d.umn.edu
In reply to: Alvaro Herrera (#2)
Re: psql profiles?

On Thu, Dec 6, 2018 at 4:24 PM Alvaro Herrera <alvherre@2ndquadrant.com>
wrote:

On 2018-Dec-06, Matt Zagrabelny wrote:

I'd rather do:

psql foo

and have it know that I connect to foo on host db-host-1.example.com.

Is this possible with psql or do I hack together some wrapper script?

Sure, just define a pg_service.conf file.
https://www.postgresql.org/docs/11/libpq-pgservice.html

Thanks Alvaro!

Is there any shorter version than:

psql "service=foo"

?

If not, I can make a shell alias that puts the "service=$@" into the
command.

Thanks again!

-m

#4Arthur Zakirov
a.zakirov@postgrespro.ru
In reply to: Matt Zagrabelny (#3)
Re: psql profiles?

On 07.12.2018 01:34, Matt Zagrabelny wrote:

On Thu, Dec 6, 2018 at 4:24 PM Alvaro Herrera <alvherre@2ndquadrant.com
<mailto:alvherre@2ndquadrant.com>> wrote:

Sure, just define a pg_service.conf file.
https://www.postgresql.org/docs/11/libpq-pgservice.html

Thanks Alvaro!

Is there any shorter version than:

psql "service=foo"

?

If not, I can make a shell alias that puts the "service=$@" into the
command.

Also you can set environment variable PGSERVICE=foo in your .bashrc. Or
you can just set variable PGHOST=db-host-1.example.com. In last case you
don't need pg_service.conf file.

--
Arthur Zakirov
Postgres Professional: http://www.postgrespro.com
Russian Postgres Company

#5Matt Zagrabelny
mzagrabe@d.umn.edu
In reply to: Arthur Zakirov (#4)
Re: psql profiles?

On Fri, Dec 7, 2018 at 7:42 AM Arthur Zakirov <a.zakirov@postgrespro.ru>
wrote:

On 07.12.2018 01:34, Matt Zagrabelny wrote:

On Thu, Dec 6, 2018 at 4:24 PM Alvaro Herrera <alvherre@2ndquadrant.com
<mailto:alvherre@2ndquadrant.com>> wrote:

Sure, just define a pg_service.conf file.
https://www.postgresql.org/docs/11/libpq-pgservice.html

Thanks Alvaro!

Is there any shorter version than:

psql "service=foo"

?

If not, I can make a shell alias that puts the "service=$@" into the
command.

Thanks for the hints and discussion about this.

Here's my final implementation for the curious and to close the loop:

# a zsh function to avoid having to type "service="

$ which pssql
pssql () {
psql "service=$@"
}

# and a zsh completion function:

$ cat ~/.fpath/_pssql
#compdef pssql

PG_SERVICES_CONF=~/.pg_service.conf

if [[ -r ${PG_SERVICES_CONF} ]]; then
compadd $(sed -nE 's/^ *\[(.*)\] *$/\1/p' ${PG_SERVICES_CONF})
fi

It works like a charm!

Thanks for all the help!

-m

#6Ron
ronljohnsonjr@gmail.com
In reply to: Matt Zagrabelny (#5)
Re: psql profiles?

On 12/07/2018 10:45 AM, Matt Zagrabelny wrote:

On Fri, Dec 7, 2018 at 7:42 AM Arthur Zakirov <a.zakirov@postgrespro.ru
<mailto:a.zakirov@postgrespro.ru>> wrote:

On 07.12.2018 01:34, Matt Zagrabelny wrote:

On Thu, Dec 6, 2018 at 4:24 PM Alvaro Herrera

<alvherre@2ndquadrant.com <mailto:alvherre@2ndquadrant.com>

<mailto:alvherre@2ndquadrant.com <mailto:alvherre@2ndquadrant.com>>>

wrote:

     Sure, just define a pg_service.conf file.
https://www.postgresql.org/docs/11/libpq-pgservice.html

Thanks Alvaro!

Is there any shorter version than:

psql "service=foo"

?

If not, I can make a shell alias that puts the "service=$@" into the
command.

Thanks for the hints and discussion about this.

Here's my final implementation for the curious and to close the loop:

# a zsh function to avoid having to type "service="

$ which pssql
pssql () {
        psql "service=$@"
}

# and a zsh completion function:

$ cat ~/.fpath/_pssql
#compdef pssql

PG_SERVICES_CONF=~/.pg_service.conf

if [[ -r ${PG_SERVICES_CONF} ]]; then
    compadd $(sed -nE 's/^ *\[(.*)\] *$/\1/p' ${PG_SERVICES_CONF})
fi

 It works like a charm!

I made bash functions to do something similar, with just hardcoded server
names.  It has auto-complete and allows me to use descriptive names instead
of server names and custom postgres versions.

--
Angular momentum makes the world go 'round.