77logger = logging .getLogger ("dbbackup.command" )
88
99
10- def create_postgres_uri (self ):
10+ def create_postgres_dbname_and_env (self ):
1111 host = self .settings .get ("HOST" , "localhost" )
1212 dbname = self .settings .get ("NAME" , "" )
1313 user = quote (self .settings .get ("USER" ) or "" )
14- password = self .settings .get ("PASSWORD" , "" )
15- password = f":{ quote (password )} " if password else ""
16- if not user :
17- password = ""
18- else :
14+ if user :
1915 host = "@" + host
20-
2116 port = ":{}" .format (self .settings .get ("PORT" )) if self .settings .get ("PORT" ) else ""
22- dbname = f"--dbname=postgresql://{ user } { password } { host } { port } /{ dbname } "
23- return dbname
17+ dbname = f"--dbname=postgresql://{ user } { host } { port } /{ dbname } "
18+ env = {}
19+ if self .settings .get ("PASSWORD" ):
20+ env ["PGPASSWORD" ] = self .settings .get ("PASSWORD" )
21+ return dbname , env
2422
2523
2624class PgDumpConnector (BaseCommandDBConnector ):
@@ -38,7 +36,8 @@ class PgDumpConnector(BaseCommandDBConnector):
3836
3937 def _create_dump (self ):
4038 cmd = f"{ self .dump_cmd } "
41- cmd = cmd + create_postgres_uri (self )
39+ dbname , pg_env = create_postgres_dbname_and_env (self )
40+ cmd = cmd + dbname
4241
4342 for table in self .exclude :
4443 cmd += f" --exclude-table-data={ table } "
@@ -52,12 +51,13 @@ def _create_dump(self):
5251 cmd += " -n " + " -n " .join (self .schemas )
5352
5453 cmd = f"{ self .dump_prefix } { cmd } { self .dump_suffix } "
55- stdout , stderr = self .run_command (cmd , env = self .dump_env )
54+ stdout , stderr = self .run_command (cmd , env = { ** self .dump_env , ** pg_env } )
5655 return stdout
5756
5857 def _restore_dump (self , dump ):
5958 cmd = f"{ self .restore_cmd } "
60- cmd = cmd + create_postgres_uri (self )
59+ dbname , pg_env = create_postgres_dbname_and_env (self )
60+ cmd = cmd + dbname
6161
6262 # without this, psql terminates with an exit value of 0 regardless of errors
6363 cmd += " --set ON_ERROR_STOP=on"
@@ -70,7 +70,9 @@ def _restore_dump(self, dump):
7070
7171 cmd += " {}" .format (self .settings ["NAME" ])
7272 cmd = f"{ self .restore_prefix } { cmd } { self .restore_suffix } "
73- stdout , stderr = self .run_command (cmd , stdin = dump , env = self .restore_env )
73+ stdout , stderr = self .run_command (
74+ cmd , stdin = dump , env = {** self .restore_env , ** pg_env }
75+ )
7476 return stdout , stderr
7577
7678
@@ -117,7 +119,8 @@ class PgDumpBinaryConnector(PgDumpConnector):
117119
118120 def _create_dump (self ):
119121 cmd = f"{ self .dump_cmd } "
120- cmd = cmd + create_postgres_uri (self )
122+ dbname , pg_env = create_postgres_dbname_and_env (self )
123+ cmd = cmd + dbname
121124
122125 cmd += " --format=custom"
123126 for table in self .exclude :
@@ -127,7 +130,7 @@ def _create_dump(self):
127130 cmd += " -n " + " -n " .join (self .schemas )
128131
129132 cmd = f"{ self .dump_prefix } { cmd } { self .dump_suffix } "
130- stdout , _ = self .run_command (cmd , env = self .dump_env )
133+ stdout , _ = self .run_command (cmd , env = { ** self .dump_env , ** pg_env } )
131134 return stdout
132135
133136 def _restore_dump (self , dump : str ):
@@ -140,7 +143,7 @@ def _restore_dump(self, dump: str):
140143 Builds the command as a list.
141144 """
142145
143- dbname = create_postgres_uri (self )
146+ dbname , pg_env = create_postgres_dbname_and_env (self )
144147 cmd = []
145148
146149 # Flatten optional values
@@ -188,6 +191,8 @@ def _restore_dump(self, dump: str):
188191 )
189192
190193 cmd_str = " " .join (cmd )
191- stdout , _ = self .run_command (cmd_str , stdin = dump , env = self .dump_env )
194+ stdout , _ = self .run_command (
195+ cmd_str , stdin = dump , env = {** self .dump_env , ** pg_env }
196+ )
192197
193198 return stdout
0 commit comments