mirror of
https://github.com/djrobstep/migra.git
synced 2024-09-11 13:56:05 +03:00
fix mv index creation order
This commit is contained in:
parent
84e46bf481
commit
a0b580eb14
@ -3,6 +3,8 @@ from __future__ import unicode_literals
|
|||||||
from collections import OrderedDict as od
|
from collections import OrderedDict as od
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
|
import schemainspect
|
||||||
|
|
||||||
from .statements import Statements
|
from .statements import Statements
|
||||||
from .util import differences
|
from .util import differences
|
||||||
|
|
||||||
@ -602,6 +604,32 @@ class Changes(object):
|
|||||||
self.i_target.enums,
|
self.i_target.enums,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mv_indexes(self):
|
||||||
|
a = self.i_from.indexes.items()
|
||||||
|
b = self.i_target.indexes.items()
|
||||||
|
|
||||||
|
def is_mv_index(i, ii):
|
||||||
|
sig = schemainspect.misc.quoted_identifier(i.table_name, i.schema)
|
||||||
|
return sig in ii.materialized_views
|
||||||
|
|
||||||
|
a_od = od((k, v) for k, v in a if is_mv_index(v, self.i_from))
|
||||||
|
b_od = od((k, v) for k, v in b if is_mv_index(v, self.i_target))
|
||||||
|
return partial(statements_for_changes, a_od, b_od)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def non_mv_indexes(self):
|
||||||
|
a = self.i_from.indexes.items()
|
||||||
|
b = self.i_target.indexes.items()
|
||||||
|
|
||||||
|
def is_mv_index(i, ii):
|
||||||
|
sig = schemainspect.misc.quoted_identifier(i.table_name, i.schema)
|
||||||
|
return sig in ii.materialized_views
|
||||||
|
|
||||||
|
a_od = od((k, v) for k, v in a if not is_mv_index(v, self.i_from))
|
||||||
|
b_od = od((k, v) for k, v in b if not is_mv_index(v, self.i_target))
|
||||||
|
return partial(statements_for_changes, a_od, b_od)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def sequences(self):
|
def sequences(self):
|
||||||
return partial(
|
return partial(
|
||||||
|
@ -88,21 +88,23 @@ class Migration(object):
|
|||||||
self.add(self.changes.privileges(drops_only=True))
|
self.add(self.changes.privileges(drops_only=True))
|
||||||
self.add(self.changes.non_pk_constraints(drops_only=True))
|
self.add(self.changes.non_pk_constraints(drops_only=True))
|
||||||
|
|
||||||
|
self.add(self.changes.mv_indexes(drops_only=True))
|
||||||
self.add(self.changes.non_table_selectable_drops())
|
self.add(self.changes.non_table_selectable_drops())
|
||||||
|
|
||||||
self.add(self.changes.pk_constraints(drops_only=True))
|
self.add(self.changes.pk_constraints(drops_only=True))
|
||||||
self.add(self.changes.indexes(drops_only=True))
|
self.add(self.changes.non_mv_indexes(drops_only=True))
|
||||||
|
|
||||||
self.add(self.changes.tables_only_selectables())
|
self.add(self.changes.tables_only_selectables())
|
||||||
|
|
||||||
self.add(self.changes.sequences(drops_only=True))
|
self.add(self.changes.sequences(drops_only=True))
|
||||||
self.add(self.changes.enums(drops_only=True, modifications=False))
|
self.add(self.changes.enums(drops_only=True, modifications=False))
|
||||||
self.add(self.changes.extensions(drops_only=True, modifications=False))
|
self.add(self.changes.extensions(drops_only=True, modifications=False))
|
||||||
self.add(self.changes.indexes(creations_only=True))
|
self.add(self.changes.non_mv_indexes(creations_only=True))
|
||||||
self.add(self.changes.pk_constraints(creations_only=True))
|
self.add(self.changes.pk_constraints(creations_only=True))
|
||||||
self.add(self.changes.non_pk_constraints(creations_only=True))
|
self.add(self.changes.non_pk_constraints(creations_only=True))
|
||||||
|
|
||||||
self.add(self.changes.non_table_selectable_creations())
|
self.add(self.changes.non_table_selectable_creations())
|
||||||
|
self.add(self.changes.mv_indexes(creations_only=True))
|
||||||
|
|
||||||
if privileges:
|
if privileges:
|
||||||
self.add(self.changes.privileges(creations_only=True))
|
self.add(self.changes.privileges(creations_only=True))
|
||||||
|
@ -8,3 +8,8 @@ create view v as
|
|||||||
select id, a, max(b)
|
select id, a, max(b)
|
||||||
from t
|
from t
|
||||||
group by id; -- "a" is implied because "id" is primary key
|
group by id; -- "a" is implied because "id" is primary key
|
||||||
|
|
||||||
|
|
||||||
|
create materialized view mv as select id from v;
|
||||||
|
|
||||||
|
create unique index on mv (id);
|
@ -15,4 +15,11 @@ create or replace view "public"."v" as SELECT t.id,
|
|||||||
t.a,
|
t.a,
|
||||||
max(t.b) AS max
|
max(t.b) AS max
|
||||||
FROM t
|
FROM t
|
||||||
GROUP BY t.id;
|
GROUP BY t.id;
|
||||||
|
|
||||||
|
|
||||||
|
create materialized view "public"."mv" as SELECT v.id
|
||||||
|
FROM v;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE UNIQUE INDEX mv_id_idx ON public.mv USING btree (id);
|
Loading…
Reference in New Issue
Block a user