diff options
author | Hasan Ramezani <hasan.r67@gmail.com> | 2020-12-23 23:39:43 +0100 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2021-01-20 17:30:37 +0100 |
commit | dcb3ad3319cad5c270a1856fd5f355e37cf9d474 (patch) | |
tree | 919ded9b849cb0a4ae66052c030f5bfb2e980d1a /django/db/backends/postgresql/base.py | |
parent | f054468cac325e8d8fa4d5934b939b93242a3730 (diff) | |
download | django-dcb3ad3319cad5c270a1856fd5f355e37cf9d474.tar.gz |
Fixed #32292 -- Added support for connection by service name to PostgreSQL.
Diffstat (limited to 'django/db/backends/postgresql/base.py')
-rw-r--r-- | django/db/backends/postgresql/base.py | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py index 9eac005dd1..7926c05c09 100644 --- a/django/db/backends/postgresql/base.py +++ b/django/db/backends/postgresql/base.py @@ -152,10 +152,14 @@ class DatabaseWrapper(BaseDatabaseWrapper): 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'] == '': + if ( + settings_dict['NAME'] == '' and + not settings_dict.get('OPTIONS', {}).get('service') + ): raise ImproperlyConfigured( "settings.DATABASES is improperly configured. " - "Please supply the NAME value.") + "Please supply the NAME or OPTIONS['service'] value." + ) if len(settings_dict['NAME'] or '') > self.ops.max_name_length(): raise ImproperlyConfigured( "The database name '%s' (%d characters) is longer than " @@ -166,10 +170,19 @@ class DatabaseWrapper(BaseDatabaseWrapper): self.ops.max_name_length(), ) ) - conn_params = { - 'database': settings_dict['NAME'] or 'postgres', - **settings_dict['OPTIONS'], - } + conn_params = {} + if settings_dict['NAME']: + conn_params = { + 'database': settings_dict['NAME'], + **settings_dict['OPTIONS'], + } + elif settings_dict['NAME'] is None: + # Connect to the default 'postgres' db. + settings_dict.get('OPTIONS', {}).pop('service', None) + conn_params = {'database': 'postgres', **settings_dict['OPTIONS']} + else: + conn_params = {**settings_dict['OPTIONS']} + conn_params.pop('isolation_level', None) if settings_dict['USER']: conn_params['user'] = settings_dict['USER'] |