未找到服务的 PostgreSQL 定义(pgAdmin、psql、...)

PostgreSQL definition of service not found (pgAdmin, psql, ...)

上下文

我在 ${HOME}/pg_service.conf 有一个简单的 pg_service.conf 文件,内容如下:

# comment
[service_name]
host=localhost
port=5432
dbname=databasename
user=username

问题

每当我尝试通过在选项 'Service' 下设置 'service_name' 从 pgAdmin III 创建新服务器时,我都会遇到此错误消息:

我也试过复制pg_service.conf file nearby the .pg_hba.conf and restarting PostgreSQL;出现同样的问题。

当我尝试 运行 一个 psql 命令时发生同样的错误:

psql: definition of service "service_name" not found

我怎样才能让它发挥作用?
我找到了 ,但这对我帮助不大,因为它是为 Windows 用户准备的。

环境

我在 Ubuntu 18.04 使用 "PostgreSQL 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit"

1。基于用户的解决方案

注意文件名前面的点.
以下设置适用于 CentOS 7.7 上的 PG 10.12 和位于 $HOME 目录中的 .pg_service.conf

   $ cat .pg_service.conf 
    [service_name]
    host=localhost
    port=5410
    dbname=postgres
    user=postgres

然后按如下方式连接到PostgreSQL;

    $ psql postgresql://?service=service_name
    psql (10.12)
    Type "help" for help.

端口检查:

    postgres=# show port;
     port 
    ------
     5410
    (1 row)

连接检查:

    postgres=# \c
    You are now connected to database "postgres" as user "postgres".
    postgres=# 

2。系统级解决方案

您可以键入此命令来检查全局 pg_service.conf 文件必须位于的路径:

$ pg_config --sysconfdir
/etc/postgresql-common

您可以将您的 pg_service.conf 文件复制到该目录中(但此处没有点 .)。它必须由 root 拥有。

一般提示

1) 文件优先级

doc;

中所述

"The user file takes precedence over of the system-wide file."

2) 密码

peer authentication 的情况下,两种解决方案都应使用存储在 .pgpass 文件中的密码。在那种情况下,你不需要把它写在.pg_service.conf文件中。