首页 > 解决方案 > 如何在 Shiny 中使用 future_promise 异步写入数据库

问题描述

我正在尝试使用 DBI lib Shiny 将数据异步写入数据库(AWS postgres RDS)。到目前为止,这是成功的

data <- data.frame(id=threadr::uuid(), health_center_site_fact_id = "happy", total_patient=2)

write_user <- function(email, con) {
  uuid <- threadr::uuid()
  created_at = Sys.time()
  conn = con
    data.frame(id=uuid, health_center_site_fact_id = "happy", total_patient=2) %>%
    dbWriteTable(conn = conn, name = 'patientv',
                value = data,
                # overwrite = F,
                append = T,
                row.names = F) %>%
                print("database write successful :")

}

但是当我引入 future_promise 时,我得到了一个Unhandled promise error: Invalid connection错误。

data <- data.frame(id=threadr::uuid(), health_center_site_fact_id = "happy", total_patient=2)

    write_user <- function(email, con) {
      uuid <- threadr::uuid()
      created_at = Sys.time()
      conn = con
      future_promise({

        data.frame(id=uuid, health_center_site_fact_id = "happy", total_patient=2) %>%
        dbWriteTable(conn = conn, name = 'patientv',
                    value = data,
                    # overwrite = F,
                    append = T,
                    row.names = F) %>%
                    print("database write successful :")
    
       })
    }

标签: rshiny

解决方案


您不能将数据库连接从主进程复制到子进程,因为数据库连接只是指向内存中位置的指针,因此在子进程中,该指针几乎肯定会指向垃圾!您需要在子进程中重新创建数据库连接。


推荐阅读