Postgres - 在bash中测试数据库连接

时间:2014-11-13 14:44:33

标签: bash postgresql docker coreos

我想知道是否有替代psql命令来测试使用bash连接到postgresql数据库。

我正在设置一个核心操作系统群集,并且有一个辅助服务,它应该每分钟执行相当于psql 'host=xxx port=xxx dbname=xxx user=xxx'以确定服务是否正在运行,更重要的是,如果可以使用该服务连接到它给定参数)。

我无法直接在Core OS上安装postgres。通常在Core OS中使用的命令类似于curl -f ${COREOS_PUBLIC_IPV4}:%i;。但它只告诉服务本身是否在给定端口上运行,没有任何访问检查。

提前谢谢!

4 个答案:

答案 0 :(得分:17)

pg_isready是一个用于检查PostgreSQL数据库服务器连接状态的实用程序。退出状态指定连接检查的结果。

它可以很容易地用于bash。

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

答案 1 :(得分:6)

您可以用您选择的语言编写简单的连接脚本。

希望您的Core OS系统安装了perl,php,python,ruby等

这是python中的一个:

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

exit(0)

现在你的cmdline看起来像这样

python psqltest.py && echo 'OK' || echo 'FAIL'

答案 2 :(得分:2)

您可以构建一个简单的容器,扩展第一个容器(以节省磁盘)以执行检查。例如:

FROM postgres

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

如果您使用的图像与postgres不同,当然要使用该图像。您可以使用几乎任何您喜欢的命令行,并仍然检查CoreOS主机上bash的退出代码:

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

答案 3 :(得分:0)

要在PSQL Shell(psql)中查看连接信息,请使用\c conninfo