105
105
InternalError = pglib .InternalError
106
106
ProgrammingError = pglib .ProgrammingError
107
107
OperationalError = pglib .OperationalError
108
- DatabaseError = pglib .DatabaseError
109
108
110
109
111
110
class ProcessProxy (object ):
@@ -653,7 +652,7 @@ def get_control_data(self):
653
652
654
653
return out_dict
655
654
656
- def slow_start (self ,replica = False ,dbname = 'template1' ,username = 'dev' ):
655
+ def slow_start (self ,replica = False ,dbname = 'template1' ,username = default_username () ):
657
656
"""
658
657
Starts the PostgreSQL instance and then polls the instance
659
658
until it reaches the expected state (primary or replica). The state is checked
@@ -673,14 +672,12 @@ def slow_start(self, replica=False, dbname='template1', username='dev'):
673
672
query = 'SELECT not pg_is_in_recovery()'
674
673
# Call poll_query_until until the expected value is returned
675
674
self .poll_query_until (query = query ,
676
- expected = False ,
677
675
dbname = dbname ,
678
676
username = username ,
679
677
suppress = {InternalError ,
680
678
QueryException ,
681
679
ProgrammingError ,
682
- OperationalError ,
683
- DatabaseError })
680
+ OperationalError })
684
681
685
682
def start (self ,params = [],wait = True ):
686
683
"""
@@ -970,7 +967,7 @@ def psql(self,
970
967
return process .returncode ,out ,err
971
968
972
969
@method_decorator (positional_args_hack (['dbname' ,'query' ]))
973
- def safe_psql (self ,query = None ,** kwargs ):
970
+ def safe_psql (self ,query = None ,expect_error = False , ** kwargs ):
974
971
"""
975
972
Execute a query using psql.
976
973
@@ -980,6 +977,8 @@ def safe_psql(self, query=None, **kwargs):
980
977
dbname: database name to connect to.
981
978
username: database user name.
982
979
input: raw input to be passed.
980
+ expect_error: if True - fail if we didn't get ret
981
+ if False - fail if we got ret
983
982
984
983
**kwargs are passed to psql().
985
984
@@ -992,7 +991,12 @@ def safe_psql(self, query=None, **kwargs):
992
991
993
992
ret ,out ,err = self .psql (query = query ,** kwargs )
994
993
if ret :
995
- raise QueryException ((err or b'' ).decode ('utf-8' ),query )
994
+ if expect_error :
995
+ out = (err or b'' ).decode ('utf-8' )
996
+ else :
997
+ raise QueryException ((err or b'' ).decode ('utf-8' ),query )
998
+ elif expect_error :
999
+ assert False ,f"Exception was expected, but query finished successfully: `{ query } ` "
996
1000
997
1001
return out
998
1002
@@ -1139,7 +1143,8 @@ def poll_query_until(self,
1139
1143
elif expected is None :
1140
1144
return # done
1141
1145
1142
- except tuple (suppress or []):
1146
+ except tuple (suppress or [])as e :
1147
+ print (f"Exception:{ e } " )
1143
1148
pass # we're suppressing them
1144
1149
1145
1150
time .sleep (sleep_time )