在Django和PostgreSQL中使用pg_service.conf文件时出现“Definition of service not found”错误

7rfyedvj  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(256)

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

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文件是否存在于正确的位置并具有正确的权限,还验证了我的DATABASE设置中的服务名称与pg_service. conf中的服务名称匹配。还有什么可能导致此错误?
如有任何帮助,将不胜感激!
我尝试过的:

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

我期待的是:

  • 为了能够从我的Django应用程序中使用pg_service.conf中定义的命名服务my_service连接到我的PostgreSQL数据库。
  • 在运行Django应用程序时没有收到“definition of service not found”错误。
axkjgtzd

axkjgtzd1#

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

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

字符串
这将文件权限设置为由postgres用户拥有,并具有0640权限。
有关在Linux中管理文件权限的详细信息,您可以参考以下资源:

相关问题