首页 > 解决方案 > 为什么我无法迁移到 postgres DB?

问题描述

我当前的 Django 项目绑定到默认的 SQLite DB。现在,我想迁移到 Postgres。我已经关注了这个链接

Postgres 的安装没有任何问题。我遵循了网站中提到的完全相同的步骤:

  1. 使用“postgres”用户登录。

    sudo -u postgres psql
    
  2. 创建数据库。

     CREATE DATABASE myproject;
    
  3. 创建用户并分配密码。

    CREATE USER myprojectuser WITH PASSWORD 'password';
    
  4. 授予用户权限。

    GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
    

在此之后,我将以下属性添加到我的 Django 的 settings.py 中。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'DB_name',
        'USER': 'new_User_name',
        'PASSWORD': 'new_user_password',
        'HOST': '',
        'PORT': '',
    }
}

现在,当我这样做时,python manage.py makemigrations我得到invalid password error.

展望未来,当我执行一些 postgres 命令来检查环境时。我有以下观察。

在 Postgres shell 中,我执行 '\l' 来查看数据库。我在下面看到。

          Name           |  Owner   | Encoding | Collate |  Ctype  |       Access privileges
-------------------------+----------+----------+---------+---------+--------------------------------
 DB_Name                 | postgres | UTF8     | C.UTF-8 | C.UTF-8 | =Tc/postgres                  +
                         |          |          |         |         | postgres=CTc/postgres         +
                         |          |          |         |         | new_User_name=CTc/postgres

然后我执行 '\du' 来查看用户状态。我在下面看到。

postgres=# \du
                                       List of roles
     Role name     |                         Attributes                         | Member of
-------------------+------------------------------------------------------------+-----------
 postgres          | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
 new_User_name     |                                                            | {}

因此,从上面的输出中,我假设目标数据库仍由默认的“postgres”用户拥有,而对于新用户,我看不到任何角色属性。因为,目标数据库仍然由默认的“postgres”用户拥有。因此,即使我在 Django 的 settings.py 文件中提到了数据库名称、新用户及其密码。它行不通。这是我的理解。

因此,请建议在这种情况下如何进行。

标签: djangopostgresql

解决方案


我能够将我的 sqlite 迁移到 postgres。但作为一种解决方法,我使用了默认用户。并休息其设置密码。我无法通过其他数据库用户连接到数据库。谢谢


推荐阅读