7
7
logger = logging .getLogger ("dbbackup.command" )
8
8
9
9
10
- def create_postgres_uri (self ):
10
+ def create_postgres_dbname_and_env (self ):
11
11
host = self .settings .get ("HOST" , "localhost" )
12
12
dbname = self .settings .get ("NAME" , "" )
13
13
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 :
19
15
host = "@" + host
20
-
21
16
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
24
22
25
23
26
24
class PgDumpConnector (BaseCommandDBConnector ):
@@ -38,7 +36,8 @@ class PgDumpConnector(BaseCommandDBConnector):
38
36
39
37
def _create_dump (self ):
40
38
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
42
41
43
42
for table in self .exclude :
44
43
cmd += f" --exclude-table-data={ table } "
@@ -52,12 +51,13 @@ def _create_dump(self):
52
51
cmd += " -n " + " -n " .join (self .schemas )
53
52
54
53
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 } )
56
55
return stdout
57
56
58
57
def _restore_dump (self , dump ):
59
58
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
61
61
62
62
# without this, psql terminates with an exit value of 0 regardless of errors
63
63
cmd += " --set ON_ERROR_STOP=on"
@@ -70,7 +70,9 @@ def _restore_dump(self, dump):
70
70
71
71
cmd += " {}" .format (self .settings ["NAME" ])
72
72
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
+ )
74
76
return stdout , stderr
75
77
76
78
@@ -117,7 +119,8 @@ class PgDumpBinaryConnector(PgDumpConnector):
117
119
118
120
def _create_dump (self ):
119
121
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
121
124
122
125
cmd += " --format=custom"
123
126
for table in self .exclude :
@@ -127,7 +130,7 @@ def _create_dump(self):
127
130
cmd += " -n " + " -n " .join (self .schemas )
128
131
129
132
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 } )
131
134
return stdout
132
135
133
136
def _restore_dump (self , dump : str ):
@@ -140,7 +143,7 @@ def _restore_dump(self, dump: str):
140
143
Builds the command as a list.
141
144
"""
142
145
143
- dbname = create_postgres_uri (self )
146
+ dbname , pg_env = create_postgres_dbname_and_env (self )
144
147
cmd = []
145
148
146
149
# Flatten optional values
@@ -188,6 +191,8 @@ def _restore_dump(self, dump: str):
188
191
)
189
192
190
193
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
+ )
192
197
193
198
return stdout
0 commit comments