2016-09-18 50 views
2

我正在设置Django项目为running tests。但我得到以下错误:Django测试:错误创建测试数据库:权限被拒绝复制数据库“template_postgis”

Got an error creating the test database: permission denied to copy database "template_postgis" 

注意:我的默认应用程序的数据库工作正常。该issue is happening while running tests

完整的堆栈跟踪是:

[email protected]:~/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', 
     }, 
    } 
} 

对此任何帮助吗?下面是我试过的步骤:

  • 格兰特创建用户DB访问:

    ALTER USER my_user CREATEDB; 
    
  • 授予所有的权限,以用户为test_my_db数据库:

    GRANT ALL PRIVILEGES ON DATABASE test_mozio_db_test to mozio; 
    

Edi牛逼: 上述问题固定后,我也越来越误差:

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

更新我的答案来解决这两个问题。

回答

4

我终于找到了如何解决这个问题。问题是,当我创建template_postgis时,我没有将其设置为template。通过运行

SELECT * FROM pg_database; 

您可以通过设置datistemplate=truetemplate_postgis解决它:

您可以通过做检查

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

之后,在你得到错误相关的情况下, geometry like:

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

那是因为你需要添加扩展名为postgix的数据库。为了解决这个问题,添加postgistemplate_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': '', 
    } 
} 
+0

我已经添加了答案。在我的系统上安装了所有东西,默认的应用程序连接正常但问题只在于测试数据库。 –

+0

@Moinuddin错误,它说你正在访问自动创建的模板数据库。我不知道你为什么要访问它们,但更好地创建自己的数据库并将其链接到settings.py – Sagar

+0

但是,如果你对你的答案感到满意,那没关系。 – Sagar

相关问题