News & Events
Konfigurationsdateien, die dem Admin das Leben erleichtern

Workflows lassen sich mit Konfigurationsdateien wie beispielsweise ~/.pgpass enorm beschleunigen und optimieren.

Icon Unternehmen

PostgreSQL kommt grundsätzlich ohne bunte Oberfläche aus - und das ist gut so. Alle Aufgaben, auf die man als DBA trifft, können auf der Konsole erledigt werden.
Doch auch hier muss nicht auf Annehmlichkeiten und Automatisierungen verzichtet werden.

Mit dem PostgreSQL-Client psql kann zu einer Datenbank verbunden werden.

postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> psql -h 192.168.137.49 -p 6531 -U foo -d db_foobar
Password for user foo:

Current Host Server Date Time : Wed Jul 24 17:43:34 CEST 2019

psql (11.4)
Type "help" for help.

foo@192.168.137.49:6531/db_foobar>

Das funktioniert, jedoch nimmt das wiederholte Eingeben von Verbindungsparametern Zeit in Anspruch.

Nun kann man sich dazu auch der Hilfe der Rückwärts-Suche der Konsole bedienen, doch es geht schneller.

Hier kommen die Environment-Variable PGSERVICE bzw. PGSERVICEFILE ins Spiel.

psql sucht nach der "Connection Service File" unter ~/.pg_service.conf
Pfad und Name dieser Datei können mit der Variable PGSERVICEFILE geändert werden. Legt man eine Datei ~/.pg_service.conf an, können darin Verbindungen definiert werden.

Hier als Beispiel zwei Verbindungen zu einer Master- und einer Standby-Instanz.

postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> touch ~/.pg_service.conf
postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> chmod 0640 ~/.pg_service.conf
postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> cat <<EOF > ~/.pg_service.conf
[CHARLIE-1_foo]
host=192.168.137.49
port=6531
user=foo
dbname=db_foobar

[CHARLIE-2_foo]
host=192.168.137.58
port=6531
user=foo
dbname=db_foobar
EOF
 

Wird PGSERVICE der Name einer Sektion gegeben, übernimmt psql die entsprechenden Verbindungesparameter.

postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> export PGSERVICE=CHARLIE-1_foo
postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> psql
Password for user foo:

Current Host Server Date Time : Wed Jul 24 17:53:37 CEST 2019

psql (11.4)
Type "help" for help.

foo@192.168.137.49:6531/db_foobar>

psql fragt zwar nur nach nach dem Passwort. Doch auch das lässt sich noch beschleunigen.

Die Sektionen in der ~/.pg_service.conf können um einen Passwort-Eintrag ergänzt werden.
Es gibt jedoch eine Möglichkeit, die sensiblen von den trivialen Daten zu trennen.

Dazu wird eine Datei ~/.pgpass mit zwei Zeilen für je eine Verbindung erstellt.
Die Rechte für ~/.pgpass sollten auf 600 stehen. Sind diese zu liberal gesetzt, ignoriert psql die Datei.

postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> touch ~/.pgpass
postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> chmod 0600 ~/.pgpass
postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> cat <<EOF > ~/.pgpass
192.168.137.49:6531:db_foobar:foo:bar
192.168.137.58:6531:db_foobar:foo:bar
EOF

Der Client wird wieder zum Master verbunden.

postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> psql

Current Host Server Date Time : Wed Jul 24 17:56:02 CEST 2019

psql (11.4)
Type "help" for help.

foo@192.168.137.49:6531/db_foobar> SELECT pg_is_in_recovery();
┌───────────────────┐
│ pg_is_in_recovery │
├───────────────────┤
│ f                 │
└───────────────────┘
(1 row)

Time: 1.065 ms
foo@192.168.137.49:6531/db_foobar>

psql holt sich alle nötigen Parameter selbstständig aus den entsprechenden Konfig-Dateien.

Kurz PGSERVICE ändern und zum Standby verbinden:

postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> export PGSERVICE=CHARLIE-2_foo
postgres@c-mde-03(CHARLIE-1|11.4) [ ~ ] $> psql

Current Host Server Date Time : Wed Jul 24 17:58:34 CEST 2019

psql (11.4)
Type "help" for help.

foo@192.168.137.58:6531/db_foobar> SELECT pg_is_in_recovery();
┌───────────────────┐
│ pg_is_in_recovery │
├───────────────────┤
│ t                 │
└───────────────────┘
(1 row)

Time: 1.782 ms
foo@192.168.137.58:6531/db_foobar>

Fazit

Mit ~/.pg_service.conf und ~/.pgpass lässt sich der Workflow enorm beschleunigen. Oft genutzte Verbindungen müssen nicht mehr per Hand angegeben werden. Allerdings sind Konfigurationsdateien, besonders wenn sie Passwörter im Klartext enthalten, mit Bedacht einzusetzen. Auf Testsystemen ist diese Methode jedoch das Mittel der Wahl, um Zeit und Tipp-Arbeit zu sparen.


Newsletter-Archiv