mirror of
https://github.com/djrobstep/migra.git
synced 2024-08-16 01:01:00 +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 functools import partial
|
||||
|
||||
import schemainspect
|
||||
|
||||
from .statements import Statements
|
||||
from .util import differences
|
||||
|
||||
@ -602,6 +604,32 @@ class Changes(object):
|
||||
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
|
||||
def sequences(self):
|
||||
return partial(
|
||||
|
@ -88,21 +88,23 @@ class Migration(object):
|
||||
self.add(self.changes.privileges(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.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.sequences(drops_only=True))
|
||||
self.add(self.changes.enums(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.non_pk_constraints(creations_only=True))
|
||||
|
||||
self.add(self.changes.non_table_selectable_creations())
|
||||
self.add(self.changes.mv_indexes(creations_only=True))
|
||||
|
||||
if privileges:
|
||||
self.add(self.changes.privileges(creations_only=True))
|
||||
|
@ -8,3 +8,8 @@ create view v as
|
||||
select id, a, max(b)
|
||||
from t
|
||||
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,
|
||||
max(t.b) AS max
|
||||
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