@@ -122,9 +122,13 @@ def init(self, **settings):
122
122
else :
123
123
extra_args = []
124
124
125
+ os .makedirs (self ._data_dir , exist_ok = True )
125
126
process = subprocess .run (
126
127
[self ._pg_ctl , 'init' , '-D' , self ._data_dir ] + extra_args ,
127
- stdout = subprocess .PIPE , stderr = subprocess .STDOUT )
128
+ stdout = subprocess .PIPE ,
129
+ stderr = subprocess .STDOUT ,
130
+ cwd = self ._data_dir ,
131
+ )
128
132
129
133
output = process .stdout
130
134
@@ -199,7 +203,10 @@ def start(self, wait=60, *, server_settings={}, **opts):
199
203
process = subprocess .run (
200
204
[self ._pg_ctl , 'start' , '-D' , self ._data_dir ,
201
205
'-o' , ' ' .join (extra_args )],
202
- stdout = stdout , stderr = subprocess .STDOUT )
206
+ stdout = stdout ,
207
+ stderr = subprocess .STDOUT ,
208
+ cwd = self ._data_dir ,
209
+ )
203
210
204
211
if process .returncode != 0 :
205
212
if process .stderr :
@@ -218,7 +225,10 @@ def start(self, wait=60, *, server_settings={}, **opts):
218
225
self ._daemon_process = \
219
226
subprocess .Popen (
220
227
[self ._postgres , '-D' , self ._data_dir , * extra_args ],
221
- stdout = stdout , stderr = subprocess .STDOUT )
228
+ stdout = stdout ,
229
+ stderr = subprocess .STDOUT ,
230
+ cwd = self ._data_dir ,
231
+ )
222
232
223
233
self ._daemon_pid = self ._daemon_process .pid
224
234
@@ -232,7 +242,10 @@ def reload(self):
232
242
233
243
process = subprocess .run (
234
244
[self ._pg_ctl , 'reload' , '-D' , self ._data_dir ],
235
- stdout = subprocess .PIPE , stderr = subprocess .PIPE )
245
+ stdout = subprocess .PIPE ,
246
+ stderr = subprocess .PIPE ,
247
+ cwd = self ._data_dir ,
248
+ )
236
249
237
250
stderr = process .stderr
238
251
@@ -245,7 +258,10 @@ def stop(self, wait=60):
245
258
process = subprocess .run (
246
259
[self ._pg_ctl , 'stop' , '-D' , self ._data_dir , '-t' , str (wait ),
247
260
'-m' , 'fast' ],
248
- stdout = subprocess .PIPE , stderr = subprocess .PIPE )
261
+ stdout = subprocess .PIPE ,
262
+ stderr = subprocess .PIPE ,
263
+ cwd = self ._data_dir ,
264
+ )
249
265
250
266
stderr = process .stderr
251
267
@@ -586,6 +602,10 @@ def __init__(self, *,
586
602
self ._data_dir = tempfile .mkdtemp (suffix = data_dir_suffix ,
587
603
prefix = data_dir_prefix ,
588
604
dir = data_dir_parent )
605
+ # For some yet unknown reason the temporary directory
606
+ # we create ends up being inaccessible by initdb on
607
+ # Windows despite it ostensibly running under the same user.
608
+ os .chmod (self ._data_dir , 0o755 )
589
609
super ().__init__ (self ._data_dir , pg_config_path = pg_config_path )
590
610
591
611
0 commit comments