web-dev-qa-db-fra.com

Postgres - test de la connexion à la base de données sous bash

Je me demande s’il existe une alternative à la commande psql pour tester la connexion à une base de données postgresql à l’aide de bash.

Je suis en train de configurer un cluster Core OS et de disposer d'un service annexe qui devrait exécuter l'équivalent de psql 'Host=xxx port=xxx dbname=xxx user=xxx' toutes les minutes pour déterminer si le service est en cours d'exécution, et plus important encore, si l'on peut s'y connecter en utilisant les paramètres donnés). 

Je ne peux pas installer directement Postgres sur le système d'exploitation Core. La commande généralement utilisée dans le système d’exploitation de base est quelque chose comme curl -f ${COREOS_PUBLIC_IPV4}:%i;. Mais il n'indique que si le service lui-même est exécuté sur le port donné, sans contrôle d'accès.

Merci d'avance!

11
Raphael

pg_isready est un utilitaire permettant de vérifier l'état de la connexion d'un serveur de base de données PostgreSQL. L'état de sortie spécifie le résultat de la vérification de la connexion.

Il peut facilement être utilisé en bash.

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

16
alibaba

vous pouvez écrire un script de connexion simple dans la langue de votre choix. 

j'espère que votre système Core OS est équipé de Perl, PHP, Python, Ruby, etc.

en voici un en python:

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

exit(0)

maintenant votre cmdline ressemble à ceci

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

Vous pouvez créer un conteneur simple qui étend le premier (pour conserver le disque) afin d'effectuer la vérification. Par exemple:

FROM postgres

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

Si vous utilisez une image différente de postgres, utilisez bien celle-là. Vous pouvez utiliser à peu près n'importe quelle ligne de commande et vérifier les codes de sortie de bash sur l'hôte CoreOS:

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

Pour voir les informations de connexion dans PSQL Shell (psql), utilisez \c conninfo

0
Gene