将 pg_service.conf 文件与 Django 和 PostgreSQL 一起使用时出现“未找到服务定义”错误

"Definition of service not found" error when using pg_service.conf file with Django and PostgreSQL

提问人:M H R 提问时间:7/16/2023 最后编辑:M H R 更新时间:7/29/2023 访问量:69

问:

我正在尝试使用 pg_service.conf 文件来管理 Django 应用程序中的数据库连接,但是在尝试使用命名服务连接到数据库时遇到错误。

这是我在 Django 中的 DATABASES 设置的样子:

python
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'OPTIONS': {
            'service': 'my_service'
        }
    }
}

这是我的 pg_service.conf 文件的样子(位于 /etc/postgresql-common/pg_service.conf):

ini
[my_service]
host=localhost
port=5432
user=my_user
password=my_password
dbname=my_database

但是,当我尝试运行我的 Django 应用程序时,我收到以下错误:

psycopg2.OperationalError: service file "/etc/postgresql-common/pg_service.conf" not found 
The above exception was the direct cause of the following exception:
django.db.utils.OperationalError: definition of service "my_service" not found

我已检查 pg_service.conf 文件是否存在于正确的位置并具有正确的权限,并且还验证了我的 DATABASES 设置中的服务名称是否与 pg_service.conf 中的服务名称匹配。还有什么原因可能导致此错误?

任何帮助将不胜感激!

我尝试过的:

  • 已验证文件是否存在于 中并具有正确的权限(由具有权限的用户拥有)。pg_service.conf/etc/postgresql-common/postgres0640
  • 已验证我的设置中的服务名称是否与 中的服务名称匹配。DATABASESpg_service.conf
  • 在对 进行更改后重新启动了我的 Django 应用程序。pg_service.conf
  • 确认我可以使用常规 PostgreSQL 连接字符串中的相同连接参数连接到数据库(不使用 )。pg_service.conf
  • 使用 systemctl restart postgresql 重新启动 PostgreSQL 服务。

我所期待的:

  • 能够使用我的 Django 应用程序中定义的命名服务连接到我的 PostgreSQL 数据库。my_servicepg_service.conf
  • 在运行我的 Django 应用程序时没有收到“未找到服务定义”错误。
Django PostgreSQL 数据库连接

评论


答:

0赞 M H R 7/23/2023 #1

该问题与文件的文件权限有关。我通过运行以下命令更新了文件权限:pg_service.conf

sudo chmod 0640 /etc/postgresql-common/pg_service.conf

这会将文件权限设置为由用户拥有并具有权限。postgres0640

有关在 Linux 中管理文件权限的更多信息,可以参考以下资源: