Skip to content

Commit edbea78

Browse files
committed
fix: partition-aware backfill index creation
Signed-off-by: anilb <epipav@gmail.com>
1 parent 81937e0 commit edbea78

1 file changed

Lines changed: 230 additions & 4 deletions

File tree

Lines changed: 230 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,231 @@
1-
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_last_synced_at_id_package_id_idx
2-
ON versions (last_synced_at, id, package_id);
1+
CREATE INDEX IF NOT EXISTS versions_last_synced_at_id_package_id_idx
2+
ON ONLY versions (last_synced_at, id, package_id);
33

4-
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_updated_at_id_depends_on_id_idx
5-
ON package_dependencies (updated_at, id, depends_on_id);
4+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p0_last_synced_at_id_package_id_idx
5+
ON versions_p0 (last_synced_at, id, package_id);
6+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p1_last_synced_at_id_package_id_idx
7+
ON versions_p1 (last_synced_at, id, package_id);
8+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p2_last_synced_at_id_package_id_idx
9+
ON versions_p2 (last_synced_at, id, package_id);
10+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p3_last_synced_at_id_package_id_idx
11+
ON versions_p3 (last_synced_at, id, package_id);
12+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p4_last_synced_at_id_package_id_idx
13+
ON versions_p4 (last_synced_at, id, package_id);
14+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p5_last_synced_at_id_package_id_idx
15+
ON versions_p5 (last_synced_at, id, package_id);
16+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p6_last_synced_at_id_package_id_idx
17+
ON versions_p6 (last_synced_at, id, package_id);
18+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p7_last_synced_at_id_package_id_idx
19+
ON versions_p7 (last_synced_at, id, package_id);
20+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p8_last_synced_at_id_package_id_idx
21+
ON versions_p8 (last_synced_at, id, package_id);
22+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p9_last_synced_at_id_package_id_idx
23+
ON versions_p9 (last_synced_at, id, package_id);
24+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p10_last_synced_at_id_package_id_idx
25+
ON versions_p10 (last_synced_at, id, package_id);
26+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p11_last_synced_at_id_package_id_idx
27+
ON versions_p11 (last_synced_at, id, package_id);
28+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p12_last_synced_at_id_package_id_idx
29+
ON versions_p12 (last_synced_at, id, package_id);
30+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p13_last_synced_at_id_package_id_idx
31+
ON versions_p13 (last_synced_at, id, package_id);
32+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p14_last_synced_at_id_package_id_idx
33+
ON versions_p14 (last_synced_at, id, package_id);
34+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p15_last_synced_at_id_package_id_idx
35+
ON versions_p15 (last_synced_at, id, package_id);
36+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p16_last_synced_at_id_package_id_idx
37+
ON versions_p16 (last_synced_at, id, package_id);
38+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p17_last_synced_at_id_package_id_idx
39+
ON versions_p17 (last_synced_at, id, package_id);
40+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p18_last_synced_at_id_package_id_idx
41+
ON versions_p18 (last_synced_at, id, package_id);
42+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p19_last_synced_at_id_package_id_idx
43+
ON versions_p19 (last_synced_at, id, package_id);
44+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p20_last_synced_at_id_package_id_idx
45+
ON versions_p20 (last_synced_at, id, package_id);
46+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p21_last_synced_at_id_package_id_idx
47+
ON versions_p21 (last_synced_at, id, package_id);
48+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p22_last_synced_at_id_package_id_idx
49+
ON versions_p22 (last_synced_at, id, package_id);
50+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p23_last_synced_at_id_package_id_idx
51+
ON versions_p23 (last_synced_at, id, package_id);
52+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p24_last_synced_at_id_package_id_idx
53+
ON versions_p24 (last_synced_at, id, package_id);
54+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p25_last_synced_at_id_package_id_idx
55+
ON versions_p25 (last_synced_at, id, package_id);
56+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p26_last_synced_at_id_package_id_idx
57+
ON versions_p26 (last_synced_at, id, package_id);
58+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p27_last_synced_at_id_package_id_idx
59+
ON versions_p27 (last_synced_at, id, package_id);
60+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p28_last_synced_at_id_package_id_idx
61+
ON versions_p28 (last_synced_at, id, package_id);
62+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p29_last_synced_at_id_package_id_idx
63+
ON versions_p29 (last_synced_at, id, package_id);
64+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p30_last_synced_at_id_package_id_idx
65+
ON versions_p30 (last_synced_at, id, package_id);
66+
CREATE INDEX CONCURRENTLY IF NOT EXISTS versions_p31_last_synced_at_id_package_id_idx
67+
ON versions_p31 (last_synced_at, id, package_id);
68+
69+
DO $$
70+
DECLARE part text;
71+
BEGIN
72+
FOR part IN
73+
SELECT c.relname FROM pg_inherits i JOIN pg_class c ON c.oid = i.inhrelid
74+
WHERE i.inhparent = 'versions'::regclass
75+
LOOP
76+
IF NOT EXISTS (
77+
SELECT 1 FROM pg_inherits
78+
WHERE inhrelid = (part || '_last_synced_at_id_package_id_idx')::regclass
79+
) THEN
80+
EXECUTE format('ALTER INDEX versions_last_synced_at_id_package_id_idx ATTACH PARTITION %I', part || '_last_synced_at_id_package_id_idx');
81+
END IF;
82+
END LOOP;
83+
END$$;
84+
85+
CREATE INDEX IF NOT EXISTS package_dependencies_updated_at_id_depends_on_id_idx
86+
ON ONLY package_dependencies (updated_at, id, depends_on_id);
87+
88+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p0_updated_at_id_depends_on_id_idx
89+
ON package_dependencies_p0 (updated_at, id, depends_on_id);
90+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p1_updated_at_id_depends_on_id_idx
91+
ON package_dependencies_p1 (updated_at, id, depends_on_id);
92+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p2_updated_at_id_depends_on_id_idx
93+
ON package_dependencies_p2 (updated_at, id, depends_on_id);
94+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p3_updated_at_id_depends_on_id_idx
95+
ON package_dependencies_p3 (updated_at, id, depends_on_id);
96+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p4_updated_at_id_depends_on_id_idx
97+
ON package_dependencies_p4 (updated_at, id, depends_on_id);
98+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p5_updated_at_id_depends_on_id_idx
99+
ON package_dependencies_p5 (updated_at, id, depends_on_id);
100+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p6_updated_at_id_depends_on_id_idx
101+
ON package_dependencies_p6 (updated_at, id, depends_on_id);
102+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p7_updated_at_id_depends_on_id_idx
103+
ON package_dependencies_p7 (updated_at, id, depends_on_id);
104+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p8_updated_at_id_depends_on_id_idx
105+
ON package_dependencies_p8 (updated_at, id, depends_on_id);
106+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p9_updated_at_id_depends_on_id_idx
107+
ON package_dependencies_p9 (updated_at, id, depends_on_id);
108+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p10_updated_at_id_depends_on_id_idx
109+
ON package_dependencies_p10 (updated_at, id, depends_on_id);
110+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p11_updated_at_id_depends_on_id_idx
111+
ON package_dependencies_p11 (updated_at, id, depends_on_id);
112+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p12_updated_at_id_depends_on_id_idx
113+
ON package_dependencies_p12 (updated_at, id, depends_on_id);
114+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p13_updated_at_id_depends_on_id_idx
115+
ON package_dependencies_p13 (updated_at, id, depends_on_id);
116+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p14_updated_at_id_depends_on_id_idx
117+
ON package_dependencies_p14 (updated_at, id, depends_on_id);
118+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p15_updated_at_id_depends_on_id_idx
119+
ON package_dependencies_p15 (updated_at, id, depends_on_id);
120+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p16_updated_at_id_depends_on_id_idx
121+
ON package_dependencies_p16 (updated_at, id, depends_on_id);
122+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p17_updated_at_id_depends_on_id_idx
123+
ON package_dependencies_p17 (updated_at, id, depends_on_id);
124+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p18_updated_at_id_depends_on_id_idx
125+
ON package_dependencies_p18 (updated_at, id, depends_on_id);
126+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p19_updated_at_id_depends_on_id_idx
127+
ON package_dependencies_p19 (updated_at, id, depends_on_id);
128+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p20_updated_at_id_depends_on_id_idx
129+
ON package_dependencies_p20 (updated_at, id, depends_on_id);
130+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p21_updated_at_id_depends_on_id_idx
131+
ON package_dependencies_p21 (updated_at, id, depends_on_id);
132+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p22_updated_at_id_depends_on_id_idx
133+
ON package_dependencies_p22 (updated_at, id, depends_on_id);
134+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p23_updated_at_id_depends_on_id_idx
135+
ON package_dependencies_p23 (updated_at, id, depends_on_id);
136+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p24_updated_at_id_depends_on_id_idx
137+
ON package_dependencies_p24 (updated_at, id, depends_on_id);
138+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p25_updated_at_id_depends_on_id_idx
139+
ON package_dependencies_p25 (updated_at, id, depends_on_id);
140+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p26_updated_at_id_depends_on_id_idx
141+
ON package_dependencies_p26 (updated_at, id, depends_on_id);
142+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p27_updated_at_id_depends_on_id_idx
143+
ON package_dependencies_p27 (updated_at, id, depends_on_id);
144+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p28_updated_at_id_depends_on_id_idx
145+
ON package_dependencies_p28 (updated_at, id, depends_on_id);
146+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p29_updated_at_id_depends_on_id_idx
147+
ON package_dependencies_p29 (updated_at, id, depends_on_id);
148+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p30_updated_at_id_depends_on_id_idx
149+
ON package_dependencies_p30 (updated_at, id, depends_on_id);
150+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p31_updated_at_id_depends_on_id_idx
151+
ON package_dependencies_p31 (updated_at, id, depends_on_id);
152+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p32_updated_at_id_depends_on_id_idx
153+
ON package_dependencies_p32 (updated_at, id, depends_on_id);
154+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p33_updated_at_id_depends_on_id_idx
155+
ON package_dependencies_p33 (updated_at, id, depends_on_id);
156+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p34_updated_at_id_depends_on_id_idx
157+
ON package_dependencies_p34 (updated_at, id, depends_on_id);
158+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p35_updated_at_id_depends_on_id_idx
159+
ON package_dependencies_p35 (updated_at, id, depends_on_id);
160+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p36_updated_at_id_depends_on_id_idx
161+
ON package_dependencies_p36 (updated_at, id, depends_on_id);
162+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p37_updated_at_id_depends_on_id_idx
163+
ON package_dependencies_p37 (updated_at, id, depends_on_id);
164+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p38_updated_at_id_depends_on_id_idx
165+
ON package_dependencies_p38 (updated_at, id, depends_on_id);
166+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p39_updated_at_id_depends_on_id_idx
167+
ON package_dependencies_p39 (updated_at, id, depends_on_id);
168+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p40_updated_at_id_depends_on_id_idx
169+
ON package_dependencies_p40 (updated_at, id, depends_on_id);
170+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p41_updated_at_id_depends_on_id_idx
171+
ON package_dependencies_p41 (updated_at, id, depends_on_id);
172+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p42_updated_at_id_depends_on_id_idx
173+
ON package_dependencies_p42 (updated_at, id, depends_on_id);
174+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p43_updated_at_id_depends_on_id_idx
175+
ON package_dependencies_p43 (updated_at, id, depends_on_id);
176+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p44_updated_at_id_depends_on_id_idx
177+
ON package_dependencies_p44 (updated_at, id, depends_on_id);
178+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p45_updated_at_id_depends_on_id_idx
179+
ON package_dependencies_p45 (updated_at, id, depends_on_id);
180+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p46_updated_at_id_depends_on_id_idx
181+
ON package_dependencies_p46 (updated_at, id, depends_on_id);
182+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p47_updated_at_id_depends_on_id_idx
183+
ON package_dependencies_p47 (updated_at, id, depends_on_id);
184+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p48_updated_at_id_depends_on_id_idx
185+
ON package_dependencies_p48 (updated_at, id, depends_on_id);
186+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p49_updated_at_id_depends_on_id_idx
187+
ON package_dependencies_p49 (updated_at, id, depends_on_id);
188+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p50_updated_at_id_depends_on_id_idx
189+
ON package_dependencies_p50 (updated_at, id, depends_on_id);
190+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p51_updated_at_id_depends_on_id_idx
191+
ON package_dependencies_p51 (updated_at, id, depends_on_id);
192+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p52_updated_at_id_depends_on_id_idx
193+
ON package_dependencies_p52 (updated_at, id, depends_on_id);
194+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p53_updated_at_id_depends_on_id_idx
195+
ON package_dependencies_p53 (updated_at, id, depends_on_id);
196+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p54_updated_at_id_depends_on_id_idx
197+
ON package_dependencies_p54 (updated_at, id, depends_on_id);
198+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p55_updated_at_id_depends_on_id_idx
199+
ON package_dependencies_p55 (updated_at, id, depends_on_id);
200+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p56_updated_at_id_depends_on_id_idx
201+
ON package_dependencies_p56 (updated_at, id, depends_on_id);
202+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p57_updated_at_id_depends_on_id_idx
203+
ON package_dependencies_p57 (updated_at, id, depends_on_id);
204+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p58_updated_at_id_depends_on_id_idx
205+
ON package_dependencies_p58 (updated_at, id, depends_on_id);
206+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p59_updated_at_id_depends_on_id_idx
207+
ON package_dependencies_p59 (updated_at, id, depends_on_id);
208+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p60_updated_at_id_depends_on_id_idx
209+
ON package_dependencies_p60 (updated_at, id, depends_on_id);
210+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p61_updated_at_id_depends_on_id_idx
211+
ON package_dependencies_p61 (updated_at, id, depends_on_id);
212+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p62_updated_at_id_depends_on_id_idx
213+
ON package_dependencies_p62 (updated_at, id, depends_on_id);
214+
CREATE INDEX CONCURRENTLY IF NOT EXISTS package_dependencies_p63_updated_at_id_depends_on_id_idx
215+
ON package_dependencies_p63 (updated_at, id, depends_on_id);
216+
217+
DO $$
218+
DECLARE part text;
219+
BEGIN
220+
FOR part IN
221+
SELECT c.relname FROM pg_inherits i JOIN pg_class c ON c.oid = i.inhrelid
222+
WHERE i.inhparent = 'package_dependencies'::regclass
223+
LOOP
224+
IF NOT EXISTS (
225+
SELECT 1 FROM pg_inherits
226+
WHERE inhrelid = (part || '_updated_at_id_depends_on_id_idx')::regclass
227+
) THEN
228+
EXECUTE format('ALTER INDEX package_dependencies_updated_at_id_depends_on_id_idx ATTACH PARTITION %I', part || '_updated_at_id_depends_on_id_idx');
229+
END IF;
230+
END LOOP;
231+
END$$;

0 commit comments

Comments
 (0)