[英]Django 4 connection to Postgresql using passfile: "fe_sendauth: no password supplied"
你好 SO & Django 社区,
我的问题与 Django 4 有关,因为此版本中出现了使用 passfile 连接到 Postgres 的功能。 尽管我已经解决了有关以前版本的类似错误消息相关问题,但我没有成功解决我的问题。
我想要做什么
我想将 Postgres 数据库 DB_MyProject 连接到 django MyProject。 在 Django 4 中,您可以使用密码文件而不是在 settings.py 中提供所有用户/密码信息。 有关此新功能的文档在此处。 这里解释了 Postgres 中密码文件的概念,你也可以在这里阅读连接服务。
在按照我的最佳理解遵循这些文档后,我做了以下工作:
'default': {
'ENGINE': 'django.db.backends.postgresql',
'OPTIONS': {
'service': 'db_service',
'passfile': '.pgpass',
},
}
}
pg_config --sysconfdir
)中,使用以下信息创建文件 pg_service.conf ,如pg docs和django docs :[db_service]
host=localhost
port=5432
dbname=DB_MyProject
user=my_postgres_user
localhost:5432:DB_MyProject:my_postgres_user:my_passwd
现在,这个 .pgpass 文件存在于多个位置,这是为了使它工作的结果:
pg_config --sysconfdir
)所有这些文件都是具有相同权限级别的精确副本:
-rw------- 1 my_regular_user my_group 52 Mar 2 18:47 .pgpass
我还在 PGAdmin 中创建了一个具有指定名称的数据库,并确保用户具有指定密码的权限。
现在我认为它应该可以正常工作。 但是,当我尝试进行迁移或迁移或运行服务器时,我得到了这个:
django.db.utils.OperationalError:在“localhost”(::1)连接到服务器,端口 5432 失败: fe_sendauth:未提供密码
我已经尝试过什么
export PGPASSFILE=~/.pgpass
预先感谢您的帮助。 我也很乐意指出我的想法中的任何误解,因为我是一名新手开发人员。
settings.py
中创建了以下 DATABASES 条目: 'default': {
'ENGINE': 'django.db.backends.postgresql',
'OPTIONS': {
'service': 'db_service',
'passfile': '.pgpass',
},
}
}
~/.pg_service.conf
:[db_service]
host=localhost
port=5432
dbname=DB_MyProject
user=my_postgres_user
chmod 0600 MyProject/.pgpass
的权限:localhost:5432:DB_MyProject:my_postgres_user:my_passwd
没有足够的声誉来发表评论,所以要添加到 gtlee 的答案中,如果密码文件位于 django 项目的主目录中,我也只能让密码文件工作。
看来,虽然设置环境变量 PGSERVICEFILE 确实允许您将服务文件放在 linux 系统上的任何位置,但环境变量 PGPASSFILE 只是被忽略了。 有点烦人,因为它添加了另一个文件以添加到 .gitignore。
另一种解决方案是使用服务文件,然后照常传入密码,但将其存储在环境变量中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.