postgresql:致命:用户“道格拉斯”的密码验证失败
Posted
技术标签:
【中文标题】postgresql:致命:用户“道格拉斯”的密码验证失败【英文标题】:postgresql: FATAL: password authentication failed for user "douglas" 【发布时间】:2017-08-21 00:19:39 【问题描述】:我正在尝试将数据库从 sqlite 迁移到 postgresql...所以我输入:
sudo -u postgres psql
postgres=# ALTER USER postgres WITH PASSWORD 'newpassword';
输出返回ALTER ROLE
但是当我输入python manage.py migrate
时,我总是收到同样的错误:
django.db.utils.OperationalError: FATAL: 密码验证 用户“道格拉斯”失败
这是我的 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 中定义的相同密码。
【问题讨论】:
错误提到用户帐户user
,但您的alter语句正在更改用户postgres
的密码。最后,您的 settings.py 引用了另一个用户; douglas
。您实际想使用哪个用户,您是否正在运行仅引用该用户的命令?
很公平。 SQL查询呢?你应该运行ALTER USER douglas WITH PASSWORD 'vamointer';
对不起,我不明白你的意思。在尝试运行迁移之前,您是否运行了我在 postgres 数据库上编写的查询?
现在这个错误:“错误:角色“道格拉斯”不存在”=[
这更像是:D 我会在下面添加一个答案。
【参考方案1】:
您正在运行的 SQL 与您尝试使用的用户不匹配。
如果不存在,则需要create the user:
CREATE USER douglas WITH PASSWORD 'vamointer';
或者如果确实存在,则改为change that user's password。
ALTER USER douglas WITH PASSWORD 'vamointer';
一旦你做到了,你应该有更多的运气。您可能还需要assign permissions to that user。
【讨论】:
【参考方案2】:如果您像我一样头脑清醒,并且在 settings.py 中的 Django 数据库配置中使用了“USERNAME”而不是“USER”,请确保将其更改为“USER”,否则您将看到同样的错误。希望这可以帮助像我这样的人。
【讨论】:
这解决了我的问题,看起来我们是一样的哈哈。【参考方案3】:postgresql 中的特殊字符在执行时会转换为不同的字符。确保您的密码中没有特殊字符(#、$ 等)。
如果这样做,请按如下方式更改 postgresql 密码:
sudo -u postgresql psql
postgresql=#ALTER USER yourusername WITH PASSWORD
'set_new_password_without_special_character';
确保不要忘记 postgresql 命令末尾的;
。
然后运行python manage.py
,它应该可以工作了!
【讨论】:
【参考方案4】:你可以试试这个:
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',
【讨论】:
【参考方案5】:您的 PostgreSQL 服务器也可能没有运行。请运行下一条命令,检查 postgres 是否正在运行:
sudo service postgresql status
如果没有,请运行它,使用:
sudo service postgresql start
另外,您的设置中可能有错误的端口。要检查 Postgres 的运行位置,请使用:
sudo netstat -plunt |grep postgres
在 Django 设置中的 DATABASE
配置中更新 PORT
后
【讨论】:
setting.py 中缺少的 PORT 解决了我的问题。谢谢。【参考方案6】:就我而言,我必须改变
'ENGINE': 'django.db.backends.postgresql_psycopg2',
到
'ENGINE': 'django.db.backends.postgresql',
希望它对某人有所帮助!
【讨论】:
那是 postgresql 的旧“引擎”。在我发现它只是简单的'postgresql'之前,我一直尝试使用它一段时间。感谢您的帖子!【参考方案7】:发生这种情况的另一个原因是如果您运行的 postgres 版本冲突。我有一个在 docker 中运行,另一个在我的系统上。
systemctl stop postgresql 停止系统版本并清除它,如果你宁愿只使用 docker 版本。
【讨论】:
以上是关于postgresql:致命:用户“道格拉斯”的密码验证失败的主要内容,如果未能解决你的问题,请参考以下文章
org.postgresql.util.PSQLException:致命:从 Spring Boot 连接到 postgres 时用户“postgres”的密码验证失败
PostgreSQL远程连接配置管理/账号密码分配(解决:致命错误: 用户 "postgres" Ident 认证失败)