@@ -810,7 +810,7 @@ def dump(self,
810810filename = None ,
811811dbname = None ,
812812username = None ,
813- format = DumpFormat .Plain . value ):
813+ format = DumpFormat .Plain ):
814814"""
815815 Dump database into a file using pg_dump.
816816 NOTE: the file is not removed automatically.
@@ -825,8 +825,17 @@ def dump(self,
825825 Path to a file containing dump.
826826 """
827827
828+ # Check arguments
829+ if not isinstance (format ,DumpFormat ):
830+ try :
831+ format = DumpFormat (format )
832+ except ValueError :
833+ msg = 'Invalid format "{}"' .format (format )
834+ raise BackupException (msg )
835+
836+ # Generate tmpfile or tmpdir
828837def tmpfile ():
829- if format == DumpFormat .Directory . value :
838+ if format == DumpFormat .Directory :
830839fname = mkdtemp (prefix = TMP_DUMP )
831840else :
832841fd ,fname = mkstemp (prefix = TMP_DUMP )
@@ -845,7 +854,7 @@ def tmpfile():
845854"-f" ,filename ,
846855"-U" ,username ,
847856"-d" ,dbname ,
848- "-F" ,format
857+ "-F" ,format . value
849858 ]# yapf: disable
850859
851860execute_utility (_params ,self .utils_log_file )
@@ -872,7 +881,11 @@ def restore(self, filename, dbname=None, username=None):
872881filename
873882 ]
874883
875- execute_utility (_params ,self .utils_log_name )
884+ # try pg_restore if dump is binary formate, and psql if not
885+ try :
886+ execute_utility (_params ,self .utils_log_name )
887+ except ExecUtilException as e :
888+ self .psql (filename = filename ,dbname = dbname ,username = username )
876889
877890@method_decorator (positional_args_hack (['dbname' ,'query' ]))
878891def poll_query_until (self ,