【问题标题】:postgresql: FATAL: password authentication failed for user "douglas"postgresql:致命:用户“道格拉斯”的密码验证失败
【发布时间】: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 我会在下面添加一个答案。

标签: python django postgresql


【解决方案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 版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-06
          • 2013-11-15
          • 2023-04-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多