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 认证失败)

psql:致命:用户 windows 8 的密码验证失败

Heroku - 致命:用户 <> 的密码验证失败

在 PgAdmin 中取回服务器提示错误“致命:用户“postgres”的密码验证失败”

PostgreSQL - 致命:用户的身份验证失败