Django测试:创建测试数据库时出错:“拒绝复制数据库”template_postgis“的权限”。

4

我正在为运行测试设置Django项目。 但是我遇到了以下错误:

Got an error creating the test database: permission denied to copy database "template_postgis"
注意: 我的默认应用程序数据库可以正常工作。问题出现在运行测试时。
完整的堆栈跟踪如下:
moin@moin-pc:~/workspace/mozio$ python manage.py test --verbosity=3
nosetests --verbosity=3
nose.config: INFO: Ignoring files matching ['^\\.', '^_', '^setup\\.py$']
Creating test database for alias 'default' ('test_my_db')...
Got an error creating the test database: permission denied to copy database "template_postgis"

Type 'yes' if you would like to try deleting the test database 'test_mozio_db_test', or 'no' to cancel: yes
Destroying old test database 'default'...
Got an error recreating the test database: must be owner of database test_mozio_db_test

以下��setting.py的数据库配置:
POSTGIS_VERSION = (2, 2, 2)

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': 'my_db',
        'USER': 'my_user',
        'PASSWORD': 'my_pass',
        'HOST': '<HOST_IP',
        'PORT': '',
        'TEST': {
            'NAME': 'test_my_db',
        },
    }
}

需要帮忙吗?以下是我尝试过的步骤:

  • Grant create DB access to user:

    ALTER USER my_user CREATEDB;
    
  • Grant all privileges to user for test_my_db database:

    GRANT ALL PRIVILEGES ON DATABASE test_mozio_db_test to mozio;
    

编辑: 在解决了上述问题之后,我还遇到了以下错误:

django.db.utils.ProgrammingError: type "geometry" does not exist
LINE 5:     "polygon" geometry(POLYGON,4326) NOT NULL,

我更新了答案,修复了两个问题。

2个回答

5

我终于找到了解决这个问题的方法。问题在于当我创建 template_postgis 时,我没有将其设置为一个 template

你可以通过以下方式进行检查:

SELECT * FROM pg_database;

您可以通过运行以下命令设置datistemplate=true来修复template_postgis

update pg_database set datistemplate=true where datname='template_postgis';

如果您遇到与geometry相关的错误,例如:

django.db.utils.ProgrammingError: type "geometry" does not exist
LINE 5:     "polygon" geometry(POLYGON,4326) NOT NULL,

这是因为你需要将扩展 postgis 添加到数据库中。为了修复此问题,请在 template_postgis 中添加 postgis,如下所示:

psql -d psql -d template_postgis -c 'create extension postgis;'

注意:您必须是超级用户才能创建此扩展。


0

首先正确安装软件包。

sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib

在安装过程中,Postgres用户会自动创建。

 sudo su - postgres

您现在应该已经进入了postgres用户的shell会话。通过输入以下命令登录到Postgres会话:

 psql

 CREATE DATABASE myproject;

在你的settings.py文件中。
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'myproject',
        'USER': 'postgres',
        'PASSWORD': 'password',
        'HOST': 'localhost',
        'PORT': '',
    }
}

我已经添加了答案。在我的系统上,一切都已安装好,并且默认应用程序连接正常工作。但问题只出现在测试数据库上。 - Moinuddin Quadri
@Moinuddin,错误提示显示您正在访问自动创建的模板数据库。我不知道您为什么要访问它们,但最好创建自己的数据库并将其链接到settings.py。 - Sagar
但是如果您对您的答案感到满意,那就没问题。 - Sagar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接