News zu Post­greS­QL Datenbank

DBA Tipp: Post­greS­QL Kon­fi­gu­ra­ti­ons­da­tei­en, die dem Admin das Leben erleichtern

Post­greS­QL kommt grund­sätz­lich ohne bunte Ober­flä­che aus – und das ist auch gut so. Denn alle Aufgaben, die du als DBA zu erledigen hast, lassen sich grund­sätz­lich über die Konsole abwickeln.

Das heißt al­ler­dings nicht, dass du auf An­nehm­lich­kei­ten und Au­to­ma­ti­sie­run­gen ver­zich­ten musst, wie der nach­fol­gen­de DBA Tipp zeigt.

Zeit beim Ver­bin­dungs­auf­bau sparen: mit PGSERVICE und PGSERVICEFILE

Mit dem Post­greS­QL-Client psql kannst du die Ver­bin­dung zu einer Datenbank aufbauen:

postgres@jhm-pg-ws-01(TEST16|16.2) [ ~ ] $> psql -h 
192.168.137.165 -p 5432 -U foo -d bar Password for user foo: psql (16.2) Type "help" for help. bar=# \q postgres@jhm-pg-ws-01(TEST16|16.2) [ ~ ] $>

Das funk­tio­niert zwar, jedoch nimmt das wie­der­hol­te Eingeben von Ver­bin­dungs­pa­ra­me­tern Zeit in Anspruch.

Du kannst dir auch mit der Rück­wärts­su­che der Konsole behelfen. Doch es geht noch schneller: nämlich mit den En­vi­ron­ment-Variablen PGSERVICE be­zie­hungs­wei­se PGSERVICEFILE.

psql sucht nach der “Con­nec­tion Service File” unter ~/.pg_service.conf. Pfad und Name dieser Datei können mit der Variable PGSERVICEFILE geändert werden. Legst du eine Datei ~/.pg_service.conf an, kannst du darin Ver­bin­dun­gen definieren.

Hier als Beispiel zwei Ver­bin­dun­gen zu einer Master- und einer Standby-Instanz:

postgres@jhm-pg-ws-01(TEST16|16.2) [ ~ ] $> cat <<EOF > 
~/.pg_service.conf [TEST16-1_foobar] host=192.168.137.165 port=5432 user=foo dbname=bar [TEST16-2_foobar] host=192.168.137.68 port=5432 user=foo dbname=bar EOF postgres@jhm-pg-ws-01:~ $ chmod 0640 ~/.pg_service.conf

Gibst du PGSERVICE den Namen einer Sektion, übernimmt psql die ent­spre­chen­den Verbindungsparameter.

postgres@jhm-pg-ws-01(TEST16|16.2) [ ~ ] $> export 
PGSERVICE=TEST16-1_foobar postgres@jhm-pg-ws-01(TEST16|16.2) [ ~ ] $> psql Password for user foo: psql (16.2) Type "help" for help. bar=>

psql fragt zwar nur nach dem Passwort, doch auch das lässt sich noch be­schleu­ni­gen, nämlich indem du die Sektionen in der ~/.pg_service.conf um einen Passwort-Eintrag ergänzt:

[TEST16-1_foobar]
host=192.168.137.165
port=5432
user=foo
password=foo
dbname=bar

Wie kannst du die sensiblen von den trivialen Daten trennen?

Um die sensiblen Daten von den trivialen zu trennen, erstellst du eine Datei ~/.pgpass mit einer Zeile für je eine Ver­bin­dung. Die Rechte für ~/.pgpass sollten auf 600 stehen. Sind diese zu liberal gesetzt, ignoriert psql die Datei.

postgres@jhm-pg-ws-01(TEST16|16.2) [ ~ ] $> cat <<EOF > 
~/.pgpass # hostname:port:database:username:password 192.168.137.165:5432:bar:foo:foo 192.168.137.68:5432:bar:foo:foo EOF postgres@jhm-pg-ws-01(TEST16|16.2) [ ~ ] $> chmod 600 .pgpass postgres@jhm-pg-ws-01(TEST16|16.2) [ ~ ] $> psql psql (16.2) Type "help" for help. bar=>

psql holt sich alle nötigen Parameter selbst­stän­dig aus den ent­spre­chen­den Konfigurationsdateien.

Den PGSERVICE änderst du kurz, um dich dann zur Standby Datenbank zu verbinden:

postgres@jhm-pg-ws-01(TEST16|16.2) [ ~ ] $> export 
PGSERVICE=TEST16-2_foobar postgres@jhm-pg-ws-01(TEST16|16.2) [ ~ ] $> psql psql (16.2) Type "help" for help. bar=> select pg_is_in_recovery(); pg_is_in_recovery ------------------- t (1 row) bar=>

Fazit

Mit ~/.pg_service.conf und ~/.pgpass kannst du den Workflow des Ver­bin­dungs­auf­baus zu einer Datenbank enorm be­schleu­ni­gen, da oft genutzte Ver­bin­dun­gen nicht mehr per Hand angegeben werden müssen. Al­ler­dings sind Kon­fi­gu­ra­ti­ons­da­tei­en, besonders wenn sie Pass­wör­ter im Klartext enthalten, mit Bedacht ein­zu­set­zen. Auf Test­sys­te­men ist diese Methode jedoch das Mittel, um Zeit und Tipp-Arbeit zu sparen.

Falls du mehr über die Arbeit mit Post­greS­QL Da­ten­ban­ken erfahren möchtest oder spezielle Her­aus­for­de­run­gen zu lösen hast, schreib uns gern oder ruf uns direkt an. 

Hier findest du weitere Features und Infos aus der Welt von » Post­greS­QL aus unserem News & Insights Bereich.

icon-arrow_right_medium-violet-blue.svg

Share this article

Facebook 
Twitter 
LinkedIn 
XING 
WhatsApp 
Email