#26893: Database creation failed using PostGis and Django
----------------------------+--------------------
Reporter: csurbier | Owner: nobody
Type: Bug | Status: new
Component: GIS | Version: 1.8
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Easy pickings: 0 | UI/UX: 0
----------------------------+--------------------
I'm trying to create my database tables (python manage.py migrate) using
Postgis. However it fails because the driver try to connect do default
database "postgres" which is not my default name. I'm using django==1.8
and psycopg2==2.6.2
If i look the documentation of psycopg
(http://initd.org/psycopg/docs/module.html) The basic connection
parameters are:
dbname – the database name (only in the dsn string)
database – the database name (only as keyword argument)
user – user name used to authenticate
password – password used to authenticate
host – database host address (defaults to UNIX socket if not provided)
port – connection port number (defaults to 5432 if not provided)
Here is my database connection:
{{{
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': '<mydatabase>',
'USER': '<myuser>',
'PASSWORD': '<mypassword>',
'HOST': ‘bdsn15qbq8xaqoa-postgresql.services.clever-cloud.com'
'PORT': '5432',
'URI':'postgis://myuser:[email protected]
.clever-cloud.com:5432/bdsn15qbq8xaqoa'
}
}
}}}
I have added some trace to the connexion and as we can see, the driver
uses postgres as database name instead of the one specified in the config
file.
[('dbname', '**postgres**'), ('user', 'myuser'), ('password',
'mypassword'), ('host', 'bdsn15qbq8xaqoa-postgresql.services.clever-
cloud.com'), ('port', '5432’)]
After some research, i have edited the file :
vi django/db/backends/postgresql_psycopg2/base.py
Function :
{{{
def get_connection_params(self):
settings_dict = self.settings_dict
# None may be used to connect to the default 'postgres' db
if settings_dict['NAME'] == '':
from django.core.exceptions import ImproperlyConfigured
raise ImproperlyConfigured(
"settings.DATABASES is improperly configured. "
"Please supply the NAME value.")
conn_params = {
'database': settings_dict['NAME'] or 'postgres',
}
print settings_dict
conn_params.update(settings_dict['OPTIONS'])
conn_params.pop('isolation_level', None)
if settings_dict['USER']:
conn_params['user'] = settings_dict['USER']
if settings_dict['PASSWORD']:
conn_params['password'] = force_str(settings_dict['PASSWORD'])
if settings_dict['HOST']:
conn_params['host'] = settings_dict['HOST']
if settings_dict['PORT']:
conn_params['port'] = settings_dict['PORT']
return conn_params
}}}
and added:
{{{
if settings_dict['DBNAME']:
conn_params['dbname'] = settings_dict['DBNAME']
}}}
Now if i relaunch the database creation : python manage.py migrate it is
working fine using the good connection URI.
[('dbname', '**mydatabase**'), ('user', 'myuser'), ('password',
'mypassword'), ('host', 'bdsn15qbq8xaqoa-postgresql.services.clever-
cloud.com'), ('port', '5432’)
Thanks a lot
Christophe
--
Ticket URL: <https://code.djangoproject.com/ticket/26893>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/051.6ebf2e07daeb8a1b90058c849703d976%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.