Refs #28478 -- Prevented timezone assignment for unusable PostgreSQL connections.

This commit is contained in:
Simon Charette 2019-01-12 14:17:36 -05:00 committed by Tim Graham
parent 846624ed08
commit a96b901932
1 changed files with 5 additions and 1 deletions

View File

@ -195,7 +195,8 @@ class DatabaseWrapper(BaseDatabaseWrapper):
return connection return connection
def ensure_timezone(self): def ensure_timezone(self):
self.ensure_connection() if not self.is_usable():
return False
conn_timezone_name = self.connection.get_parameter_status('TimeZone') conn_timezone_name = self.connection.get_parameter_status('TimeZone')
timezone_name = self.timezone_name timezone_name = self.timezone_name
if timezone_name and conn_timezone_name != timezone_name: if timezone_name and conn_timezone_name != timezone_name:
@ -207,6 +208,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
def init_connection_state(self): def init_connection_state(self):
self.connection.set_client_encoding('UTF8') self.connection.set_client_encoding('UTF8')
self.ensure_connection()
timezone_changed = self.ensure_timezone() timezone_changed = self.ensure_timezone()
if timezone_changed: if timezone_changed:
# Commit after setting the time zone (see #17062) # Commit after setting the time zone (see #17062)
@ -246,6 +248,8 @@ class DatabaseWrapper(BaseDatabaseWrapper):
self.cursor().execute('SET CONSTRAINTS ALL DEFERRED') self.cursor().execute('SET CONSTRAINTS ALL DEFERRED')
def is_usable(self): def is_usable(self):
if self.connection is None:
return False
try: try:
# Use a psycopg cursor directly, bypassing Django's utilities. # Use a psycopg cursor directly, bypassing Django's utilities.
self.connection.cursor().execute("SELECT 1") self.connection.cursor().execute("SELECT 1")