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

Commitadf5fd7

Browse files
committed
Start working on update checking script
1 parentd739585 commitadf5fd7

File tree

1 file changed

+253
-0
lines changed

1 file changed

+253
-0
lines changed

‎tests/update/check_update.py

Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
1+
#!/usr/bin/env python
2+
#coding: utf-8
3+
4+
importos
5+
importcontextlib
6+
importsys
7+
importargparse
8+
importtestgres
9+
importsubprocess
10+
importdifflib
11+
12+
repo_dir=os.path.abspath(os.path.join('../..',os.path.dirname(__file__)))
13+
14+
compilation='''
15+
make USE_PGXS=1 clean
16+
make USE_PGXS=1 install
17+
'''
18+
19+
# just bunch of tables to create
20+
run_sql='''
21+
CREATE EXTENSION pg_pathman;
22+
23+
CREATE TABLE hash_rel (
24+
idSERIAL PRIMARY KEY,
25+
valueINTEGER NOT NULL);
26+
INSERT INTO hash_rel VALUES (1, 1);
27+
INSERT INTO hash_rel VALUES (2, 2);
28+
INSERT INTO hash_rel VALUES (3, 3);
29+
30+
SELECT create_hash_partitions('hash_rel', 'Value', 3);
31+
32+
CREATE TABLE range_rel (
33+
idSERIAL PRIMARY KEY,
34+
dtTIMESTAMP,
35+
txtTEXT);
36+
CREATE INDEX ON range_rel (dt);
37+
INSERT INTO range_rel (dt, txt)
38+
SELECT g, md5(g::TEXT) FROM generate_series('2015-01-01', '2015-04-30', '1 day'::interval) as g;
39+
SELECT create_range_partitions('range_rel', 'DT', '2015-01-01'::DATE, '1 month'::INTERVAL);
40+
41+
CREATE TABLE num_range_rel (
42+
idSERIAL PRIMARY KEY,
43+
txtTEXT);
44+
SELECT create_range_partitions('num_range_rel', 'id', 0, 1000, 4);
45+
INSERT INTO num_range_rel
46+
SELECT g, md5(g::TEXT) FROM generate_series(1, 3000) as g;
47+
48+
CREATE TABLE improved_dummy_test1 (id BIGSERIAL, name TEXT NOT NULL);
49+
INSERT INTO improved_dummy_test1 (name) SELECT md5(g::TEXT) FROM generate_series(1, 100) as g;
50+
SELECT create_range_partitions('improved_dummy_test1', 'id', 1, 10);
51+
INSERT INTO improved_dummy_test1 (name) VALUES ('test'); /* spawns new partition */
52+
ALTER TABLE improved_dummy_1 ADD CHECK (name != 'ib'); /* make improved_dummy_1 disappear */
53+
54+
CREATE TABLE test_improved_dummy_test2 (val INT NOT NULL);
55+
SELECT create_range_partitions('test_improved_dummy_test2', 'val',
56+
generate_range_bounds(1, 1, 2),
57+
partition_names := '{p1, p2}');
58+
59+
CREATE TABLE insert_into_select(val int NOT NULL);
60+
INSERT INTO insert_into_select SELECT generate_series(1, 100);
61+
SELECT create_range_partitions('insert_into_select', 'val', 1, 20);
62+
CREATE TABLE insert_into_select_copy (LIKE insert_into_select); /* INSERT INTO ... SELECT ... */
63+
64+
# just a lot of actions
65+
66+
SELECT split_range_partition('num_range_rel_1', 500);
67+
SELECT split_range_partition('range_rel_1', '2015-01-15'::DATE);
68+
69+
/* Merge two partitions into one */
70+
SELECT merge_range_partitions('num_range_rel_1', 'num_range_rel_' || currval('num_range_rel_seq'));
71+
SELECT merge_range_partitions('range_rel_1', 'range_rel_' || currval('range_rel_seq'));
72+
73+
/* Append and prepend partitions */
74+
SELECT append_range_partition('num_range_rel');
75+
SELECT prepend_range_partition('num_range_rel');
76+
SELECT drop_range_partition('num_range_rel_7');
77+
78+
SELECT drop_range_partition_expand_next('num_range_rel_4');
79+
SELECT drop_range_partition_expand_next('num_range_rel_6');
80+
81+
SELECT append_range_partition('range_rel');
82+
SELECT prepend_range_partition('range_rel');
83+
SELECT drop_range_partition('range_rel_7');
84+
SELECT add_range_partition('range_rel', '2014-12-01'::DATE, '2015-01-02'::DATE);
85+
SELECT add_range_partition('range_rel', '2014-12-01'::DATE, '2015-01-01'::DATE);
86+
87+
CREATE TABLE range_rel_archive (LIKE range_rel INCLUDING ALL);
88+
SELECT attach_range_partition('range_rel', 'range_rel_archive', '2014-01-01'::DATE, '2015-01-01'::DATE);
89+
SELECT attach_range_partition('range_rel', 'range_rel_archive', '2014-01-01'::DATE, '2014-12-01'::DATE);
90+
SELECT detach_range_partition('range_rel_archive');
91+
92+
CREATE TABLE range_rel_test1 (
93+
id SERIAL PRIMARY KEY,
94+
dt TIMESTAMP,
95+
txt TEXT,
96+
abc INTEGER);
97+
SELECT attach_range_partition('range_rel', 'range_rel_test1', '2013-01-01'::DATE, '2014-01-01'::DATE);
98+
CREATE TABLE range_rel_test2 (
99+
id SERIAL PRIMARY KEY,
100+
dt TIMESTAMP);
101+
SELECT attach_range_partition('range_rel', 'range_rel_test2', '2013-01-01'::DATE, '2014-01-01'::DATE);
102+
103+
/* Half open ranges */
104+
SELECT add_range_partition('range_rel', NULL, '2014-12-01'::DATE, 'range_rel_minus_infinity');
105+
SELECT add_range_partition('range_rel', '2015-06-01'::DATE, NULL, 'range_rel_plus_infinity');
106+
SELECT append_range_partition('range_rel');
107+
SELECT prepend_range_partition('range_rel');
108+
109+
CREATE TABLE range_rel_minus_infinity (LIKE range_rel INCLUDING ALL);
110+
SELECT attach_range_partition('range_rel', 'range_rel_minus_infinity', NULL, '2014-12-01'::DATE);
111+
INSERT INTO range_rel (dt) VALUES ('2012-06-15');
112+
INSERT INTO range_rel (dt) VALUES ('2015-12-15');
113+
114+
CREATE TABLE zero(
115+
idSERIAL PRIMARY KEY,
116+
valueINT NOT NULL);
117+
INSERT INTO zero SELECT g, g FROM generate_series(1, 100) as g;
118+
SELECT create_range_partitions('zero', 'value', 50, 10, 0);
119+
SELECT append_range_partition('zero', 'zero_0');
120+
SELECT prepend_range_partition('zero', 'zero_1');
121+
SELECT add_range_partition('zero', 50, 70, 'zero_50');
122+
SELECT append_range_partition('zero', 'zero_appended');
123+
SELECT prepend_range_partition('zero', 'zero_prepended');
124+
SELECT split_range_partition('zero_50', 60, 'zero_60');
125+
126+
CREATE TABLE hash_rel_extern (LIKE hash_rel INCLUDING ALL);
127+
SELECT replace_hash_partition('hash_rel_0', 'hash_rel_extern');
128+
129+
-- automatic partitions creation
130+
CREATE TABLE range_rel_test1 (
131+
idSERIAL PRIMARY KEY,
132+
dtTIMESTAMP NOT NULL,
133+
data TEXT);
134+
SELECT create_range_partitions('range_rel_test1', 'dt', '2015-01-01'::DATE, '10 days'::INTERVAL, 1);
135+
INSERT INTO range_rel_test1 (dt)
136+
SELECT generate_series('2015-01-01', '2015-04-30', '1 day'::interval);
137+
138+
INSERT INTO range_rel_test1 (dt)
139+
SELECT generate_series('2014-12-31', '2014-12-01', '-1 day'::interval);
140+
141+
/* CaMeL cAsE table names and attributes */
142+
CREATE TABLE "TeSt" (a INT NOT NULL, b INT);
143+
SELECT create_hash_partitions('TeSt', 'a', 3);
144+
SELECT create_hash_partitions('"TeSt"', 'a', 3);
145+
INSERT INTO "TeSt" VALUES (1, 1);
146+
INSERT INTO "TeSt" VALUES (2, 2);
147+
INSERT INTO "TeSt" VALUES (3, 3);
148+
149+
CREATE TABLE "RangeRel" (
150+
idSERIAL PRIMARY KEY,
151+
dtTIMESTAMP NOT NULL,
152+
txtTEXT);
153+
INSERT INTO "RangeRel" (dt, txt)
154+
SELECT g, md5(g::TEXT) FROM generate_series('2015-01-01', '2015-01-03', '1 day'::interval) as g;
155+
SELECT create_range_partitions('"RangeRel"', 'dt', '2015-01-01'::DATE, '1 day'::INTERVAL);
156+
SELECT append_range_partition('"RangeRel"');
157+
SELECT prepend_range_partition('"RangeRel"');
158+
SELECT merge_range_partitions('"RangeRel_1"', '"RangeRel_' || currval('"RangeRel_seq"') || '"');
159+
SELECT split_range_partition('"RangeRel_1"', '2015-01-01'::DATE);
160+
161+
CREATE TABLE hash_rel_next1 (
162+
idSERIAL PRIMARY KEY,
163+
valueINTEGER NOT NULL);
164+
INSERT INTO hash_rel_next1 (value) SELECT g FROM generate_series(1, 10000) as g;
165+
SELECT create_hash_partitions('hash_rel_next1', 'value', 3);
166+
167+
CREATE TABLE range_rel_next1 (
168+
idSERIAL PRIMARY KEY,
169+
dtTIMESTAMP NOT NULL,
170+
valueINTEGER);
171+
INSERT INTO range_rel_next1 (dt, value) SELECT g, extract(day from g) FROM generate_series('2010-01-01'::date, '2010-12-31'::date, '1 day') as g;
172+
SELECT create_range_partitions('range_rel_next1', 'dt', '2010-01-01'::date, '1 month'::interval, 12);
173+
SELECT merge_range_partitions('range_rel_1', 'range_rel_2');
174+
SELECT split_range_partition('range_rel_1', '2010-02-15'::date);
175+
SELECT append_range_partition('range_rel_next1');
176+
SELECT prepend_range_partition('range_rel_next1');
177+
'''
178+
179+
@contextlib.contextmanager
180+
defcwd(path):
181+
print("cwd: ",path)
182+
curdir=os.getcwd()
183+
os.chdir(path)
184+
185+
try:
186+
yield
187+
finally:
188+
print("cwd:",curdir)
189+
os.chdir(curdir)
190+
191+
dump1_file='/tmp/dump1.sql'
192+
dump2_file='/tmp/dump2.sql'
193+
194+
if__name__=='__main__':
195+
parser=argparse.ArgumentParser(description='pg_pathman update checker')
196+
parser.add_argument('branches',nargs=2,
197+
help='specify branches ("main rel_1.5")')
198+
199+
args=parser.parse_args()
200+
201+
withopen('dump_pathman_objects.sql')asf:
202+
dump_sql=f.read()
203+
204+
withcwd(repo_dir):
205+
subprocess.check_output("git checkout %s"%args.branches[0],shell=True)
206+
subprocess.check_output(compilation,shell=True)
207+
208+
withtestgres.get_new_node('updated')asnode:
209+
node.init()
210+
node.append_conf("shared_preload_libraries='pg_pathman'\n")
211+
212+
node.start()
213+
node.safe_psql('postgres',run_sql)
214+
node.dump(dump1_file,'postgres')
215+
node.stop()
216+
217+
subprocess.check_output("git checkout %s"%args.branches[1],shell=True)
218+
subprocess.check_output(compilation,shell=True)
219+
220+
version=None
221+
withopen('pg_pathman.control')asf:
222+
forlineinf.readlines():
223+
ifline.startswith('default_version'):
224+
version=line.split('=').strip()
225+
226+
ifversionisNone:
227+
print("cound not find version in second branch")
228+
exit(1)
229+
230+
node.start()
231+
node.safe_psql("postgres","alter extension pg_pathman update to %s"%version)
232+
dumped_objects_old=node.safe_psql("postgres",dump_sql)
233+
node.stop()
234+
235+
# now make clean install
236+
withtestgres.get_new_node('from_scratch')asnode:
237+
node.init()
238+
node.append_conf("shared_preload_libraries='pg_pathman'\n")
239+
node.start()
240+
node.safe_psql('postgres',run_sql)
241+
dumped_objects_new=node.safe_psql("postgres",dump_sql)
242+
node.dump(dump2_file,'postgres')
243+
244+
# check dumps
245+
node.safe_psql('postgres','create database d1')
246+
node.restore(dump1_file,'d1')
247+
248+
node.safe_psql('postgres','create database d2')
249+
node.restore(dump2_file,'d2')
250+
node.stop()
251+
252+
ifdumped_objects!=dumped_objects_new:
253+
pass

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp