@@ -53,6 +53,7 @@ def parse(cls, sslmode):
5353 'database' ,
5454 'ssl' ,
5555 'sslmode' ,
56+  'direct_tls' ,
5657 'connect_timeout' ,
5758 'server_settings' ,
5859 ])
@@ -258,7 +259,7 @@ def _dot_postgresql_path(filename) -> pathlib.Path:
258259
259260def  _parse_connect_dsn_and_args (* , dsn , host , port , user ,
260261 password , passfile , database , ssl ,
261-  connect_timeout , server_settings ):
262+  direct_tls ,  connect_timeout , server_settings ):
262263 # `auth_hosts` is the version of host information for the purposes 
263264 # of reading the pgpass file. 
264265 auth_hosts  =  None 
@@ -601,8 +602,8 @@ def _parse_connect_dsn_and_args(*, dsn, host, port, user,
601602
602603 params  =  _ConnectionParameters (
603604 user = user , password = password , database = database , ssl = ssl ,
604-  sslmode = sslmode , connect_timeout = connect_timeout ,
605-  server_settings = server_settings )
605+  sslmode = sslmode , direct_tls = direct_tls ,
606+  connect_timeout = connect_timeout ,  server_settings = server_settings )
606607
607608 return  addrs , params 
608609
@@ -612,7 +613,7 @@ def _parse_connect_arguments(*, dsn, host, port, user, password, passfile,
612613 statement_cache_size ,
613614 max_cached_statement_lifetime ,
614615 max_cacheable_statement_size ,
615-  ssl , server_settings ):
616+  ssl , direct_tls ,  server_settings ):
616617
617618 local_vars  =  locals ()
618619 for  var_name  in  {'max_cacheable_statement_size' ,
@@ -640,8 +641,8 @@ def _parse_connect_arguments(*, dsn, host, port, user, password, passfile,
640641 addrs , params  =  _parse_connect_dsn_and_args (
641642 dsn = dsn , host = host , port = port , user = user ,
642643 password = password , passfile = passfile , ssl = ssl ,
643-  database = database ,  connect_timeout = timeout ,
644-  server_settings = server_settings )
644+  direct_tls = direct_tls ,  database = database ,
645+  connect_timeout = timeout ,  server_settings = server_settings )
645646
646647 config  =  _ClientConfiguration (
647648 command_timeout = command_timeout ,
@@ -812,6 +813,14 @@ async def __connect_addr(
812813 if  isinstance (addr , str ):
813814 # UNIX socket 
814815 connector  =  loop .create_unix_connection (proto_factory , addr )
816+ 
817+  elif  params .ssl  and  params .direct_tls :
818+  # if ssl and direct_tls are given, skip STARTTLS and perform direct 
819+  # SSL connection 
820+  connector  =  loop .create_connection (
821+  proto_factory , * addr , ssl = params .ssl 
822+  )
823+ 
815824 elif  params .ssl :
816825 connector  =  _create_ssl_connection (
817826 proto_factory , * addr , loop = loop , ssl_context = params .ssl ,
0 commit comments