def upgrade(migrate_engine, actions): """ Migre le modèle. @param migrate_engine: Connexion à la base de données, pouvant être utilisée durant la migration. @type migrate_engine: C{Engine} @param actions: Conteneur listant les actions à effectuer lorsque cette migration aura été appliquée. @type actions: C{MigrationActions} """ found = DBSession.execute( "SELECT COUNT(*) AS found " "FROM pg_catalog.pg_constraint " "WHERE conname = :constraint", params={ 'constraint': '%smapservicelink_idds_in_fkey' % DB_BASENAME, }).fetchone().found # Si le modèle a été installé après la migration 011, # les clés étrangères ont déjà le bon nom et il n'y a # rien à faire. if found: return MigrationDDL( [ # Suppression des anciennes clés étrangères. # 1. idds_from_to_to "ALTER TABLE %(db_basename)s%(table)s " "DROP CONSTRAINT %(db_basename)s%(table)s_idds_from_to_to_fkey", # 2. idds_to_to_from "ALTER TABLE %(db_basename)s%(table)s " "DROP CONSTRAINT %(db_basename)s%(table)s_idds_to_to_from_fkey", # Création des nouvelles clés. # 1. idds_out 'ALTER TABLE %(db_basename)s%(table)s ' 'ADD CONSTRAINT "%(db_basename)s%(table)s_idds_out_fkey" ' 'FOREIGN KEY (idds_out) ' 'REFERENCES %(db_basename)s%(remote_table)s(%(remote_column)s) ' 'ON UPDATE CASCADE ON DELETE CASCADE', # 2. idds_in 'ALTER TABLE %(db_basename)s%(table)s ' 'ADD CONSTRAINT "%(db_basename)s%(table)s_idds_in_fkey" ' 'FOREIGN KEY (idds_in) ' 'REFERENCES %(db_basename)s%(remote_table)s(%(remote_column)s) ' 'ON UPDATE CASCADE ON DELETE CASCADE', ], context={ 'db_basename': DB_BASENAME, 'table': 'mapservicelink', 'remote_table': 'perfdatasource', 'remote_column': 'idperfdatasource', } ).execute(DBSession, tables.HighLevelService.__table__)
def upgrade(migrate_engine, actions): """ Migre le modèle. @param migrate_engine: Connexion à la base de données, pouvant être utilisée durant la migration. @type migrate_engine: C{Engine} @param actions: Conteneur listant les actions à effectuer lorsque cette migration aura été appliquée. @type actions: C{MigrationActions} """ owner = DBSession.execute( 'SELECT tableowner ' 'FROM pg_catalog.pg_tables ' 'WHERE schemaname = :schema ' 'AND tablename = :table;', params={ 'schema': "public", 'table': tables.SupItem.__tablename__, }).fetchone().tableowner MigrationDDL( [ "ALTER TABLE %(fullname)s ADD COLUMN idconffile INTEGER", "ALTER TABLE %(fullname)s ADD CONSTRAINT %(fullname)s_idconffile_fkey " "FOREIGN KEY(idconffile) REFERENCES %(db_basename)sconffile(idconffile) " "ON UPDATE CASCADE ON DELETE CASCADE", # Correction des droits sur ConfFile. "ALTER TABLE %(db_basename)sconffile OWNER TO %(owner)s", ], # Le nom de la contrainte dépend du préfixe utilisé. context={ 'db_basename': DB_BASENAME, 'owner': owner, } ).execute(DBSession, tables.Host.__table__) # Nécessite la mise à jour de VigiReport. actions.upgrade_vigireport = True