2016-09-18 13 views
2

Я работаю над настройкой Django Project для running tests. Но я получаю ниже ошибки:Django Test: ошибка создания тестовой базы данных: разрешение на копирование базы данных «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=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, 

Это потому, что вам нужно добавить расширение postgix с базой данных. Для того, чтобы исправить это, добавьте postgis к template_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. Войдите в сеанс 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