it-swarm.com.de

Postgres - Testen der Datenbankverbindung in Bash

Ich frage mich, ob es eine Alternative zum Befehl psql gibt, um die Verbindung zu einer postgresql-Datenbank mit bash zu testen.

Ich stelle ein Core OS-Cluster ein und besitze einen Nebendienst, der jede Minute das Äquivalent von psql 'Host=xxx port=xxx dbname=xxx user=xxx' ausführen sollte, um festzustellen, ob der Dienst ausgeführt wird, und was noch wichtiger ist, ob er mit den angegebenen Parametern eine Verbindung zu ihm herstellen kann. 

Ich kann Postgres nicht direkt auf dem Core OS installieren. Der Befehl, der normalerweise in Core OS verwendet wird, ist etwa curl -f ${COREOS_PUBLIC_IPV4}:%i;. Es sagt jedoch nur, ob der Dienst selbst auf dem angegebenen Port ohne Zugriffsprüfung ausgeführt wird.

Danke im Voraus!

11
Raphael

pg_isready ist ein Dienstprogramm zum Überprüfen des Verbindungsstatus eines PostgreSQL-Datenbankservers. Der Beendigungsstatus gibt das Ergebnis der Verbindungsprüfung an.

Es kann leicht in Bash verwendet werden.

https://www.postgresql.org/docs/9.3/static/app-pg-isready.html

16
alibaba

sie können ein einfaches Verbindungsskript in Ihrer bevorzugten Sprache schreiben. 

hoffentlich ist auf Ihrem Core OS-System eines von Perl, PHP, Python, Ruby usw. installiert

hier ist einer in python:

#!/usr/bin/python2.4
#
import psycopg2
try:
    db = psycopg2.connect("dbname='...' user='...' Host='...' password='...'")
except:
    exit(1)

exit(0)

nun sieht deine cmdline so aus

python psqltest.py && echo 'OK' || echo 'FAIL'
5
David Chan

Sie können einen einfachen Container erstellen, der den ersten erweitert (um die Festplatte zu konservieren), um die Überprüfung durchzuführen. Zum Beispiel:

FROM postgres

ENTRYPOINT [ "psql", "-h", "$POSTGRES_PORT_5432_TCP_ADDR",  "-p", "$POSTGRES_PORT_5432_TCP_PORT" ]

Wenn Sie ein anderes Bild als postgres verwenden, verwenden Sie dieses natürlich. Sie können so ziemlich jede Befehlszeile verwenden, die Sie mögen, und trotzdem die Exit-Codes von bash auf dem CoreOS-Host prüfen:

#!/bin/sh
if ! docker run --link postgres:postgres psql --command "select * from foo;" ; then
   # Do something
fi
2
J.C.

Verwenden Sie \c conninfo, um die Verbindungsinformationen in der PSQL-Shell (psql) anzuzeigen.

0
Gene