我正在为running tests
设置Django项目。但我收到了以下错误:
Got an error creating the test database: permission denied to copy database "template_postgis"
注意:我的默认应用程序的数据库工作正常。 issue is happening while running tests
。
完整的堆栈跟踪如下:
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
的DATABASE配置:
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',
},
}
}
对此有何帮助?以下是我尝试的步骤:
向用户授予创建数据库访问权限:
ALTER USER my_user CREATEDB;
为test_my_db
数据库的用户授予所有权限:
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,
更新了我的答案以解决这两个问题。
答案 0 :(得分:5)
我终于找到了解决这个问题的方法。问题是,当我创建template_postgis
时,我没有将其设置为template
。
您可以通过执行以下操作进行检查:
SELECT * FROM pg_database;
您可以通过运行:{/ p>为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;'
注意:您必须是超级用户才能创建此扩展程序。
答案 1 :(得分:0)
首先正确安装包。
var loadTemplates = function (templatesObject) {
$.when.apply($, $.map(templatesObject.template, function (index, template) {
template.callback = template.callback || $.noop;
return $.ajax({
url: template.url,
}).then(function(html) {
return {html: html, template: template};
});
})).then(function() {
$.each(arguments, function(index, result) {
var compiledHtml = Handlebars.compile(result.html);
var output = compiledHtml(result.template.data);
$(result.template.target).append(output);
result.template.callback();
})
});
};
在安装过程中,会自动创建postgres用户。
sudo apt-get update
sudo apt-get install python-pip python-dev libpq-dev postgresql postgresql-contrib
您现在应该在postgres用户的shell会话中。键入以下命令登录Postgres会话:
sudo su - postgres
在你的settings.py。
中 psql
CREATE DATABASE myproject;