如何访问 gitlab 自带的 postgresql 数据库

要写一个代码提交的统计小程序,涉及到访问 gitlab 自带 postgresql 数据库。

gitlab 自带的外部支撑程序,例如 nginx 以及 postgresql,一般都在 /opt/gitlab/embedded 下,可执行命令则通常都在其下的 bin 下。当然,现场确认的话,可以用 ps -ef | grep -i postgres 命令。

postgres 的配置文件在 /var/opt/gitlab/postgresql/data 下的 postgresql.conf 中。从其中看到,它默认只在本机监听。对这个数据库非常陌生,只好摸索着来。先执行 /opt/gitlab/embedded/bin/psql,会报以下错误:

以为是权限,或者用户身份导致的问题,尝试 su 到 root 下,以及 gitlab 为该数据库自动创建的 gitlab-psql 用户下,执行此命令均如此,当处于 gitlab-psql 的 shell 下时,psql 所在路径存在于 PATH 中,因此可以直接调用。使用 netstat -nlp | grep -i postgres 可以看到真实监听的端口名是 /var/opt/gitlab/postgresql/.s.PGSQL.5432。搜索发现,该名称的路径部分,应该体现在 psql 命令行的 host 参数上,即应当写作 psql -h /var/opt/gitlab/postgresql,再加上目标数据库的名字,则是 psql -h /var/opt/gitlab/postgresql -d gitlabhq_production

此命令只可以在 gitlab-psql 身份下使用,如果你使用其他用户身份,则会报 psql: FATAL: role "root" does not exist 这样的错误信息,很显然,数据库中没有为当前用户设定角色。假若你要霸王硬上弓,强行使用 -U gitlab-psql 参数指定身份,也会得到 psql: FATAL: Peer authentication failed for user "gitlab-psql" 这样的错误信息,看起来是要自动使用当前用户的某种信息(很可能是证书)进行身份认证,从而失败。

总结。要访问 gitlab 自带的 postgresql 数据库,需要在服务器上,su - gitlab-psql 成功切换用户身份后,执行 psql -h /var/opt/gitlab/postgresql -d gitlabhq_production 来连接到数据库上。

下一步的目标是,使这个数据库可以远程访问。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注