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

Commit5e3c0f3

Browse files
committed
adding key -F to pg_dump
1 parent4eb329f commit5e3c0f3

File tree

3 files changed

+148
-4
lines changed

3 files changed

+148
-4
lines changed

‎setup.py

100644100755
File mode changed.

‎testgres/node.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -583,8 +583,8 @@ def cleanup(self, max_attempts=3):
583583
defpsql(self,
584584
dbname,
585585
query=None,
586-
filename=None,
587586
username=None,
587+
filename=None,
588588
input=None):
589589
"""
590590
Execute a query using psql.
@@ -658,7 +658,7 @@ def safe_psql(self, dbname, query, username=None, input=None):
658658

659659
returnout
660660

661-
defdump(self,dbname,username=None,filename=None):
661+
defdump(self,dbname,username=None,filename=None,formate=None):
662662
"""
663663
Dump database into a file using pg_dump.
664664
NOTE: the file is not removed automatically.
@@ -667,13 +667,15 @@ def dump(self, dbname, username=None, filename=None):
667667
dbname: database name to connect to.
668668
username: database user name.
669669
filename: output file.
670+
formate: format argument p/c/d/t
670671
671672
Returns:
672673
Path to a file containing dump.
673674
"""
674675

675676
# Set default arguments
676677
username=usernameor_default_username()
678+
formate=formateor"p"
677679
f,filename=filenameortempfile.mkstemp()
678680
os.close(f)
679681

@@ -684,7 +686,8 @@ def dump(self, dbname, username=None, filename=None):
684686
"-h",self.host,
685687
"-f",filename,
686688
"-U",username,
687-
"-d",dbname
689+
"-d",dbname,
690+
"-F",formate
688691
]
689692

690693
_execute_utility(_params,self.utils_log_name)
@@ -697,10 +700,11 @@ def restore(self, dbname, filename, username=None):
697700
698701
Args:
699702
dbname: database name to connect to.
703+
username: database user name.
700704
filename: database dump taken by pg_dump.
701705
"""
702706

703-
self.psql(dbname=dbname,filename=filename,username=username)
707+
self.psql(dbname=dbname,username=username,filename=filename)
704708

705709
defpoll_query_until(self,
706710
dbname,

‎tests/test_pgdump.py

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
#!/usr/bin/env python
2+
# coding: utf-8
3+
4+
importos
5+
importsubprocess
6+
importtempfile
7+
importtestgres
8+
importtime
9+
importunittest
10+
11+
importpdb
12+
13+
importlogging.config
14+
15+
fromdistutils.versionimportLooseVersion
16+
17+
fromtestgresimport \
18+
InitNodeException, \
19+
StartNodeException, \
20+
ExecUtilException, \
21+
BackupException, \
22+
QueryException, \
23+
CatchUpException, \
24+
TimeoutException
25+
26+
fromtestgresimport \
27+
TestgresConfig, \
28+
configure_testgres
29+
30+
fromtestgresimport \
31+
NodeStatus, \
32+
IsolationLevel, \
33+
get_new_node
34+
35+
fromtestgresimport \
36+
get_bin_path, \
37+
get_pg_config
38+
39+
fromtestgresimportbound_ports
40+
41+
# FIRST test from past
42+
# with testgres.get_new_node('test') as node:
43+
# node.init() # run initdb
44+
# node.start() # start PostgreSQL
45+
# #print(node.execute('postgres', 'select 1'))
46+
# #print(node.psql('postgres', 'select 1'))
47+
# print(node.connect('postgres', 'vis'))
48+
# with node.connect() as con:
49+
# con.begin('serializable')
50+
# print(con.execute('select %s', 1))
51+
# con.rollback()
52+
# node.stop() # stop PostgreSQL
53+
54+
55+
# test replication behavoiur on HOT_STANDBY_FEEDBACK
56+
# def set_trace(con, command="pg_debug"):
57+
# pid = con.execute("select pg_backend_pid()")[0][0]
58+
# p = subprocess.Popen([command], stdin=subprocess.PIPE)
59+
# p.communicate(str(pid).encode())
60+
61+
# with get_new_node() as master:
62+
# master.init().start()
63+
# with master.backup() as backup:
64+
# with backup.spawn_replica() as replica:
65+
# replica = replica.start()
66+
# master.execute('postgres', 'create table test (val int4)')
67+
# master.execute('postgres', 'insert into test values (0), (1), (2)')
68+
# replica.catchup() # wait until changes are visible
69+
# with replica.connect() as con1:
70+
# set_trace(con1)
71+
# import pdb; pdb.set_trace() # Важно,если последний идет pdb,то pass
72+
# pass
73+
74+
# print(replica.execute('postgres', 'select count(*) from test'))
75+
#print(replica.execute('postgres', ':gdb'))
76+
77+
78+
79+
# SECOND test dump new keys
80+
withget_new_node('node1')asnode1:
81+
node1.init().start()
82+
83+
withnode1.connect('postgres')ascon:
84+
con.begin()
85+
con.execute('create table test (val int)')
86+
con.execute('insert into test values (1), (2)')
87+
con.commit()
88+
89+
# take a new dump plain format
90+
dump=node1.dump('postgres')
91+
# self.assertTrue(os.path.isfile(dump))
92+
withget_new_node('node2')asnode2:
93+
node2.init().start().restore('postgres',dump)
94+
res=node2.execute('postgres','select * from test order by val asc')
95+
# self.assertListEqual(res, [(1, ), (2, )])
96+
# finally, remove dump
97+
os.remove(dump)
98+
99+
# take a new dump custom format
100+
dump=node1.dump('postgres')
101+
withget_new_node('node2')asnode2:
102+
node2.init().start().restore('postgres',dump)
103+
res=node2.execute('postgres','select * from test order by val asc')
104+
os.remove(dump)
105+
106+
# take a new dump directory format
107+
dump=node1.dump('postgres')
108+
withget_new_node('node2')asnode2:
109+
node2.init().start().restore('postgres',dump)
110+
res=node2.execute('postgres','select * from test order by val asc')
111+
os.remove(dump)
112+
113+
# take a new dump tar format
114+
dump=node1.dump('postgres')
115+
withget_new_node('node2')asnode2:
116+
node2.init().start().restore('postgres',dump)
117+
res=node2.execute('postgres','select * from test order by val asc')
118+
os.remove(dump)
119+
120+
# take a new dump tar format
121+
dump=node1.dump('postgres')
122+
withget_new_node('node2')asnode2:
123+
node2.init().start().restore('postgres',dump)
124+
res=node2.execute('postgres','select * from test order by val asc')
125+
os.remove(dump)
126+
127+
# 1) make dump to new place
128+
# pg_dump mydb > db.sql
129+
# 2) make dump to non default formate
130+
# 2.5) Чтобы сформировать выгрузку в формате plain:
131+
# pg_dump -Fp mydb > db.dump
132+
# 2.1) Чтобы сформировать выгрузку в формате custom:
133+
# pg_dump -Fc mydb > db.dump
134+
# 2.2) Чтобы сформировать выгрузку в формате directory:
135+
# pg_dump -Fd mydb -f dumpdir
136+
# 2.3) ? Чтобы сформировать выгрузку в формате directory в 5 параллельных потоков:
137+
# pg_dump -Fd mydb -j 5 -f dumpdir
138+
# 2.4) Чтобы сформировать выгрузку в формате tar:
139+
# pg_dump -Ft mydb > db.dump
140+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp