Un historique est conservée pour les tables suivantes :
France entière :
n_arrondissement_exp_000n_commune_exp_000n_departement_exp_000n_epci_exp_000n_region_exp_000Région Pays de la Loire :
n_arrondissement_exp_r52n_commune_exp_r52n_departement_exp_r52n_epci_exp_r52n_region_exp_r52library(datalibaba)
library(DBI)
library(yaml)
À faire impérativement : configurer ou vérifier les paramètres du fichier config.yml avant chargement.
Les paramètres suivants sont ensuite récupérés :
# Charger le fichier YAML
config <- yaml::read_yaml("../config.yml")
# Récupérer les variables
database <- config$database
schema_name <- config$schema_name
role <- config$role
emprise <- config$emprise
Calcul du millésime archivé par rapport à l’année en cours :
annee_actuelle <- as.numeric(format(Sys.Date(), "%Y"))
aaaa <- annee_actuelle - 1
connexion <- datalibaba::connect_to_db(db = database, user = role)
Attention : il faut paramétrer au préalable l’emprise dans le fichier config.yml :
# Liste des entités à renommer
entities <- c("arrondissement", "commune", "departement", "epci", "region")
# Boucle sur chaque entité pour créer le nouveau nom et effectuer le renommage
for (entity in entities) {
old_table <- paste0(schema_name, ".n_", entity, "_exp_", emprise)
new_table <- paste0("n_", entity, "_exp_", aaaa, "_", emprise)
tryCatch({
DBI::dbExecute(connexion,
sprintf("ALTER TABLE %s RENAME TO %s;",
old_table, new_table))
message(sprintf("Table renommée avec succès : %s -> %s",
old_table, new_table))
},
error = function(e) {
message(sprintf("Erreur : la table %s n'a pas pu être renommée (%s)",
old_table, e$message))
}
)
}
# Suppression et création de la clé primaire sur les nouvelles tables
for (entity in entities) {
old_constraint <- sprintf("pk_n_%s_exp_%s", entity, emprise)
new_constraint <- sprintf("pk_n_%s_exp_%s_%s", entity, aaaa, emprise)
table <- sprintf("n_%s_exp_%s_%s", entity, aaaa, emprise)
tryCatch({
# Suppression de l'ancienne contrainte
DBI::dbExecute(connexion,
sprintf("ALTER TABLE %s.%s DROP CONSTRAINT %s;",
schema_name, table, old_constraint))
# Ajout de la nouvelle clé primaire avec le nouveau nom de contrainte
DBI::dbExecute(connexion,
sprintf("ALTER TABLE %s.%s ADD CONSTRAINT %s PRIMARY KEY (id);",
schema_name, table, new_constraint))
# Message en cas de succès
message(sprintf("Clé primaire renommée avec succès sur %s.%s : %s -> %s",
schema_name, table, old_constraint, new_constraint))
},
error = function(e) {
# Message en cas d'erreur
message(sprintf("Erreur pour %s.%s lors du renommage de %s -> %s : %s",
schema_name, table, old_constraint,
new_constraint, e$message))
})
}
# Boucle sur chaque entité
for (entity in entities) {
old_index <- sprintf("%s.gix_n_%s_exp_%s", schema_name, entity, emprise)
new_table <- sprintf("n_%s_exp_%s_%s", entity, aaaa, emprise)
new_index <- sprintf("gix_%s", new_table)
# Suppression de l'ancien index spatial
tryCatch({
DBI::dbExecute(connexion, sprintf("DROP INDEX IF EXISTS %s;", old_index))
message(sprintf("Index supprimé (ou déjà absent) : %s", old_index))
},
error = function(e) {
message(sprintf("Erreur lors de la suppression de l'index %s : %s",
old_index, e$message))
})
# Création du nouvel index spatial avec le millésime
tryCatch({
DBI::dbExecute(
connexion,
sprintf("CREATE INDEX IF NOT EXISTS %s ON %s.%s USING gist (the_geom);",
new_index, schema_name, new_table)
)
message(
sprintf("Index spatial créé (ou déjà existant) : %s sur %s.%s",
new_index, schema_name, new_table))
},
error = function(e) {
message(sprintf("Erreur lors de la création de l'index %s sur %s.%s : %s",
new_index, schema_name, new_table, e$message))
})
}
# Fermeture de la connexion
DBI::dbDisconnect(connexion)