繁体   English   中英

postgresql:致命:用户“道格拉斯”的密码验证失败

[英]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-composedjango但主要是postgres ,其中在构建django项目的步骤中,我无法migrate我的数据库,所以通过deleting data\db文件夹。我试图解决有关我的问题Django Postgres docker-compose 连接错误主要失败的更多信息:致命:用户 foobar 的密码验证失败错误:2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM