Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit221df4f

Browse files
authored
Merge pull request#32 from Fenimorkin/pg_dump
adding key -F to pg_dump
2 parentse9d2a40 +bb88d6e commit221df4f

File tree

4 files changed

+71
-18
lines changed

4 files changed

+71
-18
lines changed

‎setup.py

100644100755
File mode changed.

‎testgres/enums.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,14 @@ def from_process(process):
8585

8686
# default
8787
returnProcessType.Unknown
88+
89+
90+
classDumpFormat(Enum):
91+
"""
92+
Available dump formats
93+
"""
94+
95+
Plain='plain'
96+
Custom='custom'
97+
Directory='directory'
98+
Tar='tar'

‎testgres/node.py

Lines changed: 47 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
fromsiximportraise_from,iteritems
1111
fromtempfileimportmkstemp,mkdtemp
1212

13-
from .enumsimportNodeStatus,ProcessType
13+
from .enumsimport \
14+
NodeStatus, \
15+
ProcessType, \
16+
DumpFormat
1417

1518
from .cacheimportcached_initdb
1619

@@ -54,7 +57,8 @@
5457
QueryException, \
5558
StartNodeException, \
5659
TimeoutException, \
57-
TestgresException
60+
TestgresException, \
61+
BackupException
5862

5963
from .loggerimportTestgresLogger
6064

@@ -803,7 +807,11 @@ def safe_psql(self, query=None, **kwargs):
803807

804808
returnout
805809

806-
defdump(self,filename=None,dbname=None,username=None):
810+
defdump(self,
811+
filename=None,
812+
dbname=None,
813+
username=None,
814+
format=DumpFormat.Plain):
807815
"""
808816
Dump database into a file using pg_dump.
809817
NOTE: the file is not removed automatically.
@@ -812,14 +820,27 @@ def dump(self, filename=None, dbname=None, username=None):
812820
filename: database dump taken by pg_dump.
813821
dbname: database name to connect to.
814822
username: database user name.
823+
format: format argument plain/custom/directory/tar.
815824
816825
Returns:
817826
Path to a file containing dump.
818827
"""
819828

829+
# Check arguments
830+
ifnotisinstance(format,DumpFormat):
831+
try:
832+
format=DumpFormat(format)
833+
exceptValueError:
834+
msg='Invalid format "{}"'.format(format)
835+
raiseBackupException(msg)
836+
837+
# Generate tmpfile or tmpdir
820838
deftmpfile():
821-
fd,fname=mkstemp(prefix=TMP_DUMP)
822-
os.close(fd)
839+
ifformat==DumpFormat.Directory:
840+
fname=mkdtemp(prefix=TMP_DUMP)
841+
else:
842+
fd,fname=mkstemp(prefix=TMP_DUMP)
843+
os.close(fd)
823844
returnfname
824845

825846
# Set default arguments
@@ -833,7 +854,8 @@ def tmpfile():
833854
"-h",self.host,
834855
"-f",filename,
835856
"-U",username,
836-
"-d",dbname
857+
"-d",dbname,
858+
"-F",format.value
837859
]# yapf: disable
838860

839861
execute_utility(_params,self.utils_log_file)
@@ -845,12 +867,29 @@ def restore(self, filename, dbname=None, username=None):
845867
Restore database from pg_dump's file.
846868
847869
Args:
848-
filename: database dump taken by pg_dump.
870+
filename: database dump taken by pg_dump in custom/directory/tar formats.
849871
dbname: database name to connect to.
850872
username: database user name.
851873
"""
852874

853-
self.psql(filename=filename,dbname=dbname,username=username)
875+
# Set default arguments
876+
dbname=dbnameordefault_dbname()
877+
username=usernameordefault_username()
878+
879+
_params= [
880+
get_bin_path("pg_restore"),
881+
"-p",str(self.port),
882+
"-h",self.host,
883+
"-U",username,
884+
"-d",dbname,
885+
filename
886+
]# yapf: disable
887+
888+
# try pg_restore if dump is binary formate, and psql if not
889+
try:
890+
execute_utility(_params,self.utils_log_name)
891+
exceptExecUtilException:
892+
self.psql(filename=filename,dbname=dbname,username=username)
854893

855894
@method_decorator(positional_args_hack(['dbname','query']))
856895
defpoll_query_until(self,

‎tests/test_simple.py

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ def removing(f):
6767
finally:
6868
ifos.path.isfile(f):
6969
os.remove(f)
70+
elifos.path.isdir(f):
71+
rmtree(f,ignore_errors=True)
7072

7173

7274
classTestgresTests(unittest.TestCase):
@@ -426,16 +428,17 @@ def test_dump(self):
426428
withget_new_node().init().start()asnode1:
427429

428430
node1.execute(query_create)
429-
430-
# take a new dump
431-
withremoving(node1.dump())asdump:
432-
withget_new_node().init().start()asnode2:
433-
# restore dump
434-
self.assertTrue(os.path.isfile(dump))
435-
node2.restore(filename=dump)
436-
437-
res=node2.execute(query_select)
438-
self.assertListEqual(res, [(1, ), (2, )])
431+
forformatin ['plain','custom','directory','tar']:
432+
withremoving(node1.dump(format=format))asdump:
433+
withget_new_node().init().start()asnode3:
434+
ifformat=='directory':
435+
self.assertTrue(os.path.isdir(dump))
436+
else:
437+
self.assertTrue(os.path.isfile(dump))
438+
# restore dump
439+
node3.restore(filename=dump)
440+
res=node3.execute(query_select)
441+
self.assertListEqual(res, [(1, ), (2, )])
439442

440443
deftest_users(self):
441444
withget_new_node().init().start()asnode:

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp