summaryrefslogtreecommitdiff
path: root/django/db/backends/postgresql/base.py
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2020-12-23 23:39:43 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-01-20 17:30:37 +0100
commitdcb3ad3319cad5c270a1856fd5f355e37cf9d474 (patch)
tree919ded9b849cb0a4ae66052c030f5bfb2e980d1a /django/db/backends/postgresql/base.py
parentf054468cac325e8d8fa4d5934b939b93242a3730 (diff)
downloaddjango-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.py25
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']