# HG changeset patch # User Rémi Cardona # Date 1435843908 -7200 # Node ID 7f15552b74633f045c12c8c27270d901123b2585 # Parent c8dbb845b4656dd6183537ea35e9efe168f1bae6 [migration/3.21] idempotency fixes Drop constraints before (re)creating them This is postgresql-specific syntax, sqlserver needs work. diff -r c8dbb845b465 -r 7f15552b7463 misc/migration/3.21.0_Any.py --- a/misc/migration/3.21.0_Any.py Thu Jul 02 12:19:49 2015 +0200 +++ b/misc/migration/3.21.0_Any.py Thu Jul 02 15:31:48 2015 +0200 @@ -28,7 +28,8 @@ 'WHERE eid_from NOT IN (SELECT eid FROM entities) ' 'OR eid_to NOT IN (SELECT eid FROM entities)' % args) - # XXX drop if exists? + sql('ALTER TABLE %(r)s_relation DROP CONSTRAINT IF EXISTS %(r)s_relation_eid_from_fkey' % args) + sql('ALTER TABLE %(r)s_relation DROP CONSTRAINT IF EXISTS %(r)s_relation_eid_to_fkey' % args) sql('ALTER TABLE %(r)s_relation ADD CONSTRAINT %(r)s_relation_eid_from_fkey ' 'FOREIGN KEY (eid_from) REFERENCES entities (eid)' % args) sql('ALTER TABLE %(r)s_relation ADD CONSTRAINT %(r)s_relation_eid_to_fkey ' @@ -47,8 +48,7 @@ sql('UPDATE cw_%(e)s SET cw_%(r)s = NULL WHERE ' 'cw_%(r)s NOT IN (SELECT eid FROM entities)' % args) - # XXX if exists? - #sql('ALTER TABLE cw_%(e)s DROP CONSTRAINT %(c)s' % args) + sql('ALTER TABLE cw_%(e)s DROP CONSTRAINT IF EXISTS %(c)s' % args) sql('ALTER TABLE cw_%(e)s ADD CONSTRAINT %(c)s ' 'FOREIGN KEY (cw_%(r)s) references entities(eid)' % args) @@ -56,6 +56,7 @@ def add_foreign_key_etype(eschema): args = {'e': eschema.type} + sql('ALTER TABLE cw_%(e)s DROP CONSTRAINT IF EXISTS cw_%(e)s_cw_eid_fkey' % args) sql('ALTER TABLE cw_%(e)s ADD CONSTRAINT cw_%(e)s_cw_eid_fkey ' 'FOREIGN KEY (cw_eid) REFERENCES entities (eid)' % args) @@ -97,5 +98,6 @@ continue cstrname, check = check_constraint(rdef.subject, rdef.object, rdef.rtype.type, cstr, helper, prefix='cw_') + sql('ALTER TABLE %s%s DROP CONSTRAINT IF EXISTS %s' % ('cw_', rdef.subject.type, cstrname)) sql('ALTER TABLE %s%s ADD CONSTRAINT %s CHECK(%s)' % ('cw_', rdef.subject.type, cstrname, check)) commit()