[英]postgresql: FATAL: password authentication failed for user "douglas"
我正在尝试将数据库从 sqlite 迁移到 postgresql ......所以我输入:
sudo -u postgres psql
postgres=# ALTER USER postgres WITH PASSWORD 'newpassword';
output 返回ALTER ROLE
但是当我输入python manage.py migrate
我总是收到相同的错误:
django.db.utils.OperationalError:致命:用户“道格拉斯”的密码验证失败
这是我的 settings.py 的数据库部分。
# Old, using mysqlite
"""
DATABASES = {
#'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
#}
'default': dj_database_url.config(default='postgres://localhost:5432/postgres_db_name'),
}
"""
# New, using postgres
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'douglas_db',
'USER': 'douglas',
'PASSWORD': 'vamointer',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
注意:当我运行“ ALTER USER postgres WITH PASSWORD ”时,我输入了在 settings.py 中定义的相同密码。
您正在运行的 SQL 与您尝试使用的用户不匹配。
CREATE USER douglas WITH PASSWORD 'vamointer';
或者如果确实存在,请改为更改该用户的密码。
ALTER USER douglas WITH PASSWORD 'vamointer';
一旦你这样做了,你应该有更多的运气。 您可能还需要为该用户分配权限。
如果您像我一样头脑发热,并且在 settings.py 的 Django 数据库配置中使用了“USERNAME”而不是“USER”,请确保将其更改为“USER”,否则您将看到同样的错误。 希望这可以帮助像我这样的人。
postgresql 中的特殊字符在执行时会转换为不同的字符。 确保您的密码中没有特殊字符(#、$ 等)。
如果这样做,请按如下方式更改 postgresql 密码:
sudo -u postgresql psql
postgresql=#ALTER USER yourusername WITH PASSWORD
'set_new_password_without_special_character';
确保你不要忘记;
在 postgresql 命令的末尾。 然后运行python manage.py
,它应该可以工作!
你可以试试这个:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'telusko',
'USER': 'postgres', #in place we should always be write USER only if we write USENAME then it will give error.
'PASSWORD': '1234',
'HOST':'localhost',
}}
也有可能你的 PostgreSQL 服务器没有运行。 请运行下一个命令,检查 postgres 是否正在运行:
sudo service postgresql status
如果没有,请运行它,使用:
sudo service postgresql start
此外,您的设置中可能有错误的端口。 要检查 Postgres 的运行位置,请使用:
sudo netstat -plunt |grep postgres
并在 Django 设置中更新DATABASE
配置中的PORT
之后
就我而言,我不得不改变
'ENGINE': 'django.db.backends.postgresql_psycopg2',
到
'ENGINE': 'django.db.backends.postgresql',
希望它可以帮助某人!
发生这种情况的另一个原因是,如果您运行的 postgres 版本存在冲突。 我有一个在 docker 中运行,另一个在我的系统上运行。
如果您只想使用 docker 版本,systemctl stop postgresql 可以停止系统版本并清除它。
试试这个为 Postgres 创建用户
postgres=# create user username with encrypted password 'password';
添加权限
postgres=# grant all on database db_name to username;
其他有用的命令可能会有所帮助
sudo -u postgres psql
\du+ #list of user
\l+ # list of DB
这篇文章的学分
注意:数据库名称和用户名始终是小写字母,即使您使用大写字母创建它们也是如此。
对我来说,这就像在我的数据库和用户名中使用大写字母一样简单。
似乎 postgres 自动忽略大小写:
postgres=# CREATE USER MyProjectUser WITH PASSWORD 'password';
然后存储为:
postgres=# \du+
List of roles
Role name | Attributes | Member of | Description
-----------+------------------------------------------------------------+-----------+-------------
myprojectuser | | {} |
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {} |
所以在我的数据库中,这个:
DATABASES = {
'default': {
.
.
'USER': 'MyProjectUser',
'PASSWORD': 'password',}}
无法识别并引发密码验证失败错误。
我没有完全相同的问题,因为我的问题是docker-compose
, django
但主要是postgres
,其中在构建django
项目的步骤中,我无法migrate
我的数据库,所以通过deleting data\db
文件夹。我试图解决有关我的问题Django Postgres docker-compose 连接错误主要失败的更多信息:致命:用户 foobar 的密码验证失败错误:2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.