I need to update column values conditionnaly on other columns in some PostgreSQL
database table. I managed to do it writing an SQL statement in R and executing it with dbExecute
from DBI
package.
library(dplyr)
library(DBI)
# Establish connection with database
con <- dbConnect(RPostgreSQL::PostgreSQL(), dbname = "myDb",
host="localhost", port= 5432, user="me",password = myPwd)
# Write SQL update statement
request <- paste("UPDATE table_to_update",
"SET var_to_change = 'new value' ",
"WHERE filter_var = 'filter' ")
# Back-end execution
con %>% dbExecute(request)
Is it possible to do so using only dplyr
syntax ? I tried, out of curiosity,
con %>% tbl("table_to_update") %>%
mutate(var_to_change = if (filter_var == 'filter') 'new value' else var_to_change)
which works in R but obviously does nothing in db since it uses a select
statement. copy_to
allows only for append
and overwite
options, so I can't see how to use it unless deleting then appending the filtered observations...
REPLACE INTO
instead ofINSERT INTO
? And in this way, we can ignore the third step ofDELETE
relevant rows from the table. – Selves