Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • dreal-pdl/csd/datalibaba
1 result
Show changes
Commits on Source (2)
......@@ -10,3 +10,4 @@
^\.gitlab-ci\.yml$
^ci/lib$
^debug
^dev$
......@@ -41,10 +41,23 @@ coverage:
only:
- master
- production
- mise_en_place_test
before_script:
- echo "chargement paquets ubuntu"
- apt-get update
- apt-get install -y postgresql-16 postgresql-client-16
- apt-get install -y postgis postgresql-16-postgis-3
- apt-get install -y odbc-postgresql
- sudo service postgresql restart
- echo "preparation env postgres pour tests"
- ( echo CREATE USER runner WITH PASSWORD \'$BDD_RUNNER_PWD\' SUPERUSER; ) | sudo -u postgres psql -d template1
- Rscript dev/0_prepa_env_test.R
script:
- Rscript -e 'remotes::install_local(upgrade = "never")'
- Rscript -e 'remotes::install_cran(c("covr", "DT"), upgrade = "never")'
- Rscript -e 'covr::gitlab(quiet = FALSE)'
coverage: '/Coverage: \d+(?:\.\d+)?/'
artifacts:
paths:
- public
......
Package: datalibaba
Title: Interface De Connexion a Une Base Posgres Postgis
Version: 0.0.0.9009
Version: 0.0.0.9010
Authors@R:
c(person(given = "Maël",
family = "Theulière",
......@@ -9,7 +9,12 @@ Authors@R:
person(given = "Juliette",
family = "Engelaere Lefebvre",
role = c("aut", "cre"),
email = "juliette.engelaere-lefebvre@developpement-durable.gouv.fr"))
email = "juliette.engelaere-lefebvre@developpement-durable.gouv.fr"),
person(given = "Edouard",
family = "Morin",
role = c("aut"),
email = "edouard.morin@developpement-durable.gouv.fr")
)
Description: Interface de connexion a une base Posgres : lecture,
ecriture, consultation des schemas, gestion des types de donnees de R.
License: GPL (>= 3)
......@@ -33,13 +38,18 @@ Imports:
magrittr,
tibble,
units,
tidyr
tidyr,
lifecycle
Suggests:
knitr,
rmarkdown
rmarkdown,
testthat (>= 3.0.0),
backports,
lubridate
Encoding: UTF-8
LazyData: true
Roxygen: list(markdown = TRUE)
URL: https://dreal-pdl.gitlab-pages.din.developpement-durable.gouv.fr/csd/datalibaba/index.html, https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/datalibaba
RoxygenNote: 7.2.3
RoxygenNote: 7.3.2
VignetteBuilder: knitr
Config/testthat/edition: 3
......@@ -25,6 +25,7 @@ export(poster_data)
export(set_schema_rights)
export(standard_var_pg)
export(transferer_table_comments)
import(lifecycle)
importFrom(DBI,Id)
importFrom(DBI,dbConnect)
importFrom(DBI,dbDisconnect)
......@@ -33,9 +34,9 @@ importFrom(DBI,dbExecute)
importFrom(DBI,dbExistsTable)
importFrom(DBI,dbGetQuery)
importFrom(DBI,dbReadTable)
importFrom(DBI,dbSendQuery)
importFrom(DBI,dbWriteTable)
importFrom(RPostgreSQL,postgresqlpqExec)
importFrom(RPostgres,Postgres)
importFrom(attempt,message_if)
importFrom(attempt,message_if_none)
importFrom(attempt,stop_if)
......@@ -65,6 +66,7 @@ importFrom(fs,path_home_r)
importFrom(glue,glue)
importFrom(magrittr,"%>%")
importFrom(odbc,odbc)
importFrom(odbc,odbcListDrivers)
importFrom(purrr,map)
importFrom(purrr,map2_chr)
importFrom(rlang,.data)
......
# datalibaba 0.0.0.9010
- Ajout de test unitaire
- bug fix post_dico_attr() plantait la session si le paramètre ecoSQL valait TRUE (#31)
# datalibaba 0.0.0.9009
- Gestion des tables non géo dans la fonction `importer_data` : Ajout d'une ligne pour définir explicitement `query_sql_limit` dans la fonction importer_data (cas d'une table non géo).
# datalibaba 0.0.0.9008
- Ajout d'un paramètre booleen `ecoSQL` à la fonction `connect_to_db` pour switcher de driver (passage du `DBI::dbDriver("PostgreSQL")` si `EcoSQL = FALSE`, à `RPostgres::Postgres()` si `ecoSQL = TRUE` adapté à l'usage de l'offre d'hébergement de base EcoSQL)
......
......@@ -11,7 +11,7 @@
#' @param ... eventuels autres arguments de la fonction d'ouverture de connexion `connect_to_db`
#'
#' @importFrom attempt stop_if stop_if_not
#' @importFrom DBI dbSendQuery dbDisconnect
#' @importFrom DBI dbExecute dbDisconnect
#' @importFrom glue glue
#' @importFrom rpostgis dbTableInfo
#' @return NULL
......@@ -47,7 +47,7 @@ commenter_champs <- function(comment = NULL, var = NULL, table = NULL, schema =
var2 <- paste0("\"", var, "\"")
lib_var <- gsub("\'", "\'\'", comment)
requete <- paste0("COMMENT ON COLUMN ", schema, ".", table, ".", var2, " IS \'", enc2utf8(lib_var), "\';")
DBI::dbSendQuery(conn = con, statement = requete)
DBI::dbExecute(conn = con, statement = requete)
DBI::dbDisconnect(con)
rm(con)
......@@ -65,7 +65,7 @@ commenter_champs <- function(comment = NULL, var = NULL, table = NULL, schema =
#' @param ... eventuels autres arguments de la fonction d'ouverture de connexion `connect_to_db`
#'
#' @importFrom attempt stop_if_not stop_if
#' @importFrom DBI dbSendQuery dbDisconnect
#' @importFrom DBI dbExecute dbDisconnect
#' @importFrom glue glue
#' @importFrom purrr map
#' @importFrom rpostgis dbTableInfo
......@@ -111,7 +111,7 @@ post_dico_attr <- function(dico = NULL, table = NULL, schema = NULL, db = "publi
# ecriture de la requete de commentaire du champ
commentaire <- paste0("COMMENT ON COLUMN ", schema, ".", table, ".", var, " IS \'", enc2utf8(lib_var), "\';")
# execution de la requete
DBI::dbSendQuery(conn = con, statement = commentaire)
DBI::dbExecute(conn = con, statement = commentaire)
}
# Envoi des commentaires de champs en serie
......
#' Connexion au serveur datamart
#' Connexion au serveur PostgreSQL
#'
#' @param db la database sur laquelle se connecter
#' @param user le profil utilisateur avec lequel se connecter : does ou dreal, suffixe utilise pour les variable d'environnement
#' @param user_id le nom utilisateur avec lequel se connecter tel que renseigné dans votre renviron
#' @param user_pwd le mot de passe avec lequel se connecter tel que renseigné dans votre renviron
#' @param server l'adresse ip du serveur, laisser à NULL pour utiliser le variable d'environnement du .Renviron
#' @param server l'adresse ip du serveur PostgreSQL, laisser à NULL pour utiliser le variable d'environnement du .Renviron
#' @param ecoSQL mettre à TRUE pour switcher vers un driver adapté à l'usage de l'offre d'hébergement de base EcoSQL (Experimental)
#' @param ... eventuels autres arguments de la fonction d'ouverture de connexion `connect_to_db`
#' @return La fonction cree un connecteur pour se connecter à la base posgresql du serveur via le driver DBI "PostgreSQL" ou `RPostgres::Postgres()` si `ecoSQL = TRUE`.
#' @importFrom DBI dbDriver dbConnect
#' @importFrom odbc odbc
#' @importFrom glue glue
#' @importFrom RPostgres Postgres
#' @export
#'
#' @examples
......@@ -45,17 +44,18 @@ connect_to_db <- function(db = "datamart",
}
#' Connexion au serveur via ODBC connection string
#' Connexion au serveur PostgreSQL via ODBC connection string
#'
#' @param db la database sur laquelle se connecter
#' @param user le profil utilisateur avec lequel se connecter : does ou dreal
#' @param user_id le nom utilisateur avec lequel se connecter tel que renseigné dans votre renviron
#' @param user_pwd le mot de passe avec lequel se connecter tel que renseigné dans votre renviron
#' @param server l'adresse ip du serveur, laisser à NULL pour utiliser le variable d'environnement du .Renviron
#' @param driver choix du driver (actuellement seul PostgreSQL est accepté)
#' @return La fonction créé un connecteur pour se connecter à la base posgresql du serveur via le driver "PostgreSQL".
#' @return Un connecteur con
#' @importFrom DBI dbDriver dbConnect
#' @importFrom odbc odbc
#' @importFrom odbc odbc odbcListDrivers
#' @importFrom glue glue
#' @export
#'
......@@ -67,20 +67,38 @@ connect_to_dbi <- function(db="datamart",
user="does",
user_id=paste0("user_",user),
user_pwd = paste0("pwd_",user),
server = NULL){
server = NULL,
driver = "PostgreSQL"){
required_driver <- all(
driver %in% c(NULL,"PostgreSQL") #liste a enrichir si on souhaite permettre d autre SGBD comme mariaDB...
)
if (isFALSE(required_driver)) {
stop("The driver must be NULL or 'PostgreSQL'")
}
if(!is.null(driver) && driver == "PostgreSQL"){patterndriver <-"^Postgre.*UNICODE|Unicode.*"}
else{patterndriver <- "^_"}#si driver NULL fail
if(is.null(server)) {server <- Sys.getenv("server")}
dbi_user <- Sys.getenv(user_id)
dbi_pwd <- Sys.getenv(user_pwd)
con_chaine <- glue::glue("Driver={PostgreSQL Unicode(x64)};Server=$server$;\nDatabase=$db$;\nUID=$user_id$;\nPWD=$user_pwd$;\nPort=$Sys.getenv('port')$;",
listdriver<-odbc::odbcListDrivers()
drv_unicode_postgres <- listdriver$name[grepl(patterndriver, listdriver$name)][1]
if(!is.na(drv_unicode_postgres)){
#voir https://www.connectionstrings.com/
con_chaine <- glue::glue("Driver={",drv_unicode_postgres,"};Server=$server$;Database=$db$;Uid=$dbi_user$;Pwd=$dbi_pwd$;Port=$Sys.getenv('port')$;",
.open = "$",
.close= "$")
con <- DBI::dbConnect(odbc::odbc(),
.connection_string = ,
.connection_string = con_chaine,
timeout = 10,
encoding = "UTF-8")
}else{
stop("alert: Pas de driver Postgresql pour ODBC")
}
# if(.Platform$OS.type == "windows") {
# DBI::dbSendQuery(con,"SET client_encoding TO \'windows-1252\'")
# DBI::dbExecute(con,"SET client_encoding TO \'windows-1252\'")
# }
return(con)
......
......@@ -23,7 +23,7 @@
#' \dontrun{
#' importer_data(table = "test_iris", schema = "public", db = "public", user = "does")
#' }
#' @source {rpostgis} http://mablab.org/rpostgis/
#' @source \\{rpostgis}\\ http://mablab.org/rpostgis/
importer_data <- function(table = NULL, schema = NULL, db = "public", server = NULL, user = "does", limit = 0, ...) {
......@@ -31,20 +31,20 @@ importer_data <- function(table = NULL, schema = NULL, db = "public", server =
attempt::stop_if(schema, is.null, msg = "l'argument schema n'est pas renseign\u00e9")
attempt::stop_if(db, is.null, msg = "l'argument db n'est pas renseign\u00e9")
attempt::stop_if(user, is.null, msg = "l'argument user n'est pas renseign\u00e9")
attempt::stop_if_not(limit, is.numeric, msg = "l'argument user n'est pas num\u00e9rique")
attempt::stop_if_not(limit, is.numeric, msg = "l'argument limit n'est pas num\u00e9rique")
con <- connect_to_db(db = db, user = user, server = server, ...)
ecoSQL <- grepl("RPostgres", attributes(class(con)))
if(ecoSQL) name = DBI::Id(schema = schema, table = table) else name = c(schema, table)
attempt::stop_if_not(DBI::dbExistsTable(conn = con, name = name),
msg = paste0("La table '", paste(name, collapse = "'.'"), "' est introuvable."))
msg = paste0("La table '", paste(c(schema, table), collapse = "'.'"), "' est introuvable."))
# on recupere la liste des noms de champs de la table et leurs caracteristiques
champs <- rpostgis::dbTableInfo(conn = con, name = c(schema, table), allinfo = FALSE)
# recupere-t-on des proprietes de dataframe R dans zz_r_df_def ?
if(ecoSQL) name_r_def = DBI::Id(schema = schema, table = "zz_r_df_def") else name_r_def = c(schema, "zz_r_df_def")
if(ecoSQL) name_r_def = DBI::Id(schema = schema, table = "zz_r_df_def") else name_r_def = c(schema, "zz_r_df_def")
if(DBI::dbExistsTable(conn = con, name = name_r_def)) {
def_table <- DBI::dbReadTable(con, name_r_def) %>%
dplyr::filter(.data$table_nm == table)
......@@ -91,8 +91,8 @@ importer_data <- function(table = NULL, schema = NULL, db = "public", server =
if ("id_row__" %in% champs$column_name) {
data <- dplyr::arrange(.data = data, .data$id_row__) %>%
dplyr::select(-.data$id_row__)
data <- data %>% dplyr::arrange(.data$id_row__) %>%
dplyr::select(-"id_row__")
}
}
......@@ -199,6 +199,7 @@ get_data <- function(con = NULL,
schema = NULL,
table = NULL) {
attempt::stop_if(con, is.null, msg = "con n'est pas renseign\u00e9")
attempt::stop_if_not(class(con) == "PostgreSQLConnection", msg = "veuillez utiliser une connexion avec ecoSQL=FALSE")
attempt::stop_if(schema, is.null, msg = "schema n'est pas renseign\u00e9")
attempt::stop_if(table, is.null, msg = "table n'est pas renseign\u00e9")
......@@ -215,7 +216,7 @@ get_data <- function(con = NULL,
#' @param schema Le nom du schema sur le serveur de données.
#' @param table Le nom de la table sur le serveur de données.
#' @importFrom attempt stop_if
#' @importFrom DBI dbSendQuery dbReadTable Id
#' @importFrom DBI dbReadTable Id
#'
#' @return un dataframe
#' @export
......@@ -224,6 +225,7 @@ get_data_dbi <- function(con = NULL,
schema = NULL,
table = NULL) {
attempt::stop_if(con, is.null, msg = "con n'est pas renseign\u00e9")
attempt::stop_if_not(class(con) == "PqConnection", msg = "veuillez utiliser une connexion avec ecoSQL=TRUE")
attempt::stop_if(schema, is.null, msg = "schema n'est pas renseign\u00e9")
attempt::stop_if(table, is.null, msg = "table n'est pas renseign\u00e9")
tbl <- DBI::Id(schema = schema, table = table)
......
......@@ -7,6 +7,7 @@
#' @param ... eventuels autres arguments de la fonction d'ouverture de connexion `connect_to_db`
#' @return Un vecteur de caractères avec les tables présentes sur le schéma schema du connecteur con.
#' @importFrom attempt stop_if_all message_if_none stop_if stop_if_not
#' @importFrom dplyr arrange select
#' @importFrom DBI dbGetQuery dbDisconnect
#' @importFrom glue glue
#' @export
......@@ -39,8 +40,9 @@ list_tables <- function(con = NULL, schema = NULL, db = NULL, user = NULL, ...)
if(con_a_creer_fermer) {
DBI::dbDisconnect(connexion)
}
return(all_tables$table_name)
res <- all_tables %>% arrange(.data$table_name)
res <- res$table_name
return(res)
}
......
......@@ -29,7 +29,7 @@
#' poster_data(data = iris, table = "test_iris", schema = "public", db = "public",
#' pk = NULL, post_row_name = FALSE, overwrite = TRUE, user = "does")
#' }
#' @source {rpostgis} http://mablab.org/rpostgis/
#' @source \\{rpostgis}\\ http://mablab.org/rpostgis/
poster_data <- function(data = NULL,
table = NULL,
......@@ -71,7 +71,6 @@ poster_data <- function(data = NULL,
## découverte du type de connexion
ecoSQL <- grepl("RPostgres", attributes(class(con)))
## Creation de la table des definitions utiles pour le reimport dans R du jeu de donnee------------
if(ecoSQL) nom_table = DBI::Id(schema = schema, table = "zz_r_df_def") else nom_table = c(schema, "zz_r_df_def")
......@@ -84,7 +83,7 @@ poster_data <- function(data = NULL,
rpostgis::dbAddKey(conn = con, c(schema, "zz_r_df_def"), colname = "table_nm",
type = "primary")
rpostgis::dbComment(conn = con, c(schema, "zz_r_df_def"),
comment = "Table holding R dataframes columns definitions (for import/export using rpostgis :: db(Read/Write)DataFrame) or {datalibaba}.")
comment = "Table holding R dataframes columns definitions (for import/export using rpostgis :: db(Read/Write)DataFrame) or datalibaba.")
})
message("Nouvelle table de d\u00e9finition des R dataframes R cr\u00e9\u00e9e : ",
schema, ".\"zz_r_df_def\".")
......@@ -260,7 +259,8 @@ post_data <- function(con,
overwrite = FALSE
) {
attempt::stop_if(con, is.null, msg = "con n\'est pas renseign\u00e9")
attempt::stop_if_not(deparse(substitute(con)), exists, msg = glue::glue("le connecteur {con} n\'existe pas"))
attempt::stop_if_not(deparse(substitute(con)), exists, msg = "le connecteur con n\'existe pas dans l\'environnement")
attempt::stop_if_not(class(con) == "PostgreSQLConnection", msg = "veuillez utiliser une connexion avec ecoSQL=FALSE")
attempt::stop_if(data, is.null, msg = "data n\'est pas renseign\u00e9")
attempt::stop_if_not(data, is.data.frame, msg = glue::glue("le dataframe {data} n\'exsiste pas"))
attempt::stop_if(schema, is.null, msg = "schema n\'est pas renseign\u00e9")
......@@ -274,18 +274,26 @@ post_data <- function(con,
#' Chargement d'un dataset sur le serveur en dbi
#' @description
#' `r lifecycle::badge("deprecated")`
#'
#' Cette fonction a été dépréciée car non fonctionnelle en l'état
#' Elle désormais équivalente à post_data et il est conseillé d'utiliser
#' poster_data
#'
#' @param con Le connecteur de classe PosgreSQLConnection.
#' @param data Un dataframe a importer.
#' @param schema Le nom du schema sur le serveur de donnees.
#' @param table Le nom de la table sur le serveur de donnees.
#' @param overwrite TRUE si on veut ecraser le fichier deja present.
#' @import lifecycle
#' @importFrom attempt stop_if stop_if_not
#' @importFrom DBI dbWriteTable Id dbSendQuery
#' @importFrom DBI dbWriteTable Id
#' @importFrom glue glue
#'
#' @return NULL, la fonction lance le chargement du dataset present dans l'environnement R et son ecriture sur le serveur
#' @export
#' @keywords internal
#'
post_data_dbi <- function(con = NULL,
......@@ -293,16 +301,7 @@ post_data_dbi <- function(con = NULL,
schema = NULL,
table = NULL,
overwrite = FALSE) {
attempt::stop_if(con, is.null, msg = "con n\'est pas renseign\u00e9")
attempt::stop_if_not(deparse(substitute(con)), exists, msg = glue::glue("le connecteur {con} n\'existe pas"))
attempt::stop_if(data, is.null, msg = "data n\'est pas renseign\u00e9")
attempt::stop_if_not(data, is.data.frame, msg = glue::glue("le dataframe {data} n\'exsiste pas"))
attempt::stop_if(schema, is.null, msg = "schema n\'est pas renseign\u00e9")
attempt::stop_if(table, is.null, msg = "table n\'est pas renseign\u00e9")
attempt::stop_if_not(schema, ~ .x %in% list_schemas(con), msg = glue::glue("le schema {schema} n\'existe pas"))
attempt::stop_if(table %in% list_tables(con,schema) & !overwrite, msg = glue::glue("La table {table} existe d\u00e9j\u00e0 sur le schema {schema} et le param\u00e8 tre overwrite est \u00e0 FALSE"))
tbl <- DBI::Id(schema = schema, table = table)
DBI::dbWriteTable(con, tbl, data, overwrite = overwrite )
return(invisible(NULL))
lifecycle::deprecate_warn("0.0.0.9010", "post_data_dbi()", "poster_data()")
post_data(con=con, data = data, schema = schema, table = table, overwrite = overwrite)
}
......@@ -51,22 +51,24 @@ set_schema_rights <- function(schema = "public", table = NULL, con = NULL, db =
tables_concernees <- ifelse(is.null(table), "ALL TABLES", table)
droit2 <- dplyr::transmute(droits, liste_priv = gsub("\\{|\\}", "", .data$liste_priv) %>% strsplit(split = ",") %>% list) %>%
dplyr::summarise(liste_priv = list(unlist(.data$liste_priv)) ) %>%
dplyr::pull(.data$liste_priv) %>% unlist() %>% tibble::enframe(name = NULL) %>%
tidyr::separate(col = .data$value, sep = "([=/])", into = c("role", "droits", "granter"), remove = TRUE) %>%
dplyr::select(-.data$granter) %>%
dplyr::distinct() %>%
mutate(privilege = dplyr::case_when(
.data$droits == "arwdDxt" ~ "ALL",
.data$droits == "r" ~ "SELECT",
TRUE ~ purrr::map2_chr(.x = ref_privilege$abrv, .y = ref_privilege$verbe, .f = ~ ifelse(grepl(pattern = .x, .data$droits), .y, NA_character_)) %>%
setdiff(., NA_character_) %>%
paste(collapse = ", ")
),
sql = paste0("GRANT ", .data$privilege," ON ", tables_concernees ," IN SCHEMA ", schema ," TO ", .data$role, ";")
)
## non fonctionnel pour le moment
# droit2 <- dplyr::transmute(droits, liste_priv = gsub("\\{|\\}", "", .data$liste_priv) %>% strsplit(split = ",") %>% list) %>%
# dplyr::summarise(liste_priv = list(unlist(.data$liste_priv)) ) %>%
# dplyr::pull(.data$liste_priv) %>% unlist() %>% tibble::enframe(name = NULL) %>%
# tidyr::separate(col = .data$value, sep = "([=/])", into = c("role", "droits", "granter"), remove = TRUE) %>%
# dplyr::select(-.data$granter) %>%
# dplyr::distinct() %>%
# mutate(privilege = dplyr::case_when(
# .data$droits == "arwdDxt" ~ "ALL",
# .data$droits == "r" ~ "SELECT",
# TRUE ~ purrr::map2_chr(.x = ref_privilege$abrv, .y = ref_privilege$verbe, .f = ~ ifelse(grepl(pattern = .x, .data$droits), .y, NA_character_)) %>%
# setdiff(., NA_character_) %>%
# paste(collapse = ", ")
# ),
# sql = paste0("GRANT ", .data$privilege," ON ", tables_concernees ," IN SCHEMA ", schema ," TO ", .data$role, ";")
# )
return(invisible(NULL))
}
......@@ -17,6 +17,7 @@ knitr::opts_chunk$set(
<!-- badges: start -->
[![pipeline status](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/datalibaba/badges/master/pipeline.svg)](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/datalibaba/-/commits/master)[![coverage report](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/datalibaba/badges/master/coverage.svg?job=coverage)](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/datalibaba/-/commits/master)
<!-- badges: end -->
{datalibaba} est un ensemble de fonctions visant à faciliter l'alimentation du serveur de données du DREAL <datalab/> Pays de la Loire.
......
......@@ -4,6 +4,10 @@
# datalibaba <img src='man/figures/logo.png' align="right" height="139" />
<!-- badges: start -->
[![pipeline
status](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/datalibaba/badges/master/pipeline.svg)](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/datalibaba/-/commits/master)[![coverage
report](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/datalibaba/badges/master/coverage.svg?job=coverage)](https://gitlab-forge.din.developpement-durable.gouv.fr/dreal-pdl/csd/datalibaba/-/commits/master)
<!-- badges: end -->
{datalibaba} est un ensemble de fonctions visant à faciliter
......
Version: 1.0
ProjectId: 643276e3-9018-4b1c-85b4-c14054b6bc51
RestoreWorkspace: No
SaveWorkspace: No
......
install.packages("DBI")
install.packages("odbc")
if(DBI::dbCanConnect(RPostgres::Postgres(), host="localhost", user="runner", password=Sys.getenv("BDD_RUNNER_PWD"), dbname="postgres")){
con <- DBI::dbConnect(RPostgres::Postgres(), host="localhost", user="runner", password=Sys.getenv("BDD_RUNNER_PWD"), dbname="postgres")
if(DBI::dbCanConnect(RPostgres::Postgres(), host="localhost", user="runner", password=Sys.getenv("BDD_RUNNER_PWD"), dbname="test_datalibaba") == TRUE){
DBI::dbExecute(con, "DROP DATABASE IF EXISTS test_datalibaba;")
}
DBI::dbExecute(con, "CREATE DATABASE test_datalibaba WITH OWNER = runner ENCODING = 'UTF8' CONNECTION LIMIT = -1;")
DBI::dbDisconnect(con)
con <- DBI::dbConnect(RPostgres::Postgres(), host="localhost", user="runner", password=Sys.getenv("BDD_RUNNER_PWD"), dbname="test_datalibaba")
DBI::dbExecute(con, "CREATE EXTENSION postgis;")
DBI::dbExecute(con, "CREATE EXTENSION postgis_topology;")
#autre dbExecute si besoin de plus
#si on veut lire un script sql mesreq.sql, le mettre dans /dev et executer
# system(paste0("( echo dev/mesreq.sql ) | psql \"postgresql://runner:",Sys.getenv("BDD_RUNNER_PWD"),"@127.0.0.1:5432/test_datalibaba\""))
print('local database postgresql works !')
}else{
print(DBI::dbCanConnect(RPostgres::Postgres(), host="localhost", user="runner", password=Sys.getenv("BDD_RUNNER_PWD"), dbname="postgres"))
print('alert: local database postgresql doesnt work !')
}
path.n: NAMESPACE
path.d: DESCRIPTION
dir.r: R
dir.v: vignettes
dir.t: tests
extra.suggests: ~
pkg_ignore: ~
document: yes
normalize: yes
inside_rmd: no
must.exist: yes
check_if_suggests_is_installed: yes
......@@ -2,7 +2,7 @@
% Please edit documentation in R/connect_to_db.R
\name{connect_to_db}
\alias{connect_to_db}
\title{Connexion au serveur datamart}
\title{Connexion au serveur PostgreSQL}
\usage{
connect_to_db(
db = "datamart",
......@@ -23,7 +23,7 @@ connect_to_db(
\item{user_pwd}{le mot de passe avec lequel se connecter tel que renseigné dans votre renviron}
\item{server}{l'adresse ip du serveur, laisser à NULL pour utiliser le variable d'environnement du .Renviron}
\item{server}{l'adresse ip du serveur PostgreSQL, laisser à NULL pour utiliser le variable d'environnement du .Renviron}
\item{ecoSQL}{mettre à TRUE pour switcher vers un driver adapté à l'usage de l'offre d'hébergement de base EcoSQL (Experimental)}
......@@ -33,7 +33,7 @@ connect_to_db(
La fonction cree un connecteur pour se connecter à la base posgresql du serveur via le driver DBI "PostgreSQL" ou \code{RPostgres::Postgres()} si \code{ecoSQL = TRUE}.
}
\description{
Connexion au serveur datamart
Connexion au serveur PostgreSQL
}
\examples{
\dontrun{
......
......@@ -2,14 +2,15 @@
% Please edit documentation in R/connect_to_db.R
\name{connect_to_dbi}
\alias{connect_to_dbi}
\title{Connexion au serveur via ODBC connection string}
\title{Connexion au serveur PostgreSQL via ODBC connection string}
\usage{
connect_to_dbi(
db = "datamart",
user = "does",
user_id = paste0("user_", user),
user_pwd = paste0("pwd_", user),
server = NULL
server = NULL,
driver = "PostgreSQL"
)
}
\arguments{
......@@ -22,6 +23,8 @@ connect_to_dbi(
\item{user_pwd}{le mot de passe avec lequel se connecter tel que renseigné dans votre renviron}
\item{server}{l'adresse ip du serveur, laisser à NULL pour utiliser le variable d'environnement du .Renviron}
\item{driver}{choix du driver (actuellement seul PostgreSQL est accepté)}
}
\value{
La fonction créé un connecteur pour se connecter à la base posgresql du serveur via le driver "PostgreSQL".
......@@ -29,7 +32,7 @@ La fonction créé un connecteur pour se connecter à la base posgresql du serve
Un connecteur con
}
\description{
Connexion au serveur via ODBC connection string
Connexion au serveur PostgreSQL via ODBC connection string
}
\examples{
\dontrun{
......
......@@ -4,7 +4,7 @@
\alias{importer_data}
\title{Import d'une table a partir du serveur de donnees, fonction qui s'adapte aux types de table a charger : recuperation des modalites des facteurs si chargee avec {rpostgis}, sf dataframe si table geographique.}
\source{
{rpostgis} http://mablab.org/rpostgis/
\\{rpostgis}\\ http://mablab.org/rpostgis/
}
\usage{
importer_data(
......
......@@ -27,5 +27,10 @@ post_data_dbi(
NULL, la fonction lance le chargement du dataset present dans l'environnement R et son ecriture sur le serveur
}
\description{
Chargement d'un dataset sur le serveur en dbi
\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}}
Cette fonction a été dépréciée car non fonctionnelle en l'état
Elle désormais équivalente à post_data et il est conseillé d'utiliser
poster_data
}
\keyword{internal}